何时使用`Math.sqrt` vs` ** 0.5`?

时间:2017-02-06 19:36:54

标签: ruby performance

在Ruby 2.1.4 *的IRB中,我发现i**0.5似乎比Math.sqrt(i)表现得更快。

def benchmark(n, &block)
  start = Time.now
  (1..n).each(&block)
  Time.now - start
end

结果:

benchmark(1_000_000) { |i| i**0.5 }
=> 0.101748

benchmark(1_000_000) { |i| Math.sqrt(i) }
=> 0.257887
  1. 在什么情况下我应该使用Math.sqrt(i)代替i**0.5
  2. 是否存在精确权衡? (特别是,我注意到Math.sqrt(3015) != 3015**0.5。)
  3. 为什么Math.sqrt只是作为指数实现?
  4. *在2.3.0中,这种差异似乎消失了,确实Math.sqrt的速度提高了约30%。

0 个答案:

没有答案