当前位置: 代码迷 >> python >> 为什么`math.ldexp`对于指数> 1024而不是对于指数<-1073会引发OverflowError?
  详细解决方案

为什么`math.ldexp`对于指数> 1024而不是对于指数<-1073会引发OverflowError?

热度:121   发布时间:2023-06-16 10:17:23.0

math.ldexp(0.5, 1025)导致OverflowError Numpy的等效函数返回inf 但是, math.ldexp(0.5, -1074)math.ldexp(0.5, -1074)不会引发异常,而是返回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) ,因此我认为这就是为什么它引发Exception的原因。

  相关解决方案