Python为结果增加了额外的功能

时间:2016-03-07 05:19:34

标签: python

我使用Python将一些简单的数字加在一起,我得到了一个奇怪的结果

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

这显然不是正确的答案,那么为什么Python会增加额外的一点呢? Python对于更复杂的计算有多可靠?

1 个答案:

答案 0 :(得分:2)

罪魁祸首是浮点数学。

  

浮点数学:

     

您的语言没有被破坏,它正在进行浮点数学运算。计算机只能本机存储整数,因此它们需要一些表示十进制数的方法。这种表示有一定程度的不准确性。这就是为什么,通常是.1 + .2!=。3。   为什么会这样?

     

实际上非常简单。当你有一个基础10系统(像我们的)时,它只能表示使用基数的素数因子的分数。 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将重复小数。因此,在基本10系统中,0.1和0.2(1/10和1/5),而干净的小数位,是计算机运行的基本2系统中的重复小数。当您对这些重复小数进行数学运算时,您最终得到剩余的小数当您将计算机的基本2(二进制)数转换为更易读的基数10时,它会继续存在。

来源:http://0.30000000000000004.com/