numpy 数组中的浮点精度与其元素不同

float precision in numpy arrays differ from their elements

我有 numpy.float32 类型的值,以及 dtype="float32".

的 numpy 数组

当直接使用单个数组元素引用输出值的表示时,我得到的精度与输出数组对象本身的表示时的精度不同。

随后的计算也有点偏差,所以后一个值似乎是在后续向量/矩阵算法中使用的值。

为什么会有差异,这些精度"anomalies"必须手动处理吗?

>>> a = math.pi / 2

>>> a
1.5707963267948966

>>> elementx = numpy.float32(math.cos(a))

>>> arrayx = numpy.array([elementx], dtype="float32")

>>> elementx
6.1232343e-17

>>> arrayx
array([  6.12323426e-17], dtype=float32)

>>> t = numpy.float32(3.0)

>>> t * elementx
1.8369703e-16

>>> t * arrayx
array([  1.83697028e-16], dtype=float32)

(Python 3.5.2, GCC 5.4.0, linux 4.4.0-21-generic)

这些只是字符串表示的不同,值是相同的,计算并没有错。

>>> (t * elementx) == (t * arrayx)[0]
True