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

Ruby 何时使用'Math.sqrt`vs`**0.5`?,ruby,performance,Ruby,Performance,在Ruby 2.1.4*的IRB中的一个后台性能测试中,我注意到I**0.5似乎比Math.sqrt(I)执行得快得多 结果是: benchmark(1_000_000) { |i| i**0.5 } => 0.101748 benchmark(1_000_000) { |i| Math.sqrt(i) } => 0.257887 在什么情况下我应该使用Math.sqrt(I)而不是I**0.5 是否存在精确的权衡?(特别是,我注意到Math.sqrt(3015)!=3015*

在Ruby 2.1.4*的IRB中的一个后台性能测试中,我注意到
I**0.5
似乎比
Math.sqrt(I)
执行得快得多

结果是:

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

benchmark(1_000_000) { |i| Math.sqrt(i) }
=> 0.257887

  • 在什么情况下我应该使用
    Math.sqrt(I)
    而不是
    I**0.5
  • 是否存在精确的权衡?(特别是,我注意到
    Math.sqrt(3015)!=3015**0.5
  • 为什么不将
    Math.sqrt
    实现为一个指数


  • *在2.3.0中,这种差异似乎消失了,事实上,
    Math.sqrt
    大约快了30%。

    我想说,除非你有很好的理由使用
    ***
    ,否则使用
    sqrt
    ,因为它可以让你的意图更清晰。只有当您分析了Exponention并实际发现它是一个瓶颈时,我才会使用它。@Carcigenicate:0.5**0.5有什么不清楚的地方?@EricDuminil不如显式的
    sqrt
    那么清楚。如果它们的性能相同(这似乎取决于您使用的版本),我会说使用更明确的版本。不过这完全是我的观点。@sagarpandya82:fruit表示,Ruby 2.2的**0.5比sqrt快3倍,Ruby 2.3快3倍,Ruby 2.4快10%。注意:这和这可能是有趣的
    benchmark(1_000_000) { |i| i**0.5 }
    => 0.101748
    
    benchmark(1_000_000) { |i| Math.sqrt(i) }
    => 0.257887