首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >时间上的差异是返回负数

时间上的差异是返回负数
EN

Stack Overflow用户
提问于 2010-07-09 07:05:34
回答 2查看 509关注 0票数 1

我有这个试用计时器代码,用于计算Ruby中的euler解决方案的时间。

代码语言:javascript
复制
$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

不幸的是,我总是得到这样的答案:

代码语言:javascript
复制
[409.805, 418.16, -582.23, 402.223, -581.94, 413.196, 426.816, -584.732, 519.457, -569.557, 558.918, -579.176]

我能做什么来避免这些奇怪的负数?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-09 07:16:00

usec返回与month返回月份相同的时间的微秒。它不是自纪元以来给定时间的微秒数。

所以如果start_t是1049896564.259970秒,end_t是1049896592.123130秒,那么如果减去usecs,你会得到123130 - 259970。即负数。

相反,您可以使用Time.now.to_f将其转换为自纪元以来的浮点秒数,并将其相减。你也可以直接从一个Time对象中减去另一个。

代码语言:javascript
复制
start_t = Time.now
solve.call
end_t = Time.now
times << end_t - start_t
票数 2
EN

Stack Overflow用户

发布于 2010-07-09 07:24:40

自纪元以来的当前时间(秒):

代码语言:javascript
复制
Time.now.to_f
=> 1278631398.143

这应该有微秒的分辨率,尽管这里只显示了三个小数位。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3208669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档