This question already has answers here:
strange output in comparison of float with float literal
                                
                                    (8个答案)
                                
                        
                                4年前关闭。
            
                    
我有以下程序:

float x = 3.e17;
printf("x = %f", x);


结果如下:

x = 299999995292024832.000000


为什么结果不是300000000000000000.000000?

最佳答案

#include <stdio.h>
#include <stdlib.h>

union
{
    double d;
    float f;
    unsigned int ui[2];
} myun;

int main ( void )
{
    float  fx = 3.e17;
    double dx = 3.e17;
    printf("fx %f\n",fx);
    printf("dx %lf\n",dx);
    myun.f=fx;
    printf("fx 0x%08X\n",myun.ui[0]);
    myun.ui[0]++;
    printf("fx %lf\n",myun.f);
    myun.d=dx;
    printf("dx 0x%08X 0x%08X\n",myun.ui[1],myun.ui[0]);
    return(0);
}


(是的,这是使用联合的不正确/无效方法,但它恰好起作用了)

fx 299999995292024832.000000
dx 300000000000000000.000000
fx 0x5C853A0D
fx 300000029651763200.000000
dx 0x4390A741 0xA4627800


Wikipedia指出,单人最多可以处理9位数字而不会损失精度,而双15-17。因此,您的答案就在那里,不一定需要进行实验。

关于c - C语言科学计数法问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35022693/

10-12 00:31
查看更多