您能告诉我为什么这没有用吗? 我必须显示来自Basel问题的Pi编号,但是我不知道为什么该程序始终显示相同的编号,尽管我选择了不同的“编号”。 非常感谢!
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define Pi 3.14159
int main()
{
int number;
printf("max number: ");
scanf("%d",&number);
float euler;
float sum=0;
for(int i=1; i<number;i++)
{
sum=sum + (1/(i*i));
}
euler=sqrt(6*sum);
printf("Euler: %lf \n",euler);
printf("Pi from math library = %f",Pi);
return 0;
}
答案 0 :(得分:3)
问题是表达式(1/(i*i))
是使用整数数学计算的。换句话说,结果始终是整数,并且对于i
的任何大于1的值,结果始终为0。
最简单的解决方法是将该表达式重写为(1.0f/(i*i))
。这将对i
进行平方,将结果转换为float
,然后进行除法。
答案 1 :(得分:0)
发布的代码将integer
与double
文字混合在一起,并期望结果为float
以下建议的代码:
现在是建议的代码
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// define a float value rather than a double value
#define Pi 3.14159f
int main( void )
{
int number;
printf("max number: ");
scanf("%d",&number);
float euler;
float sum=0;
for(int i=1; i<number;i++)
{
// perform float math rather than integer math
sum=sum + (1.0f/(float)(i*i));
}
euler=sqrtf(6*sum); // < note float version rather than double version
printf("Euler: %lf \n",euler);
printf("Pi from math library = %f",Pi);
return 0;
}