2016-03-07 85 views
0

我是用Python一些简单的数字加在一起,和我有一个奇怪的结果的Python增加了额外造成

>>> 16+4.8+6.4+0.48+1.92+.48 
30.080000000000002 

这显然是不正确的答案,那么为什么Python中添加额外的位? Python对于更复杂的计算有多可靠?

+0

你知道,这是一个重复。我搜索了它,我只是不知道该怎么称呼它。谢谢。 – MANA624

+1

我认为大多数程序员在某个时候都被这个困惑了。称之为通道仪式:-) – Carpetsmoker

回答

2

罪魁祸首是浮点数学。

浮点运算:

你的语言不破,它做浮点运算。计算机只能本地存储整数,所以它们需要一些表示十进制数的方法。这种表示有一定程度的不准确。这就是为什么,往往是,.1 + .2!= .3。 这是为什么发生?

其实很简单。当你有一个基地系统(像我们这样的基地系统)时,它只能表示使用基数的主要因素的分数。 10的主要因素是2和5.所以1/2,1/4,1/5,1/8和1/10都可以清楚地表示,因为分母都使用10的素数因子。相反,1/3,1/6和1/7都是重复小数,因为它们的分母使用3或7的素因子。在二进制(或基数2)中,唯一的素数因子是2.因此,您只能干净地表示分数只包含2个作为主要因素。在二进制中,1/2,1/4,1/8将全部用小数表示。而1/​​5或1/10会重复小数。因此,0.1和0.2(1/10和1/5),而基数为10的系统中的小数点后的小数点会在计算机运行的基本系统中重复小数点。当您对这些重复小数进行数学计算时,最终会得到剩余的当您将计算机的基数2(二进制)数字转换为更具人类可读性的基数10数字时,这些数字会继续存在。

来源:http://0.30000000000000004.com/