为什么我们在写程序确定python中的"machine precision"时定义eps=1除以2
Why we define eps= 1 and divide by 2 when writing a program to determine "machine precision" in python
所以我已经有了我的程序来确定我的“机器精度”或我的 epsilon:
epsilon = 1
while 1 + epsilon != 1:
epsilon_2=epsilon
epsilon /= 2
print(epsilon_2)
而且我已经确认是对的。我的问题是我不明白为什么我们在第 1 行设置 epsilon = 2 以及为什么我们在第 4 行除以二。我用不同的值测试了 epsilon 和我用来除的数字,但几乎总是得到不同的结果.
这是为了计算出您的机器可以处理多少位精度。它假定二进制表示。在此代码中,epsilon
将采用二进制值 1、0.1、0.01、0.001,...这些值将以大致等同于 0.1 * 2**N
的形式存储,其中 N 是适当的整数。尾数始终为 0.1;该特性在每个循环中简单地移动 1
epsilon = 1
while 1 + epsilon != 1:
此添加强制执行单元 (EU) 将 epsilon 的值归一化为 0 的特征(2 的幂)。否则,标准浮点数表示法将以指数表示法存储数字,只需将特征更改为归一化尾数(数字的值)到最大分数 < 1.0.
whiel
条件检查归一化是否导致我们失去精度:给定机器的精度,epsilon
是否实际上变成了 0。如果不是...
epsilon_2=epsilon
epsilon /= 2
记住 有 差异的最新值。将 epsilon
向右移动一位(用铅笔和纸表示;用计算机表示,这只是将特征值减 1)并重复循环。
print(epsilon_2)
当您最终达到 标准化 epsilon 为 0.0 的点时,导致算术失效,打印 previous 值:算术仍然成功的那个。
这样就清楚了吗?
所以我已经有了我的程序来确定我的“机器精度”或我的 epsilon:
epsilon = 1
while 1 + epsilon != 1:
epsilon_2=epsilon
epsilon /= 2
print(epsilon_2)
而且我已经确认是对的。我的问题是我不明白为什么我们在第 1 行设置 epsilon = 2 以及为什么我们在第 4 行除以二。我用不同的值测试了 epsilon 和我用来除的数字,但几乎总是得到不同的结果.
这是为了计算出您的机器可以处理多少位精度。它假定二进制表示。在此代码中,epsilon
将采用二进制值 1、0.1、0.01、0.001,...这些值将以大致等同于 0.1 * 2**N
的形式存储,其中 N 是适当的整数。尾数始终为 0.1;该特性在每个循环中简单地移动 1
epsilon = 1
while 1 + epsilon != 1:
此添加强制执行单元 (EU) 将 epsilon 的值归一化为 0 的特征(2 的幂)。否则,标准浮点数表示法将以指数表示法存储数字,只需将特征更改为归一化尾数(数字的值)到最大分数 < 1.0.
whiel
条件检查归一化是否导致我们失去精度:给定机器的精度,epsilon
是否实际上变成了 0。如果不是...
epsilon_2=epsilon
epsilon /= 2
记住 有 差异的最新值。将 epsilon
向右移动一位(用铅笔和纸表示;用计算机表示,这只是将特征值减 1)并重复循环。
print(epsilon_2)
当您最终达到 标准化 epsilon 为 0.0 的点时,导致算术失效,打印 previous 值:算术仍然成功的那个。
这样就清楚了吗?