精确性和准确性是两码事儿

精确性和准确性是两码事儿

作者:BlogUpdater |  时间:2023-03-28 |  浏览:1123 |  评论已关闭 条评论

准确性(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)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。

标签:

评论已关闭。