错误乘以数万亿的数字

时间:2013-07-29 14:08:21

标签: c++ eclipse boost int long-integer

我正在尝试执行计算,通过执行一系列计算,将当前时间的总微秒数恢复为HHMMSSFFF格式的当前时间。但是,当我尝试从总微秒数中减去小时数* 3600000000时,返回的值不正确(它关闭一个数量级并且数字本身是错误的。有人知道如何解决这个问题吗?我试过了使用long long int和long double但这些都输出了相同的值。我在代码中复制了下面的代码,并在控制台中复制了结果。

当数据进入(也称为时间戳)时,时间存储在向量中,这就是为什么存在temp_counter。我在boost :: posix_time库中使用time_duration。

long double total = cur_time.at(temp_counter).total_microseconds();

cout << total << endl;

int hours = total/(3600000000);
cout << hours << endl;
long long int temp = hours*3600000000;
cout << std::setprecision(20) << temp << endl;
total = total - temp;
cout << total << endl;

输出:

35465976558

9

2335228928

33130747630

根据我的计算,temp实际应该是32400000000,新的总数应该是3065976558。

1 个答案:

答案 0 :(得分:1)

计算结果如下:

35465976558 / 3600000000 = 9,851660155施放到int等于9

9 * 3600000000 = ...并且这里的垃圾击中了风扇,因为3600000000不能被放入32位int并且似乎没有被正确地投射到很长时间,因此你应该将右侧投射到长long int。

但是当你在第一个任务中得到一个很长的双倍:为什么不一直使用长双(或至少双)并避免施放恐怖?