gpt4 book ai didi

c - C 中 pi 的无限级数逼近不终止

转载 作者:行者123 更新时间:2023-11-30 18:34:10 24 4
gpt4 key购买 nike

这是我的代码,当使用 print 语句时,它似乎是一个无限循环:

我可以解决的一些潜在问题是整数除法,也许可以弄清楚算法是否终止,以及它是否始终具有正确的输出,也许有一些我不明白的 C 语言特性导致了这个问题?

根据我的理解,由于总和趋于负无穷大,一旦达到 epsilon 精度的近似值,就会触发中断语句来结束算法。

#include <stdio.h>

int main()
{

double pi, sum, epsilon;
long long i=1;
long long max = 2147483647;
printf("Pleas enter the desired accuracy epsilon : ");
scanf("%f", &epsilon);
while (i<max){
if (i%2 == 0){
sum = -4.0/(2.0*i-1);
}else if (i%2 ==1){
sum = (4.0/(2.0*i-1));
}
if (sum < epsilon){
break;
}
pi += sum;
}
printf("The value of pi approximated to epsion : %f is %f\n", epsilon, pi);
return 0;
}

最佳答案

您没有在 while 循环中增加 i 的值。因此它的值始终保持为 1。

处理完成后,在 while 循环结束 } 之前递增 i

初始化pi、sum、epsilon的值,这样当您第一次尝试读取它们的值时就不会遇到未定义的行为。

此外,启用适当的选项(使用 GCC 的 -Wall),编译器会警告您,您正在尝试将 float 读入 double.

warning: format '%f' expects argument of type 'float *', but argument 2 has type 'double *' [-Wformat=]

scanf("%f", &epsilon);

~^ ~~~~~~~~

因此,您必须在 scanf 语句中使用正确的转换说明符:%lf 而不是 %f

如果您对数字 2147483647 不是很挑剔,只是想要一个大值,您也可以使用 ULLONG_MAX(来自 limits.h >) 初始化 max 而不是对值进行硬编码。

关于c - C 中 pi 的无限级数逼近不终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53166122/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com