【问题标题】:Negative execution time负执行时间
【发布时间】:2010-03-29 02:12:05
【问题描述】:

我写了一个小程序,可以在一小时内解决 49151 个数独的任务,但我们必须计时。我以为我会让它运行然后检查执行时间,但它说 -1536.087 s。我猜它与计时器是一些签名的数据类型或其他东西有关,但我不知道控制台中的计时器使用什么数据类型(代码::块控制台,我不确定这是否真的是单独的控制台,或者只是一个从本地操作系统运行终端的运行器),所以我无法检查实时时间。我宁愿不要在我的程序中使用一些编码计时器再次运行它,因为我希望现在能够再次使用我的电脑。有人知道这个时间会是什么吗?它应该在 40 到 50 分钟之间,因此在 2400 到 3000 秒之间。

【问题讨论】:

  • 请贴出你代码的相关部分...
  • 发布他的代码无济于事,计时器结果来自他的 IDE:“我不知道控制台中的计时器使用什么数据类型(code::blocks 控制台)”
  • @Steve Jessop:啊,你是对的 - 我浏览得太快了,读到那位表示 OP 使用了一些提供计时器的类,所以我们也许能够找到返回类型.

标签: c++ execution-time


【解决方案1】:

如果时间以微秒为单位存储在 32 位有符号整数中,2758880296 us(微秒)将产生此结果,因为2758880296-2^32 = -1536087000。以分钟和秒为单位,即为45:58.880296。 (用一粒盐处理最后几位小数,因为大概你打印的内容被四舍五入到最接近的毫秒)

当然,这只是根据您提供的信息做出的明智猜测。

【讨论】:

  • 谢谢,愚蠢的我没想到微秒。在发布代码时:没有用,因为它是代码运行后的执行时间,它与代码本身无关。好吧,当然代码会影响时间,但我的意思是我没有编写计时器,它是代码中控制台的一些计时器::blocks 对线程的执行计时。
  • 哦,对不起,你已经说过你明白在问题本身的 cmets 中,我猜我也浏览得太快了;)
【解决方案2】:

如果您在 linux 上运行,请使用“时间”:

$ time ./your_program
real    0m0.003s
user    0m0.004s
sys     0m0.000s

【讨论】:

    【解决方案3】:

    我猜是 46 分钟。

    假设一个 32 位有符号整数表示微秒。

    那么 -1,536,087,000us 将与 2,758,880,296us 相同,即 45:58.880。

    不过,可能有另一种表示形式在您的范围内给出同样合理的结果。

    【讨论】:

      【解决方案4】:

      我猜准确地说是 42 分钟(忽略小数并假设 12 位有符号数据类型)...但这是一个愚蠢的猜测,因为您没有包含有关如何检查执行时间的任何信息。

      【讨论】:

      • 我不确定你是如何得到这个结果的——或者你为什么认为可能是 12 位数据类型(祝你好运在 C++ 中声明一个)。
      • @Jefromi: struct int12 { int val:12; /* many, many operator overloads */ }; ;-)
      • @Jefromi:他显然做了一个荒谬的猜测,以证明需要更多信息才能做出正确的回应。我们不知道数据类型……但是,鉴于 OP 说“不到一个小时”,我们可以做出一个很好的猜测,我们可以假设它溢出的次数少于那个。鉴于提供的值,最有可能是 32 位有符号时间表示。
      • @Steve Jessop:啊,当然,我怎么没想到呢! @Evan Teran:你说得对,对不起,我没有意识到答案应该是多么半开玩笑。
      猜你喜欢
      • 2016-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-07
      相关资源
      最近更新 更多