Witam
mam problem z wartościami funkcji typu double.
Otóż potrzebuję w swoim programie dokładnego pomiaru czasu. Korzystam w tym celu z funkcji QueryPerformanceCounter z bibliteki <windows.h> w następujący sposób:
LARGE_INTEGER start, end; // deklaracja zmiennych typu LARGE_INTEGER, zdefiniowanego w windows.h
QueryPerformanceCounter(&start);
sleep(100); // badany kod, dla przykladu moze byc np. instrukcja zatrzymania na powiedzmy 100 ms
QueryPerformanceCounter(&end);
double diff = timeDiff(start, end); // wywolanie funkcji timeDiff, definicja ponizej
double timeDiff(LARGE_INTEGER start, LARGE_INTEGER end) { /* precise clock procedure */
/* time is measured in miliseconds */
LARGE_INTEGER freq;
double time;
if(!QueryPerformanceFrequency(&freq)) { /* if problem */
printf("Computing exact time is impossible. Program will be aborted.\n");
stop();
abort(); /* exit program */
}
else /* return computed value */ {
time = ((double) end.QuadPart) - ((double) start.QuadPart);
time /= (double) freq.QuadPart;
time *= 1000.0;
/* Tutaj zmienna time ma prawidlowa wartosc: ok. 100 milisekund, co sie zgadza z czasem podanym do funkcji sleep() */
return time;
}
}
Problem polega na tym, że o ile zmienna time ma prawidlowa wartosc wewnatrz funkcji, to po jej zwroceniu juz tak nie jest i zmienna diff, do której przypisuję wartość funkcji timeDiff, zawiera dziwną wartość -1.#INF00.
Słyszałem, że może to być związane z jakimiś problemami z rejestrami procesora, ale generalnie to podobno rzadki błąd. Nie mam pojęcia, skąd się bierze i jak go rozwiązać. Byłbym wdzięczny za pomoc.