为什么复杂的浮点除法与NumPy一起出现问题呢?

时间:2017-08-16 00:51:51

标签: python numpy floating-point underflow

考虑以下代码:

import numpy
numpy.seterr(under='warn')
x1 = 1 + 1j / (1 << 533)
x2 = 1 - 1j / (1 << 533)
y1 = x1 * 1.1
y2 = x2 * 1.1
z1 = x1 / 1.1
z2 = x2 / 1.1
print(numpy.divide(1, x1))  #              1-3.55641399918e-161j  # OK
print(numpy.divide(1, x2))  #              1+3.55641399918e-161j  # OK
print(numpy.divide(1, y1))  # 0.909090909091-3.23310363561e-161j  # underflow
print(numpy.divide(1, y2))  # 0.909090909091+3.23310363561e-161j  # underflow
print(numpy.divide(1, z1))  #            1.1-3.91205539909e-161j  # underflow
print(numpy.divide(1, z2))  #            1.1+3.91205539909e-161j  # underflow

无论我怎么看,下溢似乎都没有意义。像维基百科says

  

下溢是计算机程序中的一个条件,其中计算结果的绝对值小于计算机实际存储在其CPU内存中的

但很明显,计算机能够存储大致相关值的数字,因此这个定义似乎与我在这里看到的行为完全一致。

有人可以解释为什么其中一些正在给予下溢但其他人不是吗? 这是正确的行为还是一个错误?

0 个答案:

没有答案