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

当我使用下面的python代码时,我得到了两个不同的机器epsilon值,原因是什么?,python,Python,当我使用下面的python代码时,我得到了两个不同的机器epsilon值,原因是什么 i=1 while i+1 != 1 : 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) 五

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

i=1
while i+1 != 1 :
    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)
五十三

1075


其原因是浮点数学,您不应该尝试显式检查一个浮点数是否与另一个浮点数相等。请参阅以获取可能的解决方案,以及有关浮动的更多信息。

在我找到的python文档中搜索后。
Python显示浮点数的16位数字,如果浮点数超过16位,Python将其四舍五入。这并不意味着python可以表示的最小数量是10^-16。它可以表示0.00000000000001234567887654321,但不能表示1.1234567876543211

假设
i+1
是精确的;对于非常接近于0的数字来说,这是不正确的,因为加上一个“偷走”了小数部分的一点精度。注意:迭代次数可能不同亲爱的Sayse,谢谢。实际上我在寻找机器ε,我认为在这种情况下定义公差是没有意义的。你的想法是什么?
i=1
count = 0
while i+1 != 1 :
    count += 1
    m=i
    i=i/2

print(count)
i=1
count = 0
while i != 0 :
    count += 1
    m=i
    i=i/2

print(count)