这个问题是在考虑node.js服务器的时候提出来的,但是我把这个问题称为“javascript”,因为我也可能将同样的逻辑用于客户端脚本。
问题在于:给定一组x值,y需要以对数方式进行缩放。 Math对象执行自然日志[ln(x)
],但不提供用于指定对数基数的接口。
对于一个具体的例子,我需要找到以下内容:
log[512](2)
哪个应该返回.1111~
但是,我没有看到允许我完成此操作的界面,我也无法找到公开日志基础选项的库。当然这是一个常见的问题并且有一个解决方案,但我的搜索只找到了解决不同/无关问题的方法。想法?
答案 0 :(得分:15)
您可以使用logarithm base change formula:
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
使用自然日志库;即,它将以数学方式写成ln
。
答案 1 :(得分:4)
我今天发现这个答案是谷歌的第一个结果,如果其他人也发现了这个,那就是一个小错误。正确的版本如下:
function log(b, n) {
return Math.log(n) / Math.log(b);
}