恢复规范化操作时的精度问题

时间:2017-08-24 10:19:11

标签: python numpy floating-point precision

我正在做一些规范化操作,令我惊讶的是,当我试图恢复操作时,我得到了assert_array_almost_equal的默认6位小数精度的100%不匹配。为什么会这样?可以归结为我最大值的精确度吗?如果是这样,我怎样才能在numpy.ndarray.max()中获得更高的精确度?

from __future__ import division
import numpy

_max = numpy.float128(67.1036) # output of numpy.ndarray.max() on an a float32 array

def divide_and_mult(x, y):
    return numpy.divide(numpy.float128(x), y) * y

for i in range(100):
    try: numpy.testing.assert_array_equal(divide_and_mult(i, _max), numpy.float128(i))
    except AssertionError, e: print e

1 个答案:

答案 0 :(得分:2)

numpy数组不能比float128获得更高的精度,在大多数系统中,最好的甚至更低:float64

通常你不关心精度的损失,并使用np.testing.assert_almost_equal或类似的函数来测试特定的绝对和/或相对差异。

如果您想要以更高的精度执行此操作,则需要使用具有无限或至少用户定义精度的类型:decimal.Decimalfractions.Fraction或切换到符号数学库,如sympy