在计算的时候,浮点数(float)和双精度(double)的截断,往往有一些意想不到的结果。
如
float a = 1.f / 81;
float b = 0;
for (int i = 0; i < 729; ++ i)
b += a;
printf("%.7g\n", b);
最终打印出
9.00023
但是
double a = 1.0 / 81;
double b = 0;
for (int i = 0; i < 729; ++ i)
b += a;
printf("%.15g\n", b);
最终打印出
8.99999999999996
在这种带小数的计算中,最好不要用+=,因为+=尤其容易引起截断问题,特别是float的精度不是很高的情况下。
国外有个链接,很长,有空去看看