Math Overflow - Обработка больших чисел - PullRequest
4 голосов
/ 14 ноября 2009

У меня проблема с обработкой больших чисел.

Мне нужно рассчитать лог очень большого числа. Число является произведением серии чисел. Например: log (2x3x66x435x444), хотя моя реальная серия длиннее.

У меня математическое переполнение, потому что продукт растет очень быстро и очень быстро.

Существуют ли специальные математические библиотеки для обработки огромных чисел? Любые идеи, как я могу решить это?

Ответы [ 4 ]

28 голосов
/ 14 ноября 2009

Существует аккуратное математическое решение этой проблемы.

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

log(a*b) = log(a) + log(b)

Для серии примеров (2, 3, 66, 435, 444) произведение грубой силы вычисляется как 2 * 3 * 66 * 435 * 44 = 76 483 440.

Тем не менее, вы также можете получить продукт из суммы журналов. Для ряда (n1, n2, n3, n4, ...) произведение ряда: 10 ^ (log (n1) + log (n2) + log (n3) + log (n4) ...)

log(2) = 0.30103
log(3) = 0.47712
log(66) = 1.8195
log(435) = 2.6384
log(444) = 2.6474

Сумма значений примерно равна 7,8835. Произведение серии составляет 10 ^ 7,8835 (76 483 440).

Поскольку вы ищете журнал продукта ряда, просто сумма отдельных значений log (), 7,8835. Вот и все.

19 голосов
/ 14 ноября 2009

Гм: log (a * b) = log (a) + log (b)

3 голосов
/ 14 ноября 2009

Использовать Python;)

$python
Python 2.4.4 (#71, Oct 18 2006, 08:34:43) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
>>> math.log(2*3*66*435*444)
18.15258480477539
>>>
1 голос
/ 23 января 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...