2011-12-13 50 views
4

這個問題正在被問到一個node.js服務器的問題,但我將問題描述爲「javascript」,因爲我可能也會將這個邏輯用於客戶端腳本。如何在JavaScript中執行不同的基對數函數?

下面是問題:給定一組x值,y需要以對數方式進行縮放。 Math對象執行自然日誌[ln(x)],但不提供指定對數基數的接口。

對於一個具體的例子,我需要找到以下內容:

log[512](2)

應返回0.1111〜

不過,我沒有看到一個界面,使我能夠做到這一點,我似乎也無法找到一個爲日誌的基礎提供選項的庫。這肯定是一個常見問題,並且有一個解決方案,但是我的搜索只能找到針對不同/不相關問題的解決方案。想法?

+0

的可能的複製:[?任何方式指定的JavaScript math.log()的底座(http://stackoverflow.com/questions/3019278) – hippietrail

回答

14

可以使用logarithm base change formula

log[a](n) = log[b](n)/log[b](a) 

因此,爲了得到日誌(2)基部512,使用:

function log(b, n) { 
    return Math.log(n)/Math.log(b); 
} 

alert(log(2, 512)); 

注意Math.log上面使用的自然對數的基礎;即它將在數學上寫爲ln

+2

的JavaScript函數看起來像'function log(base,number){return Math.ln(number)/ Math.ln(base); }' –

+0

所以,這最終是一個數學問題。男人,我不得不工作對數問題已經有好幾年了。感謝您的快速解決。 – Aejay

+0

非常真實的,我忘了這是一個JS問題,而不僅僅是一個數學問題。謝謝! –

4

我發現這個答案是今天谷歌的第一個結果,如果其他人也發現它,那麼會有一個小錯誤。正確的版本如下:

function log(b, n) { 
    return Math.log(n)/Math.log(b); 
} 
+0

嗯,它現在已經修復... :-) –

相關問題