我有一个非常大的纳秒值(代表自纪元以来的纳秒),我试图将其划分为秒,因为纪元和纳秒如下:
uint64_t nanosecondsEpoch;
unsigned secs = nanosecondsEpoch / 1000000000ULL;
unsigned nanos = nanosecondsEpoch - (secs * 1000000000ULL);
问题是,如果我尝试将它拼接回来像这样:
uint64_t stichBack = secs * 1000000000ULL + nanos
我得到的东西是远离的。我认为原因是,当我执行除法时,我获得1357314854.03秒并且0.03被丢弃(导致很大的差异)..但我感到困惑,因为我觉得我应该能够保存两条信息一个没有签名并恢复信息而不诉诸浮动?我在算术中做了一些愚蠢的事情,我似乎无法抓住它?
这是一个具体的例子:
从今天上午开始的时间以来的纳秒值:1357314854032484000
我会使用uint64_t,如果我可以同时使用秒和纳秒无符号,但我想知道的是为什么我不能将上述值打破并将其重新组合在一起。
答案 0 :(得分:2)
由于1e9
小于2^32-1
(最大无符号32位整数),如果原始值足够大,则商可能仍然太大而不适合32位整数。不确定您的原始值是多少,但您可能会因此截断secs
值。