我想将输出从 gethrtime 转换为毫秒。
显而易见的方法是除以 1000000。但是,我经常这样做,想知道它是否会成为瓶颈。
在处理像 1000000 这样的数字时是否有优化的除法运算?
注意:任何代码都必须是可移植的。我正在使用 gcc,这通常在 Sparc 硬件上
使用下面的代码进行一些快速测试......希望这是正确的。
#include <sys/time.h>
#include <iostream>
using namespace std;
const double NANOSECONDS_TO_MILLISECONDS = 1.0 / 1000000.0;
int main()
{
hrtime_t start;
hrtime_t tmp;
hrtime_t fin;
start = gethrtime();
tmp = (hrtime_t)(start * NANOSECONDS_TO_MILLISECONDS);
fin = gethrtime();
cout << "Method 1"
cout << "Original val: " << start << endl;
cout << "Computed: " << tmp << endl;
cout << "Time:" << fin - start << endl;
start = gethrtime();
tmp = (start / 1000000);
fin = gethrtime();
cout "Method 2"
cout << "Original val: " << start << endl;
cout << "Computed: " << tmp << endl;
cout << "Time:" << fin - start << endl;
return 0;
}
示例输出:
Original val: 3048161553965997
Computed: 3048161553
Time:82082
Original val: 3048161556359586
Computed: 3048161556
Time:31230
Original val: 3048239663018915
Computed: 3048239663
Time:79381
Original val: 3048239665393873
Computed: 3048239665
Time:31321
Original val: 3048249874282285
Computed: 3048249874
Time:81812
Original val: 3048249876664084
Computed: 3048249876
Time:34830
如果这是正确的,那么在这种情况下,倒数的倍数实际上会更慢。这可能是由于使用浮点数学而不是定点数学。我将坚持整数除法,这仍然几乎不需要任何时间。