出力を 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
これが正しい場合、この場合、逆数による倍数は実際には遅くなります。おそらく、固定小数点演算ではなく浮動小数点演算を使用しているためです。私は整数除算に固執しますが、それでもほとんど時間がかかりません。