如何在Ruby中找到exponent的值?

Har*_*tty 1 ruby ruby-on-rails jruby

考虑下面的等式:

2**n = A.

我们假设A = 64.

找到n值的最简单方法是什么?

我目前正在使用以下两种方法

A= 64; n = 1; n+=1 while (A >> n) > 0; n-1

A= 64; n = 0; n+=1 until (A == ( 2 ** n));n
Run Code Online (Sandbox Code Playgroud)

有更好的方法吗?

说明同样问题的其他方式:

2 =第n个根A如果我知道A的值,我该如何确定n的值?

JRL*_*JRL 9

试试这个:

def exp_value(n)
  Math.log(n) / Math.log(2)
end
Run Code Online (Sandbox Code Playgroud)

  • @Duffymo:足够公平,但(1)复杂(或不复杂)是这里的相对术语,(2)并非所有人都在高中数学课上受到关注.如果他或她要求提供更多信息,那么告诉某人"这是微不足道的"是毫无意义的. (4认同)
  • 这不是复杂的数学 - 他们在高中教这个:http://en.wikipedia.org/wiki/Logarithm (2认同)

mob*_*mob 5

以上答案都不比您的第一种方法好:

A= 64; n = 1; n+=1 while (A >> n) > 0; n-1
Run Code Online (Sandbox Code Playgroud)

评估Math.log(x)比做十几个位移位花费的时间要长得多,并且还会给你一个像 5.999999999999980235 这样的答案来理解。

有关一些更好的想法,请参阅此 SO 问题