首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

关于python浮点数,该怎么处理

2013-09-07 
关于python浮点数 1.0+2.0-3.00.0 1.1+2.2-3.34.440892098500626e-16 1.11+2.22-3.330.0 1.11

关于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做的测试:

/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

热点排行