gpt4 book ai didi

python - Python 中的机器 Epsilon

转载 作者:太空狗 更新时间:2023-10-29 17:42:44 25 4
gpt4 key购买 nike

我目前正在学习的一本手册(我是新手)说:

"Numbers which differ by less than machine epsilon are numerically the same"

使用 Python,可以通过键入获得浮点值的机器 epsilon

eps = numpy.finfo(float).eps

现在,如果我检查

1 + eps/10 != 1

我得到 False。

但是如果我检查

0.1 + eps/10 != 0.1

我得到 True。

如果我将 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”。它使用数字的数据类型( native python float 是 64 位 float ),因此 np.float32np.float16 将给出与 64 位 float 不同的答案.

例如:

import numpy as np

print 'Float64, 1.0 -->', np.spacing(1.0)
print 'Float64, 1e12 -->', np.spacing(1e12)
print 'Float64, 1e-12 -->', np.spacing(1e-12)
print ''
print 'Float32, 1.0 -->', np.spacing(np.float32(1.0))
print 'Float32, 1e12 -->', np.spacing(np.float32(1e12))
print 'Float32, 1e-12 -->', np.spacing(np.float32(1e-12))

产生:

Float64, 1.0 --> 2.22044604925e-16
Float64, 1e12 --> 0.0001220703125
Float64, 1e-12 --> 2.01948391737e-28

Float32, 1.0 --> 1.19209e-07
Float32, 1e12 --> 65536.0
Float32, 1e-12 --> 1.0842e-19

关于python - Python 中的机器 Epsilon,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34611858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com