在这种情况下,你实际上不想要np.finfo
。你想要的是np.spacing
,它计算输入与下一个可以精确表示的最大数字之间的距离。
本质上,np.spacing
计算任何给定数字的“eps”。它使用数字的数据类型(本机 python 浮点数是 64 位浮点数),因此np.float32
or 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-19