【问题标题】:How can you perform varying base logarithmic functions in Javascript?如何在 Javascript 中执行不同的基本对数函数?
【发布时间】:2011-12-13 16:17:19
【问题描述】:

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

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

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

log[512](2)

应该返回 .1111~

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

【问题讨论】:

标签: javascript node.js logarithm


【解决方案1】:

您可以使用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

【讨论】:

  • javascript 函数看起来像function log(base, number) { return Math.ln(number) / Math.ln(base); }
  • 所以,这最终成为一道数学题。伙计,我已经好几年没有解决对数问题了。感谢您的快速修复。
  • 非常正确,我忘了这是一道 JS 题,而不仅仅是一道数学题。谢谢!
  • 其实我刚试了一下,应该是log,而不是ln。让这个坐了一年多,我觉得很糟糕。
  • 已经一年了吗?哇。好像我一个月前才问过这个。在旁注中,log 在编程中如何引用 ln 很奇怪。我敢肯定,它已经让不少程序员陷入了沮丧的调试之中。您必须不遗余力地查找或重新创建日志 [10] 的事实可能很烦人。
【解决方案2】:

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

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

【讨论】:

  • 嗯,现在已经修复了... :-)
猜你喜欢
  • 1970-01-01
  • 2016-05-12
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
  • 2023-03-07
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
相关资源
最近更新 更多