【问题标题】:Calculating Base-n logarithm in Ruby在 Ruby 中计算 Base-n 对数
【发布时间】:2011-06-14 04:50:26
【问题描述】:

这个看起来很简单,但是我在 Ruby 中计算 log(Base 5)时遇到了麻烦。

显然,标准 base-10 日志可以正常工作:

>> value = Math::log(234504)
=> 12.3652279242923

但在我的项目中,我需要使用 Base 5。根据 ruby​​ 文档 (http://www.ruby-doc.org/core/classes/Math.html#M001473),我似乎应该能够做到这个:

Math.log(num,base) → 浮点数

>> value = Math::log(234504, 5)
ArgumentError: wrong number of arguments (2 for 1)
    from (irb):203:in `log'
    from (irb):203
    from :0

它不喜欢。有人知道如何在 ruby​​ on rails 中计算 base-n 中的日志吗?

谢谢!

【问题讨论】:

  • 您使用的是哪个版本的 Ruby?为我工作。

标签: ruby math logarithm


【解决方案1】:

我将检查 Ruby 函数,但不要忘记您的基础知识:

在 Ruby 1.9 之前:

> Math::log(234504) / Math::log(5)
=> 7.682948083154834

在 Ruby 1.9 及更高版本中,引入了第二个参数:

> Math::log(234504, 5)
=> 7.682948083154834

【讨论】:

  • 这适用于任何基础 - 不仅仅是 e 的基础。只需使用十进制对数而不是 ln。
  • 实际上,它更笼统:log_b1(x) = log_b2(x) / log_b2(b1)(编辑:用相对简单的英语,@Femaref 所说的)。
  • 只是想不出一个合理的好记谱法。
  • 哈,我避免在大学课本上掸掉灰尘!谢谢,这很好用。我猜当时在日志函数中没有对 base-n 的直接支持。
  • 是的,我想我们应该对这个解决方案感到满意,但我不能完全满意。你有哪个版本?
【解决方案2】:

当然,另一个答案是正确的,但为了节省时间,Math.log(n, base) 在 Ruby >= 1.9 中工作

http://www.ruby-doc.org/core-2.0/Math.html#method-c-log

【讨论】:

  • 我 +1 给了你,因为它更像 Rubyish,但如果你查看 log(x, base) 源代码,你会发现它只是使用相同的关系:d = log(d0); if (argc == 2) d /= log(RFLOAT_VALUE(base));。因此,使用一个无论如何处理任意基数的函数调用更有效 - 它只调用一个函数而不是两个。
猜你喜欢
  • 2013-01-29
  • 2021-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-03
  • 1970-01-01
相关资源
最近更新 更多