当我使用下面的python代码时,我得到了两个不同的机器epsilon数量,原因是什么



当我使用以下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

最新更新