6

这个问题是在考虑 node.js 服务器的情况下提出的,但我将问题表述为“javascript”,因为我可能也会对客户端脚本使用相同的逻辑。

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

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

log[512](2)

哪个应该返回 .1111~

但是,我没有看到允许我完成此操作的界面,我似乎也找不到为日志库公开选项的库。当然这是一个常见问题并且有解决方案,但我的搜索只找到了针对不同/不相关问题的解决方案。想法?

4

2 回答 2

16

您可以使用对数基数变化公式

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数学方式编写。

于 2011-12-13T16:19:23.170 回答
5

我今天在谷歌找到了这个答案作为第一个结果,如果其他人也找到它,那就是一个小错误。正确的版本如下:

function log(b, n) {  
    return Math.log(n) / Math.log(b);  
}
于 2012-12-10T10:46:17.623 回答