使用以下代码:
include Benchmark
n = 10**8
r = []
Benchmark.benchmark(" "*7 + CAPTION, 7, FORMAT, ">avg:", ">total:") do |b|
a = 1
r << b.report("Benchmark -1:") { (n).times do
-1 * a
end }
r << b.report("Benchmark - :") { (n).times do
-a
end }
[(r.sum{|e| e }) / 2, r.sum{|e| e }]
end
我在ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux]
上得到了这个结果:
user system total real
Benchmark -1: 4.930000 0.000000 4.930000 ( 4.938359)
Benchmark - : 5.650000 0.000000 5.650000 ( 5.667566)
>avg: 5.290000 0.000000 5.290000 ( 5.302962)
>total: 10.580000 0.000000 10.580000 ( 10.605924)
这看起来很反直觉,因为如果我猜的话,我会打赌"-x"而不是"-1*x"更快。
为什么会有差别?还是我的计量有重大缺陷?