вероятности с малыми числами

Я работаю с большим количеством вероятностей, которые я умножаю, поэтому быстро получаю очень маленькие числа. Но кажется, что python, наконец, сохраняет окончательный результат как ноль.

Чтобы обойти это сложно, я решил суммировать логи этих вероятностей (вместо прямого умножения вероятностей). Эта стратегия возвращает отрицательное число (назовем его c), как и ожидалось.

Но затем, если я хочу применить экспоненту к с (чтобы вернуться к реальному значению моего произведения вероятностей), я получаю нулевое значение, потому что с слишком сильно отрицательно (что-то вроде -123445,4).

Как я мог обойти эту проблему?


person user2879969    schedule 29.11.2013    source источник
comment
Вы можете попробовать использовать тип данных с большей точностью   -  person helb    schedule 29.11.2013
comment
@ helb: я пытался написать a=long(exp(-35885)) но он всегда возвращает 0... должен ли я сделать что-то еще?   -  person user2879969    schedule 01.12.2013


Ответы (1)


Если вы собираетесь использовать числа такой величины, вам следует использовать специализированную библиотеку, которая может обрабатывать произвольную точность с плавающей запятой. Ознакомьтесь с mpmath или пакет bigfloat, например.

Компьютеры изначально поддерживают только числа до приблизительно exp(-300). В качестве альтернативы вы можете ограничить свой код, чтобы хранить только экспоненту и никогда не преобразовывать ее в десятичное представление.

person helb    schedule 01.12.2013