当我使用以下python代码时,我得到了两个不同的机器epsilon数量,原因是什么?
i=1
while i+1 != 1 :
m=i
i=i/2
print(m)
和
i=1
while i != 0 :
m=i
i=i/2
print(m)
将第一个代码的输出除以2不等于零,但将第二个代码的输出来除以2等于零!
如果你给每个循环添加一个计数,你会看到第二个循环比第一个迭代很多次
i=1
count = 0
while i+1 != 1 :
count += 1
m=i
i=i/2
print(count)
53
i=1
count = 0
while i != 0 :
count += 1
m=i
i=i/2
print(count)
1075
原因是浮点数学,您不应该试图显式检查一个浮点数是否与另一个相等。请参阅在Python中比较几乎相等的浮点值的最佳方法是什么?寻找一个可能的解决方案,浮点数学坏了吗?有关浮动的更多信息。
在python文档中搜索后,我发现了这个。Python显示一个浮点数的16位数字,如果它超过16位,Python会对其进行舍入。这并不意味着Python可以表示的最小数字是10^-16。它可以表示0.00000000000000000001234567887654321,但不能表示1.12345678876543211