float a=123456.123, b=654321.321;
printf("%f\n",a+b);
答案是:777777.437500,这个437500是哪来的,为什么不是777777.444000呢?
float a=123456.123, b=654321.321;
printf("%f\n",a+b);
答案是:777777.437500,这个437500是哪来的,为什么不是777777.444000呢?
由于存储位数有限,浮点数运算是有精度限制,比如float
类型能精确到有效数字7位,double
类型能精确到有效数字16位。
有效数字是从第一个非零数字开始算的。你输入的数据有9位有效数字,超出了float类型的所能表示的精度,因此结果就有截断误差。