【问题标题】:Odd stopWatch result in HaskellHaskell中的奇怪秒表结果
【发布时间】:2018-04-26 15:32:51
【问题描述】:

clock 包包含一个返回 TimeSpec 记录的 stopWatch 函数。它有一个带有两个字段的构造函数:sec(秒)和 nsec(纳秒)。但是,运行此命令会产生奇怪的结果:

TimeSpec {sec = 29, nsec = 656841598}

看起来 nsec 实际上并不是指纳秒,因为 1 秒应该是 10^9 纳秒。这是库中的错误还是发生了其他事情?

【问题讨论】:

  • 对我来说看起来像是分数。 29 秒 + 656841598 纳秒。
  • 您是否声称 nsec 部分大于 1e9?嗯...656841598 / 1e9 = 0.656841598

标签: haskell stopwatch


【解决方案1】:

secnsec 字段不显示以不同单位表示的同一事物,而是整个时间的部分。也就是说,{ sec = 1, nsec = 2 } 表示“1 秒和 2 纳秒”。

试试这个:

print $ fromNanoSecs 1234567890000

> TimeSpec {sec = 1234, nsec = 567890000}

【讨论】:

    【解决方案2】:

    TimeSpec 分为两部分,一个秒计数器和一个用于秒分数的纳秒计数器。如果您想要以纳秒为单位的总时间,请使用toNanoSecs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-28
      相关资源
      最近更新 更多