我遇到處理大數目的問題。數學溢出 - 處理大數
我需要計算一個非常大的數字的日誌。這個數字是一系列數字的產物。例如: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