utilizzando questo codice:Perché `-1 * x` più veloce di` -x` e perché?
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
ottengo questo risultato di nuovo in 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)
che sembra contro intuitivo, perché se io immagino ci avrei scommesso sulla "x" non "-1 * x "per essere più veloce.
Perché la differenza? O ho qualche difetto importante nella mia misurazione?
Questo codice è riproducibile sulle nostre macchine? 'CAPTION' e'FORMAT 'vengono contenti quali valori? – Elyasin