0
math.ldexp(0.5, 1025)
結果在OverflowError
。 Numpy的等效函數返回inf
。在另一端,但是,math.ldexp(0.5, -1074)
沒有引發異常,而是返回0.0
,如下圖所示:爲什麼`math.ldexp`會引發OverflowError指數大於1024,但不會指數<-1073?
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的raiso的OverflowError
當指數太大,而不是在它太小?有沒有正當的理由,還是應該被視爲一個錯誤?
浮點是不精確的表示。 '0.0'是'math.ldexp(0.5,-1074)'最接近的不精確表示。 'math.ldexp(0.5,1025)'沒有相應的浮點表示。 –
指數太小*是*下溢,而不是*溢出*。 –
@StevenRumbalski浮點數和'math.ldexp(a,b)'是任何可以寫成'a * 2 ** b'的數字的精確表示。 – gerrit