程序是这个样子的:
#include<stdio.h>
void main()
{
float a,b;
a=0;
a=123456.789e5;
b=a+20;
printf("%f,%f\n",a,b);
}
书本上说:a和b的输出结果是一样的,但是我在VC++里面运行的结果却是:
12345678848.000000,12345678868.000000
明显是不一样的……此外,我将a的赋值语句改为了"a=123456.78"然后输出a,但是输出的结果却是123456.781250,求解释!
嗯。那么,根据书本上说的:因为a的数值比较大,而20比较小,当这两个数相加的时候,20会被忽略不计,从而a和b输出的结果是一样的,但是我运行的程序后,他们输出的结果不同,a是12345678900.00,而b是12345678920.00,是书本错了?
追答怎么是忽略不计呢?
是先把20转换成浮点型 然后在进行相加
其实,你可以理解就是两个数相加的话,要对其格式,那一个有小数点,一个没有,怎么对齐,要是让你在纸上做,那就人为对齐了,计算机呢。那就按一个格式来,整数可以转换成扩大的实数,数值的大小并不变,而要是实数裁剪成整数,那岂不是把数的一部分没啦,所以只好按照扩大来转换,再进行相加。
我不知道你书上怎么说忽略不计,这是在什么情况下说的。你看一下。我不知道。