尝试测试精度,使得总和从1到100,但我的输出仍然以inf形式出现。
#include <stdio.h>
int main()
{
float x=0.0 ;
double y =0.0;
int i;
for(i=1; i<100000; i = i+1)
{
x=(float) x+( 1.0f/(3.0f*(float)(i*i)));
y=(double) y+ ( 1.0/(3.0*(double)(i*i)));
}
printf("Natural Order \n");
printf("Single Precision: ");
printf("%f", x);
printf("\n");
printf("Double Precision: ");
printf("%lf", y);
printf("\n");
}
我已经多次改变了我的范围,但仍然将inf作为我的输出。
答案 0 :(得分:3)
i^2
不是i-squared,而是二元操作(xor)。使用例如而是i*i
。对于更高的权力,还有pow
函数。
答案 1 :(得分:3)
你想要的是以下内容:
int main()
{
float x=0.0 ;
double y =0.0;
int i;
for(i=1; i<10; i = i+1)
{
x= x+( 1.0f / ( 3.0f * (float)(i)*(float)(i) ));
y= y+( 1.0 / ( 3.0 * (double)(i)*(double)(i) ));
}
printf("Single Precision: ");
printf("%f", x);
printf("\n");
printf("Double Precision: ");
printf("%f", y);
printf("\n");
return 0;
}
c与excel不同:^
不是表示数字/变量的方法。
在c语言中,^是XOR bitwise operation
i XOR i
时,您的代码0
为i=2
。然后printf
输出inf,因为除以零。
我做了很多代码优化,LD A, 0
改为XOR A
... Z80说话:)
请注意,printf
%f
格式会将传递的变量提升为double
。
答案 2 :(得分:3)
表达式i^2
表示i BITWISE-XOR 2
,而不是重复乘法。
i^2
的某些值为零 - 当i=2
时 - 这意味着您有时会除以零。
将(i^2)
替换为(i*i)
。
答案 3 :(得分:-1)
printf("Double Precision: ");
printf("%lf", y); //double has %lf format specifier.
实际上,根据link float
会在需要时自动提升为double
,但依赖于编译器是一个坏习惯。此外,其他读者也不会清楚这些代码。