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的值?
试试这个:
def exp_value(n)
Math.log(n) / Math.log(2)
end
Run Code Online (Sandbox Code Playgroud)
以上答案都不比您的第一种方法好:
A= 64; n = 1; n+=1 while (A >> n) > 0; n-1
Run Code Online (Sandbox Code Playgroud)
评估Math.log(x)比做十几个位移位花费的时间要长得多,并且还会给你一个像 5.999999999999980235 这样的答案来理解。
有关一些更好的想法,请参阅此 SO 问题。