这是我的代码,
s = 0
for i in range(10):
s += 0.1
print (s)
输出为0.9999999999999999,为什么不输出0.9?
答案 0 :(得分:2)
考虑这一部分。
1/2
它的输出是什么? 0.5
简单的权利。
现在1/3
输出是什么?
0.3
似乎没问题,因为
3 x 0.3 = 0.9
更准确地说,
3 x 0.33 = 0.99
甚至更多
3 x 0.333 = 0.999
如果你做了相同的话,你仍然会得到10个小数点,
3 x 0.33333333333 = 0.99999999999
如您所见,我们越来越接近价值1
,但从未如此
我们完全相同。这意味着我们在如此高精度的情况下越来越准确。
然而您通常不需要为您的简单程序提供此类精确度。看看Python docs对它的评价,
0.999999999,这比大多数人认为有用的数字更多,因此Python通过显示舍入值来保持可管理的位数
<强>但是强>
重要的是要意识到,从实际意义上说,这是一种错觉:机器中的价值并不完全是1/10,你只是将真实机器价值的显示四舍五入。一旦您尝试使用这些值进行算术
,这一事实就会变得明显
这意味着什么只是因为你看到了
>>>0.1
0.1
解释器中的并不意味着只是 0.1
机器中的真实值会是这样的,
0.1000000000000000055511151231257827021181583404541015625
在口译员中尝试这个,
>>> 0.1
0.1
>>> 0.2
0.2
>>> 0.1+0.2
0.30000000000000004
>>>
所以这就是所有0.1+0.2+0.3...
最终得到你的
0.999999999
有关详情,请参阅this YouTube视频。
答案 1 :(得分:1)
您的代码从0
迭代到9
,总共10次迭代。
这会给10 • 0.1 = 1
,但由于python浮点精度,将0.1
添加十次会产生0.99999
。