我在处理大数字时遇到问题.
我需要计算一个非常大的数字的日志.这个数字是一系列数字的乘积.例如: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.而已.