salut
je demande juste un peu d'aide à propos de
QueryPerformanceCounter()
la fonction accepte un LARGE_INTEGER * comme agrument quand je lui envoie un double le résultat est faux (1.5643556 e -313#DEN) mais quand je lui envoie un uint64 le résultat est juste (35476989 tours)
typedef unsigned _int64 uint64;
voila le code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| int LitFrequenceCpu (double* frequence)
{
uint64 Fwin;
uint64 Twin_avant, Twin_apres;
double Tcpu_avant, Tcpu_apres;
double Fcpu;
// Lit la frequence du chronomêtre Windows
if (!QueryPerformanceFrequency((LARGE_INTEGER*)&Fwin)) return 0;
printf ("Frequence du compteur Windows = ");
AfficheFrequence (uint64_to_double(Fwin));
// Avant
Tcpu_avant = RDTSC();
QueryPerformanceCounter((LARGE_INTEGER*)&Twin_avant);
// Attend quelques itérations (10 000) du chronomètre Windows
do
{
QueryPerformanceCounter((LARGE_INTEGER*)&Twin_apres);
} while (Twin_apres-Twin_avant < 10000);
// Apres
Tcpu_apres = RDTSC();
QueryPerformanceCounter((LARGE_INTEGER*)&Twin_apres);
// Calcule la fréquence en MHz
Fcpu = (Tcpu_apres - Tcpu_avant);
Fcpu *= uint64_to_double(Fwin);
Fcpu /= uint64_to_double(Twin_apres - Twin_avant);
*frequence = Fcpu;
return 1;
} |
je demande pourquoi un uint64 marche trés bien pendant que le double ne marche sachant que les deux sont de 64bit , si c'est une question de codage merci de détailler la procédure
et mercii
Partager