这些时间计数器细化语句的目的是什么?

时间:2011-06-17 15:49:22

标签: c++ time time-precision

我正在尝试实现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 :(得分:0)

如果这是家庭作业,你应该用作业标签来标记它。

在调试器中运行程序并检查值r0和r1(或使用printf)。一旦你看到这些值,这两个计算应该是显而易见的。

编辑6/18

为了简化计算,我们假设countsPerSecond的值为5,timeInCounts为17.计算timeInCounts / countsPerSecond将一个__int64除以另一个__int64所以结果也是__int64。将17除以5得到结果3,然后将其转换为double,以便将r0设置为值3.0。

计算(timeInCounts/countsPerSecond)*countsPerSecond为我们提供了值15,然后从timeInCounts中减去值,给出了值2.

如果整数值2除以整数值5,我们将得到零。 但是,除数被强制转换为double,因此整数值2除以double值5.0。这给了我们一个双重结果,所以r1设置为0.4。

最后将r0和r1加在一起,得到最终结果3.4。