你怎么能在Javascript中执行不同的基数对数函数?

这个问题正在被问到一个node.js服务器的问题,但我把问题描述为“javascript”,因为我也可能使用这个相同的逻辑来处理客户端脚本。

问题在于:给定一组x值,y需要以对数方式进行缩放。 Math对象执行自然对数[ ln(x) ],但不提供指定对数基数的接口。

对于一个具体的例子,我需要find以下内容:

log[512](2)

应该返回.1111〜

但是,我没有看到一个接口允许我完成这个任务,也不能find一个为日志的基础提供选项的库。 当然,这是一个常见的问题,有一个解决scheme,但我的search只能find解决不同/无关的问题。 想法?

您可以使用对数基变更公式 :

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

所以为了得到log(2)base 512,使用:

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

请注意,上面的Math.log使用自然对数基; 即它将被写成math式。

我今天发现这个答案是google的第一个结果,如果其他人也发现这个问题的话,那就是一个小错误。 正确的版本如下:

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