2014-07-06 58 views
-5

我从学习Python开始。目前,我有以下的小块代码:最后一位小数是随机计数浮点数

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

此计算,但在浮动的尽头有出现小数。他们为什么来到那里,他们是什么?

输出:

enter image description here

+0

由于计算机不能以完美的准确度存储浮点数。 – Christian

+3

是什么让你觉得他们是随机的?另外,为什么要包含输出的*图片?阅读[this](http://stackoverflow.com/q/1089018/3001761)或[this](http://stackoverflow.com/q/2986150/3001761)或[this](http://stackoverflow.com/q/1594985/3001761)或... – jonrsharpe

+1

[每位计算机科学家应该了解的浮点算法](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) –

回答

1

这是因为在这个问题的数字没有被二进制浮点精确地表示。从0.0001开始。该closest double precision value其实:

0.00010000000000000000479217360238592959831294137984514236450195312 5 

所以,当你写0.0001你真正得到的是上面的数字。然后将它添加到您输入的任何值,然后结果是最接近的表示值。

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

+0

请问'0.0001'的值可以多少位吗? (我得到'0.0001000000000000004792173602385929598312941379845142364501953125'。) –

+0

@标记你是正确的。我错误地复制了rob页面的值 –

相关问题