我遇到处理大数目的问题。数学溢出 - 处理大数
我需要计算一个非常大的数字的日志。这个数字是一系列数字的产物。例如:log(2x3x66x435x444)虽然我的实际系列较长。
我得到一个数学溢出,因为产品增长非常大,非常快。
是否有特殊的数学库来处理巨大的数字?任何想法如何我可以解决这个问题?
我遇到处理大数目的问题。数学溢出 - 处理大数
我需要计算一个非常大的数字的日志。这个数字是一系列数字的产物。例如:log(2x3x66x435x444)虽然我的实际系列较长。
我得到一个数学溢出,因为产品增长非常大,非常快。
是否有特殊的数学库来处理巨大的数字?任何想法如何我可以解决这个问题?
有一个整洁的数学解决这个问题。
您可以使用它们的日志值,而不是通过乘以每个数字来获得系列产品。所提到的原则是:
log(a*b) = log(a) + log(b)
对于示例系列(2,3,66,435,444),蛮力产物,为2 * 3 * 66 * 435 * 44 = 76483440计算。
但是,您也可以从日志总和中获取产品。对于系列(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。而已。
庵:日志(A * B)=日志的(a)+日志(B)
使用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
>>>
正如其他人所指出的 - 你并不需要大对数支持你正在尝试做什么。但是,如果你确实想要使用它们,许多现代(ish)语言都有大量的内置数据库。许多其他库(C,C++等)都存在。你使用或想用什么语言? – Dipstick 2009-11-14 17:41:44
寻找“幻灯片规则”库... – gbn 2009-11-14 20:15:51
这就是为什么你需要数学..:P – sud03r 2009-11-21 19:43:37