最后的小数是随机计数浮点数

时间:2014-07-06 19:33:18

标签: python python-3.x floating-point

我开始学习Python。我目前有以下一小段代码:

a = float(input())
b = float(3)
while a < b:
    print(a + 0.0001)
    a+=0.0001

这会计算,但在浮点数的末尾会出现小数。为什么他们来到那里,他们是什么?

输出:

enter image description here

1 个答案:

答案 0 :(得分:1)

这是因为问题中的数字并不完全由二进制浮点表示。从0.0001开始。 closest double precision value实际上是:

0.00010000000000000000479217360238592959831294137984514236450195312 5

所以当你写0.0001时,实际得到的是上面的数字。然后将其添加到您输入的任何值,然后结果是与其最接近的可表示值。

如果这让你感到震惊,那么我建议你阅读David Goldberg的永恒文章What Every Computer Scientist Should Know About Floating-Point Arithmetic