为什么数学运算结果和程序运算结果不同?急。

来源:百度知道 编辑:UC知道 时间:2024/05/21 07:22:36
main()
{
float a=123456.789e5;
float b;
b=a+20;
printf("a=%f,b=%f\n",a,b);
}

运行结果:
实验运算的结果:a=12345678848.000000
b=12345678848.000000

数学运算的结果:a=12345678900
b=12345678920

还有追加分。

float的后几位是随机的,不能精确表示

float 占用32位二进制,有24位用来确定精度,8位用来确定10的多少次方.double占用64位二进制,有48位用来确定精度,16位用来确定的多少次方.24位二进制只能精确到1-2的24次方也就是大概7位数,48位二进制可以精确到2的48次放,大概是14到15位数。

转成二进制代码 手工加一下就能看到结果了