math.ldexp(0.5, 1025)
résultats dans OverflowError
. La fonction équivalente de Numpy renvoie inf
. De l'autre côté, cependant, math.ldexp(0.5, -1074)
ne soulève pas une exception, mais renvoie plutôt 0.0
, comme illustré ci-dessous:Pourquoi `math.ldexp` soulève OverflowError pour exponent> 1024, mais pas pour exponent <-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
Pourquoi Python raiso un OverflowError
lorsque l'exposant est trop grand, mais pas quand il est trop petit ? Y at-il une raison valable, ou cela devrait-il être considéré comme un bug?
Le point flottant est une représentation inexacte. '0.0' est la représentation inexacte la plus proche de' math.ldexp (0.5, -1074) '. Il n'y a pas de représentation en virgule flottante correspondante pour 'math.ldexp (0.5, 1025)'. –
Un exposant trop petit est * underflow *, pas * overflow *. –
@StevenRumbalski Le point flottant et 'math.ldexp (a, b)' sont des représentations exactes de tout nombre pouvant être écrit comme 'a * 2 ** b' ... – gerrit