在C中获得inf输出的简单精度测试

时间:2016-02-02 16:24:21

标签: c sum precision

尝试测试精度,使得总和从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作为我的输出。

4 个答案:

答案 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;
}

与excel不同:^不是表示数字/变量的方法。

语言中,^是XOR bitwise operation

i XOR i时,您的代码0i=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,但依赖于编译器是一个坏习惯。此外,其他读者也不会清楚这些代码。