关于python浮点数,该怎么处理
关于python浮点数
>>> 1.0+2.0-3.0
0.0
>>> 1.1+2.2-3.3
4.440892098500626e-16
>>> 1.11+2.22-3.33
0.0
>>> 1.111+2.222-3.333
0.0
>>> 1.111+2.222-3.333
0.0
>>>
为什么第二个结果会输出这样一个很小的数呢,初学python,源码剖析还没看,跟python缓存机制有关吗?
------解决方案--------------------
和python无关,是计算机处理浮点数的误差所致。下面是用c做的测试:
------解决方案--------------------
计算机内部只有二进制整数,所有浮点数都是用它做位运算“模拟”出来的,只有精确而没有准确
精确度跟位有关,0.0其实也是0.00000000...,只是这0的个数也超出了位的个数
google "位运算 浮点数"
http://zh.wikipedia.org/wiki/%E6%B5%AE%E7%82%B9%E6%95%B0
>>> 1.0+2.0-3.0
0.0
>>> 1.1+2.2-3.3
4.440892098500626e-16
>>> 1.11+2.22-3.33
0.0
>>> 1.111+2.222-3.333
0.0
>>> 1.111+2.222-3.333
0.0
>>>
为什么第二个结果会输出这样一个很小的数呢,初学python,源码剖析还没看,跟python缓存机制有关吗?
------解决方案--------------------
和python无关,是计算机处理浮点数的误差所致。下面是用c做的测试:
/tmp/ cat x.c
#include <stdio.h>
main () {
printf("%e\n", 1.1 + 2.2- 3.3);
}
/tmp/ gcc x.c
/tmp/ ./a.out
4.440892e-16
------解决方案--------------------
计算机内部只有二进制整数,所有浮点数都是用它做位运算“模拟”出来的,只有精确而没有准确
精确度跟位有关,0.0其实也是0.00000000...,只是这0的个数也超出了位的个数
google "位运算 浮点数"
http://zh.wikipedia.org/wiki/%E6%B5%AE%E7%82%B9%E6%95%B0