2011-06-17 25 views
0

我想实现一个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

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

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

编辑6/18

为了使计算简单,假设countsPerSecond的值为5,并timeInCounts是17.计算timeInCounts/countsPerSecond另一个__int64将一__int64这样的结果也将是一个__int64。将17除以5得到结果3,然后将结果3转换为双精度值,因此将r0设置为值3.0。

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

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

最后r0和r1加在一起给出最终结果3.4。

+0

嗨,r0只是几秒钟的时间,但r1应该始终为0,如果你简化它的公式,但它不是。这就是为什么我不知道它是什么计算,为什么它必须在那里。我想它必须有一些准确的改进,但我不能说它在做什么。 – Shomismo

+0

如果你检查'r1'的值,我想你会发现它的值大于零且小于1。请注意'countsPerSecond'被转换为'double',所以'r1'不是整数除法的结果。 –

+0

那就对了。你这样做是否会得到更加敏锐的结果?它是否比r0计算更精确(它也被称为doble)? – Shomismo

相关问题