2011-12-13 65 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

嗯,它现在已经修复... :-) –