为什么 `math.ldexp` 会针对指数>1024 引发 OverflowError,但不会针对指数<-1073 引发溢出错误?

Why does `math.ldexp` raise OverflowError for exponent>1024, but not for exponent<-1073?

math.ldexp(0.5, 1025) 结果是 OverflowError。 Numpy 的等价函数 returns inf。然而,在另一端,math.ldexp(0.5, -1074) 不会引发异常,而是 returns 0.0,如下所示:

In [275]: math.ldexp(0.5, 1024)
Out[275]: 8.98846567431158e+307

In [276]: math.ldexp(0.5, 1025)
---------------------------------------------------------------------------
OverflowError                             Traceback (most recent call last)
<ipython-input-276-ce1573e0249b> in <module>()
----> 1 math.ldexp(0.5, 1025)

OverflowError: math range error

In [277]: math.ldexp(0.5, -1073)
Out[277]: 5e-324

In [278]: math.ldexp(0.5, -1074)
Out[278]: 0.0

为什么 Python 指数过大时会出现 OverflowError 而指数过小时则不会?是否有正当理由,或者这应该被视为错误?

众所周知,IEEE 浮点运算存在一定程度的不精确性。 0.0 是一个非常接近 math.ldexp(0.5, -1074) 的值。但是,没有有效的方法来表达接近 math.ldexp(0.5, 1025) 的值,所以我认为这就是它引发异常的原因。