我正在尝试实现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;
}
答案 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。