我有这个试用计时器代码在Ruby的时间euler解决方案。在时间上的差异是返回一个负数
$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
不幸的是,我一直得到的答案是这样的:
[409.805, 418.16, -582.23, 402.223, -581.94, 413.196, 426.816, -584.732, 519.457, -569.557, 558.918, -579.176]
我能做些什么来避免这些奇怪的负数?
那么我该如何在Ruby中进行高粒度时序? – 2010-07-08 23:19:18
@Jbrristow答案更新了如何做你想要的建议。 – mikej 2010-07-08 23:25:16
这似乎是要求浮点错误,但我乘以1000以获得毫秒粒度。 – 2010-07-09 00:00:40