因为float型只支持7位有效数字,对于a来说,也就是1234567这前面的7位是有效的,后面89就是一个不精确的数字了。所以,你a+20其实后面是什么值就只有编译器知道了。这个得看编译器的不同就有不同的结果了。如果前面为0的话,那就从非零的开始算起的七位有效数字。如0.0000012就是从12开始的有效数字。
这是浮点型数据的舍入误差,浮点型变量只能保证有效数字是7位,后面的数字无意义。。。
也就是说a这个数本身就是不准确的,而且有特别的大(相对于b来说)。于是程序计算的时候就“丢失”了小的数。。。出现了你说的运行结果
因为123456.789e5是双精度,你将双精度赋值给单精度容易出问题的。
你改成
double a,b;
就可以了~
个人认为数据太大,导致溢出