Какова цель этих уточнений счетчика времени? - PullRequest
0 голосов
/ 17 июня 2011

Я пытаюсь реализовать вспомогательную функцию GetTime. Он получает текущее время, измеренное в счетчиках, затем получает количество счетчиков в секунду системы, поэтому вы можете получить текущее время в секундах с его отношением.

Но после этого есть некоторый код улучшения, который я действительно не получаю. Почему последние два утверждения там?

double GetTime()
{

//  Current time value, measured in counts
__int64 timeInCounts;
QueryPerformanceCounter((LARGE_INTEGER *)(&timeInCounts));

// To get the frequency (counts per second) of the performance timer
__int64 countsPerSecond;
QueryPerformanceFrequency((LARGE_INTEGER *)(&countsPerSecond));

double r, r0, r1; 

//  Get the time in seconds with the following relation
r0 = double ( timeInCounts / countsPerSecond );

// There is some kind of acuracy improvement here
r1 = ( timeInCounts - ((timeInCounts/countsPerSecond)*countsPerSecond)) 
                / (double)(countsPerSecond);

r = r0 + r1;

return r;
}

1 Ответ

0 голосов
/ 17 июня 2011

Если это домашнее задание, вы действительно должны пометить его тегом домашнего задания.

Запустите программу в отладчике и проверьте значения r0 и r1 (или используйте printf).Должно быть очевидно, что эти два вычисления делают, когда вы видите эти значения.

Редактировать 6/18

Для простоты вычислений, скажем, countsPerSecond имеетзначение 5 и timeInCounts равно 17. Вычисление timeInCounts / countsPerSecond делит одно __int64 на другое __int64, поэтому результатом также будет __int64.Деление 17 на 5 дает нам результат 3, который затем приводится к двойному значению, поэтому r0 устанавливается на значение 3.0.

Вычисление (timeInCounts/countsPerSecond)*countsPerSecond дает нам значение 15, которое затем вычитается из timeInCounts, даваянам значение 2.

Если бы целое значение 2 было разделено на целое значение 5, мы бы получили ноль. Но , делитель приводится к двойному, поэтому целое значение 2 делится на двойное значение 5,0.Это дает нам двойной результат, поэтому r1 устанавливается равным 0,4.

Наконец, r0 и r1 складываются вместе, давая окончательный результат 3.4.

...