salut

je demande juste un peu d'aide à propos de
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
typedef unsigned _int64 uint64;
voila le code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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