-
为什么有误差?
浮点数的误差来源于二进制储存,像0.9,0.7的二进制都是无限循环小数。
因为十进制小数转换为二进制什么乘二取整的,所以某一次乘二后,小数最后一位不是5时,就是无限循环小数。
例:
0.9375(D)= 0.1111(B)
而0.9376(D)转换为二进制就是无限循环的小数。而电脑不可能存一个无限的数,所以存在精度,同样的,也就有了误差。
-
误差的体现
这里用c语言编译。
int main()
{
float m = 0.7;
printf("%f\n",m);
return 0;
}
因为float精度为1*E-6,所以这里打印出的是0.700000
而打印出7位就成了0.6999999
同理,double精度为1*E-16,输出17位就是0.69999999999999996
注:
1、D:十进制数Decimal。
2、B:二进制数Binary。
3、H:十六进制数Hexadecimal。
4、O:八进制数Octal,为了不与数字0混淆,有时也用Q来表示八进制数。