Ruby 何时使用'Math.sqrt`vs`**0.5`?
在Ruby 2.1.4*的IRB中的一个后台性能测试中,我注意到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*
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