我从学习Python开始。目前,我有以下的小块代码:最后一位小数是随机计数浮点数
a = float(input())
b = float(3)
while a < b:
print(a + 0.0001)
a+=0.0001
此计算,但在浮动的尽头有出现小数。他们为什么来到那里,他们是什么?
输出:
我从学习Python开始。目前,我有以下的小块代码:最后一位小数是随机计数浮点数
a = float(input())
b = float(3)
while a < b:
print(a + 0.0001)
a+=0.0001
此计算,但在浮动的尽头有出现小数。他们为什么来到那里,他们是什么?
输出:
这是因为在这个问题的数字没有被二进制浮点精确地表示。从0.0001
开始。该closest double precision value其实:
0.00010000000000000000479217360238592959831294137984514236450195312 5
所以,当你写0.0001
你真正得到的是上面的数字。然后将它添加到您输入的任何值,然后结果是最接近的表示值。
如果您对此感到震惊,那么我建议您阅读David Goldberg的永恒文章What Every Computer Scientist Should Know About Floating-Point Arithmetic。
请问'0.0001'的值可以多少位吗? (我得到'0.0001000000000000004792173602385929598312941379845142364501953125'。) –
@标记你是正确的。我错误地复制了rob页面的值 –
由于计算机不能以完美的准确度存储浮点数。 – Christian
是什么让你觉得他们是随机的?另外,为什么要包含输出的*图片?阅读[this](http://stackoverflow.com/q/1089018/3001761)或[this](http://stackoverflow.com/q/2986150/3001761)或[this](http://stackoverflow.com/q/1594985/3001761)或... – jonrsharpe
[每位计算机科学家应该了解的浮点算法](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) –