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