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)'. –
Слишком маленький показатель - это * underflow *, not * overflow *. –
@StevenRumbalski Плавающая точка и 'math.ldexp (a, b)' являются точными представлениями для любого числа, которое может быть записано как 'a * 2 ** b' ... – gerrit