-1
#include <iostream>
#include <sys/time.h> 
#include <stdint.h>

void convert(uint64_t offset )
{
  struct timeval t;
  t.tv_sec = offset / 1000000;
  std::cout <<  "currentTimeOffset " << offset << "startTimeOffset " << t.tv_sec  << std::endl;
  t.tv_usec =  offset % 1000000;
  std::cout <<  "stattime usec " <<  t.tv_usec << std::endl ;
}

int main(int argc , char** argv)
{    
  uint64_t t = 18446744073709551615;
  convert(t );
  return 0;
}

是否存在舍入误差?那我该怎么做呢?这是从代码转换的其他地方调用的例程。我写了一个小脚本,其中有一个uint64_t给我一个负数的例子

4

1 回答 1

2

offset / 1000000产生一个对于类型1.8446744073709551615 × 10^13来说太大的值。可以存储在 an 中的最大值是。tv_secint32int322.147483647 × 10^9

你溢出了你存储结果的整数,它正在环绕并变成负数。

于 2015-04-28T17:35:43.000 回答