我开始学习Python。我目前有以下一小段代码:
a = float(input())
b = float(3)
while a < b:
print(a + 0.0001)
a+=0.0001
这会计算,但在浮点数的末尾会出现小数。为什么他们来到那里,他们是什么?
输出:
答案 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。