考虑以下代码:

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

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

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

但很明显,计算机能够在所讨论的值的大致接近处存储数字,因此该定义似乎与我在这里看到的行为完全不一致。

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

  ask by Mehrdad translate from so

本文未有回复,本站智能推荐:

1回复

Python:pandas.DataFrame.comprod()和numpy.comprod()处理数字下溢吗?

具体地说,在将大量小数相乘时, pandas和numpy中的这些累积乘积函数是否以健壮的方式实现以处理下溢? 例如,他们是否使用log-sum-exp技巧? 谢谢。
2回复

防止Python中浮点除法的下溢

假设x和y都是非常小的数字,但我知道x / y的真值是合理的。 计算x/y的最佳方法是什么? 特别是,我一直在做np.exp(np.log(x) - np.log(y) ,但我不确定这是否会产生影响?
1回复

在什么时候我应该担心numpy值的下溢?

我正在使用Python numpy进行计算。 这是一个结果numpy数组: 那些都很小。 在什么时候我应该担心计算中的下溢? 这些需要超精确。 是否有一个值得确定的值范围,或者可能是一个表明这个值的参考?
1回复

避免使用exp下溢和numpy中的最小正float128

我试图计算以下比率: w(i) / (sum(w(j))其中w使用指数递减函数更新,即w(i) = w(i) * exp(-k) , k作为一个正参数。所有数字都是非负数。然后将这个比率用于公式(乘以常数并加上另一个常数)。正如预期的那样,我很快遇到了下溢问题。 我想这种情况经常发生,但有
2回复

如何处理浮点下溢?

我正在尝试理解C ++数值属性。 因此,我对下溢现象感兴趣。 任何人都可以给我一个下溢的例子以及如何处理它?
2回复

使用减法引起ieee-754浮点格式的下溢

这似乎很基本,但是我在回答以下问题时遇到很多麻烦: 给出以IEEE754格式表示的两个数字X和Y,以便计算XY将导致下溢。 据我了解,每项操作都可能导致下溢,但在我的生活中,我找不到一个减法示例。 请帮忙!!! 谢谢
2回复

朴素贝叶斯分类浮点下溢

在朴素贝叶斯中乘以大量概率可能会导致浮点下溢。 代替使用上面的公式(导致浮点下溢),使用下面给出的公式是否更可行/更好? 还是会截断信息?
1回复

如何检测由于浮点加法和乘法四舍五入而导致的精度损失? [关闭]

关闭。 这个问题需要更加集中。 它目前不接受答案。 想改善