精确性和准确性是两码事儿
准确性(Accuracy)是与正确答案的接近程度,精确性(Precision)是对这个答案的分辨率。
假设,你问我,”现在几点了?”
我抬头看看太阳,然后估算了一下,回答道 “现在是上午 10 点 35 分 22.131 秒”
我给出的是一个足够精确性的答案,但是不是一个很准确的答案。这个时候,你是否初步理解了 Accuracy 和 Precision 的区别呢?
这个时候,你看了下手表,手表的只有四个指示数字,分别是3、6、9 和 12。你微微皱起眉头,说:”现在是10:05左右。”
你给出的答案是一个比我更加准确的时间,但是却不是那么精确。
现在,我们用上面的概念来理解 Windows 中那些和时间有关的 API。
GetTickCount 这个函数的精度是 1 毫秒,但是它的准确度却没有那么高,这取决于你的 CPU 时钟周期,一般在 10 毫秒到 55 毫秒的范围。 GetSystemTimeAsFileTime 函数以其 100 纳秒的精度看起来更令人印象深刻,但它的准确性不一定比 GetTickCount 好。
如果你在寻找高精度的函数,那么最好使用 QueryPerformanceCounter 函数。但是,你必须做出一些权衡。首先,结果的精度是可变的,你需要调用 QueryPerformanceFrequency 函数来查看精度是多少。另一个权衡是,QueryPerformanceCounter 的更高精度可能更慢地获得。
QueryPerformanceCounter 实际做什么取决于 HAL(在ACPI的帮助下)。性能开发团队告诉我,在最坏的情况下,你可能会从可编程中断计时器上的翻转中断中得到它。这反过来可能需要 PCI 事务,而这并不是世界上最快的事情。它比 GetTickCount 更好,但它不会赢得任何速度比赛。在最好的情况下,HAL 可能会得出结论,RDTSC 计数器以恒定频率运行,因此它改用该频率。在多处理器机器上,事情尤其令人兴奋,你还必须确保从每个处理器上的 RDTSC 返回的值彼此一致!然后,为了更好地衡量,为已知的错误硬件提供一些绕开方法。
总结
在 拓扑梅尔智慧办公平台 的开发中,我主要使用了 GetTickCount,我觉得对我而言,最重要的一句话是:
GetTickCount 这个函数的精度是 1 毫秒,但是它的准确度却没有那么高,这取决于你的 CPU 时钟周期,一般在 10 毫秒到 55 毫秒的范围。
最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Precision is not the same as accuracy》
最近我写了个东西
正如你们所知道的,拓扑梅尔智慧办公平台(Topomel Box)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。

相关推荐
- 编写现代C++代码:GSL 4.0.0 正式可用
- Posted on 02月11日
- 理解哈希码
- Posted on 03月22日
- 如何将超过 32000 个字符放入富文本控件中?
- Posted on 12月08日
- 传递一个比实际字符串大的缓冲区长度会怎么样?
- Posted on 04月15日



评论已关闭。