2013-11-29 4 views
1

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

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

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

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

+0

Вы можете попытаться использовать тип данных, который имеет более высокую точность. – helb

+0

@ helb: Я пытался написать a = long (exp (-35885)), но он всегда возвращает 0 ... должен ли я сделать что-то еще? – user2879969

ответ

1

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

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

Смежные вопросы