数学溢出 - 处理大数字

时间:2009-11-14 17:33:16

标签: math

我在处理大数字时遇到问题。

我需要计算一个非常大的数字的日志。这个数字是一系列数字的乘积。例如:log(2x3x66x435x444)虽然我的实际系列更长。

我的数学溢出因为产品变得非常大,很快。

是否有特殊的数学库来处理庞大的数字?我有什么想法可以解决这个问题吗?

4 个答案:

答案 0 :(得分:28)

这个问题有一个简洁的数学解决方案。

您可以使用其日志值,而不是通过将每个数字相乘来获得系列的乘积。提到的原则是:

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)...)< / p>

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。就是这样。

答案 1 :(得分:19)

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

答案 2 :(得分:3)

使用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
>>>

答案 3 :(得分:1)