J'ai ce code de temporisateur d'essai pour chronométrer les solutions euler dans Ruby.La différence dans les temps renvoie un nombre négatif
$RUNS = 12
def run(solve)
times = []
$RUNS.times do
start_t = Time.now.usec
solve.call
end_t = Time.now.usec
times << (end_t - start_t)/1000.0
end
#times = times.delete_if {|i| i < 0}
puts times.inspect
times.sort
mean = times.inject{|a,c| a+c}/$RUNS
puts("Mean:\t#{mean}");
if (times.length % 2 == 0) then
median = (times[times.length/2 - 1] + times[times.length/2])/2.0
else
median = times[times.length/2];
end
puts("Median: #{median}");
end
Malheureusement, je continue à obtenir des réponses comme ceci:
[409.805, 418.16, -582.23, 402.223, -581.94, 413.196, 426.816, -584.732, 519.457, -569.557, 558.918, -579.176]
Que puis-je faire pour éviter ces chiffres négatifs étranges?
Alors, comment puis-je faire chronométrage haute granularité dans ruby? –
@JBristow Réponse mise à jour avec une suggestion de comment faire ce que vous voulez. – mikej
Il semble que cela demande des erreurs en virgule flottante, mais je multiplie par 1000 pour obtenir la granularité msec. –