我目前正在学习的一本手册(我是一名新手)说:
与机器感应器相差较小的数值是相同的
使用Python,可以通过键入以下命令获得浮点值的机器epsilon
eps = numpy.finfo(float).eps现在,如果我检查
1 + eps/10 != 1我得到假的。
但如果我查一下
0.1 + eps/10 != 0.1我得到了真。
如果我把eps除以100,我的后一个逻辑表达式就变成假的。那么,机器感应器是如何工作的呢?Python文档刚刚说
最小可表示的正数,如1.0 + eps != 1.0。eps的类型是一个合适的浮点类型。
提前谢谢你。
发布于 2016-01-05 12:47:11
浮点数有一定的精度,在科学表示法中有几位小数点。数字越大,代表中最不重要的数字就越大,因此,可能有助于该数字的"epsilon“就越大。
因此,epsilon相对于它所加的数字,这实际上是在您引用的文档中所述:“.使1.0 + eps != 1.0”。如果“参考”数较小,例如一个数量级,那么eps也较小。
如果不是这样的话,你根本无法用小于eps的数字来计算(在我的例子中是2.2e-16)。
发布于 2016-01-05 21:00:53
在这种情况下,您实际上不需要np.finfo。您需要的是np.spacing,它计算输入和下一个可以精确表示的最大数字之间的距离。
本质上,np.spacing计算任何给定数字的“每股收益”。它使用数字的数据类型(原生python浮点数为64位浮点数),因此np.float32或np.float16将给出与64位浮点数不同的答案。
例如:
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-19https://stackoverflow.com/questions/34611858
复制相似问题