数学溢出 - 处理大数字

Tyl*_*ams 4 math

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

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

我得到数学溢出因为产品变得非常大,非常快.

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

Law*_*ley 28

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

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

log(a*b) = log(a) + log(b)
Run Code Online (Sandbox Code Playgroud)

对于示例系列(2,3,66,435,444),蛮力产品计算为2*3*66*435*44 = 76,483,440.

但是,您也可以从日志总和中获取产品.对于系列(N1,N2,N3,N4,...),该系列的产品是:10 ^(日志(N-1)+日志(N2)+日志(N3)+日志(N4)...)

log(2) = 0.30103
log(3) = 0.47712
log(66) = 1.8195
log(435) = 2.6384
log(444) = 2.6474
Run Code Online (Sandbox Code Playgroud)

值的总和大致为7.8835.该系列的产品是10 ^ 7.8835(76,483,440).

由于您正在查找该系列产品的日志,因此只需要各个log()值的总和,即7.8835.而已.


bma*_*ies 19

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