【问题标题】:Way to use bit shift to move decimal place使用位移位移动小数位的方法
【发布时间】:2013-05-09 00:26:02
【问题描述】:

我正在开发一个需要非常快速地进行日期数学运算的库。我正在使用 Jon Skeet 的 Noda Time 库,它使用 Tick 数学,因此速度非常快,但我希望以比将 Noda Time Instant 或 Duration 转换为 TimeSpan 更快的方式获得经过的秒数。

到目前为止,我能够做到的最快方法是使用 Ticks * 1E-07,但我认为位移可能会更快(因为它始终是 1E-07)。提前感谢您的任何想法!

【问题讨论】:

    标签: nodatime


    【解决方案1】:

    不要转换为 TimeSpan - 只需将 Ticks 除以 NodaConstants.TicksPerSecond。这是一个整数除法,可能非常非常快。鉴于 107 不是 2 的幂(或者特别简洁地表示为它们的组合),我怀疑你最好只除以。

    如果这种划分真的被证明是您代码中的瓶颈,我会感到惊讶。虽然我试图让 Noda Time 保持快速,但我并没有在适当的情况下执行一两个分区:)

    如果您需要 部分 秒,我很想只除以 TicksPerMillisecond,并使用整数毫秒而不是使用浮点运算。如果您已经在其他地方需要double,当然,这不会有太大帮助。

    【讨论】:

    • 奇怪的是,只改变了计算的那一部分(斜率计算),计算时间几乎增加了一秒。这真的很奇怪。我将标记为答案,因为它是正确答案。
    • 另外,野田时间真的很快,所以不用担心:)。它比 DateTime/TimeSpan/etc. 快得多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多