我目前正在学习的一本手册(我是个新手)说:
"Numbers which differ by less than machine epsilon are numerically the same"
使用Python,可以通过键入
eps = numpy.finfo(float).eps
现在,如果我查一下
1 + eps/10 != 1
我得到的是假的。
但如果我查一下
0.1 + eps/10 != 0.1
我得到了真的。
如果把eps除以100,后面的逻辑表达式就变成了False。 那么,机器epsilon是如何工作的呢?Python文档只是说
"The smallest representable positive number such that 1.0 + eps != 1.0. Type of eps is an appropriate floating point type."
提前谢谢你。
在这种情况下,您实际上不需要
np.finfo
。你想要的是np.spacing
,它计算输入和下一个可以精确表示的最大数字之间的距离。本质上,
np.spacing
计算任何给定数字的“eps”。它使用数字的数据类型(原生python浮点是64位浮点),因此np.float32
或np.float16
将给出与64位浮点不同的答案。例如:
结果是:
浮点数有一定的精度,在科学记数法中可以精确到小数点后几位。数字越大,表示中的最低有效位数字就越大,因此可以贡献该数字的“epsilon”就越大。
因此,epsilon是相对于它被添加到的数字,这实际上是在您引用的文档中声明的:“。。。这样1.0+eps!=1.0英寸。如果“参考”数小于,例如magnit的一个阶数,则eps也较小。
如果不是这样的话,你根本无法用小于eps的数字来计算(在我的例子中是
2.2e-16
)。相关问题 更多 >
编程相关推荐