В какой момент мне следует беспокоиться о переполнении в значениях numpy?

Я делаю расчеты с помощью Python numpy. Вот результирующий массив numpy:

[  5.15054786e-11   5.15251385e-11   5.15262922e-11 ...,   5.21100674e-11
5.21097550e-11   5.21088179e-11]

Они довольно крошечные. В какой момент мне следует беспокоиться о переполнении в моих расчетах? Они должны быть сверхточными. Есть ли определенный диапазон значений, о котором стоит беспокоиться, или, возможно, ссылка, в которой указано это значение?


person ShanZhengYang    schedule 21.01.2016    source источник
comment
Ответ зависит от типа ваших данных. float и double имеют разную точность, но для 1e-11 оба должны работать без проблем.   -  person Imanol Luengo    schedule 21.01.2016
comment
Если вас беспокоит переполнение, вы можете использовать np.seterr для предупреждения / повышения при обнаружении переполнения.   -  person Alex Riley    schedule 21.01.2016


Ответы (1)


Наименьшее представимое нормальное число в 64-битном числе с плавающей запятой:

>>> 2**-1022
2.2250738585072014e-308

Этот диапазон можно немного расширить, используя денормальные числа, которые уменьшают наименьшее до:

>>> 2**(-1022 - 52)
5e-324

Но:

>>> 2**(-1022 - 53)
0.0

Еще одно подходящее небольшое число (опять же для 64-битных чисел) будет:

>>> 2**-52
2.220446049250313e-16

потому что:

>>> 1 + 2**-52
1.0000000000000002

но:

>>> 1 + 2**-53
1.0
person Jaime    schedule 21.01.2016