Я хочу преобразовать вывод из 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
Если это правильно, то кратное обратное в этом случае на самом деле медленнее. Вероятно, это связано с использованием математики с плавающей запятой вместо математики с фиксированной точкой. Я просто буду придерживаться целочисленного деления, которое по-прежнему занимает почти любое время.