System.nanoTime()的精度与精度

文档System.nanoTime()的内容如下(强调我的意思)。

此方法只能用于测量经过的时间,与系统或挂钟时间的任何其他概念无关。返回的值表示自某个固定但任意时间以来的纳秒(也许是将来的时间,因此值可能为负)。

无法保证值更改的频率。

如我所见,这可以用两种不同的方式解释:

  1. 在句子中 上面是指个人的返回值。然后,将在数字意义上理解精度和准确性。也就是说,精度是指有效数字的数量-截断的位置,精度是指该数字是否正确
  2. 在句子中 上述指方法本身的能力。然后,如飞镖类比(http://en.wikipedia.org/wiki/Precision_vs._accuracy#Accuracy_versus_precision:_the_target_analogy)所示,应理解精度和准确性。因此,低精度,高精度=>高精度会反复击中错误的值:想象物理时间静止不动,连续调用nanoTime()会返回相同的数值,但与实际经过的时间相去甚远。参考时间减去 一定的 偏移量。

哪种解释是正确的?我的观点是,解释2将意味着时间的量度 差异

使用nanoTime()(通过减去两个返回值)将是正确的纳秒(因为恒定误差/在测量偏移将被消除),而解释1止跌不能保证测量之间的一致性,因此不一定意味着时差测量的高精度。


日 的Java

7文档System.nanoTime()已更新,以解决与先前措词可能造成的混淆。

返回正在运行的Java虚拟机的高分辨率时间源的当前值,以纳秒为单位。

此方法只能用于测量经过时间,并且与系统或挂钟时间的任何其他概念无关。返回的值表示自某个固定但任意的 起始

时间以来的纳秒(也许是将来的时间,因此值可能为负)。在Java虚拟机的实例中,此方法的所有调用都使用相同的源。其他虚拟机实例可能使用其他来源。

此方法提供了纳秒级的精度,但不一定提供纳秒级的分辨率(即值更改的频率)-除了分辨率至少与的分辨率一样好之外,我们不做任何保证currentTimeMillis()

由于数值溢出,跨越大约292年(2 63纳秒)的连续呼叫中的差异将无法正确计算经过时间。

仅当计算在Java虚拟机的同一实例中获得的两个此类值之间的差时,此方法返回的值才有意义。

回答:

第一种解释是正确的。在大多数系统上,三个最低有效数字将始终为零。这实际上可以提供微秒级的精度,但是会以纳秒的固定精度级别进行报告。

实际上,既然我再来看一遍,您的第二种解释也是对正在发生的事情的有效描述,甚至更是如此。想象冻结的时间,该报告将始终是相同的错误的纳秒数,但是如果理解为整数的微秒数则是正确的。

以上是 System.nanoTime()的精度与精度 的全部内容, 来源链接: utcz.com/qa/414886.html

回到顶部