This question already has answers here:
strange output in comparison of float with float literal
(8个答案)
4年前关闭。
我有以下程序:
结果如下:
为什么结果不是300000000000000000.000000?
(是的,这是使用联合的不正确/无效方法,但它恰好起作用了)
Wikipedia指出,单人最多可以处理9位数字而不会损失精度,而双15-17。因此,您的答案就在那里,不一定需要进行实验。
(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/