nanosecondes à millisecondes - division rapide par 1000000

Je suis désireux de convertir la sortie d'gethrtime de millisecondes.

Le moyen le plus évident pour ce faire est de diviser par 1000000.
Toutefois, je le fais assez souvent et je me demande si il pourrait devenir un goulot d'étranglement.

Est-il optimisé opération de division lorsque vous traitez avec des chiffres comme 1000000?

Remarque: le code doit être portable. Je suis à l'aide de gcc et c'est généralement sur le matériel Sparc

Certains le test rapide à l'aide du code ci-dessous... j'espère que c'est juste.

#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;
}  

Exemple sorties:

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

Si cela est correct, puis les multiples de réciprocité qui est en fait plus lentement dans ce cas. C'est probablement dû à l'utilisation de calcul en virgule flottante au lieu de point fixe de mathématiques. Je vais juste coller à la division entière puis qui prend toujours peine le temps à tous.

source d'informationauteur Matt