无意之中使用python(2.6、2.7)计算了一串加法:
51.2 + 61.0 + 78.5 + 64.1 + 30.3 + 52.4 + 12.0 + 46.0 + 83.6
得到的结果却是:
479.0999999999999
大吃一惊!
然后换种语言计算,使用C语言:
float sum = 51.2f + 61.0f + 78.5f + 64.1f + 30.3f + 52.4f + 12.0f + 46.0f + 83.6f;
printf("sum = %f\n", sum);
输出结果:
sum = 479.099976
额,这个。。。
然后同样使用C语言,但使用双精度浮点数:
double sum = 51.2 + 61.0 + 78.5 + 64.1 + 30.3 + 52.4 + 12.0 + 46.0 + 83.6;
printf("sum = %f\n", sum);
输出结果:
sum = 479.100000
这回看上去正确了。
由于浮点数在机器表示中是离散值,大部分小数只能是它的近似值,因此浮点数的运算存在误差,这是不可避免的,在程序设计中不能忽略这个问题,特别是对计算精度有很高的要求的时候。
在使用高级语言编程时,还是尽量用双精度或者更高精度的浮点数,单精度还是尽量不要用了吧。如有必要还需使用专门的库。
另外,python的浮点运算有点坑。。。