当前位置: 首页 > 面试题库 >

System.nanoTime()的精度与精度

濮阳征
2023-03-14
问题内容

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

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

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

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

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

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

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

此方法只能用于测量经过时间,并且与系统或挂钟时间的任何其他概念无关。返回的值表示自某个固定但任意的 起始
时间以来的纳秒(也许是将来的时间,因此值可能为负)。在Java虚拟机的实例中,此方法的所有调用都使用相同的源。其他虚拟机实例可能使用其他来源。

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

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

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


问题答案:

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

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



 类似资料:
  • 问题内容: java中双值的乘法运算符的保证精度是多少? 例如,2.2 * 100是220.00000000000003,但是220是双精度数。220.00000000000003是220之后的下一个两倍。 问题答案: 乘法工作正常,但不能精确表示为双精度。最接近的双打是: 2.199999999999999733(0x4001999999999999) 2.200000000000000177(

  • 在我的计算机科学课程中,我们正在研究浮点数以及它们在内存中是如何表示的。我已经理解了它们在内存中是如何表示的(尾数/有效数、指数及其偏差、符号位),我也理解了浮点是如何相互添加和减去的(反规格化和所有那些有趣的东西)。然而,在翻阅一些学习问题时,我注意到一些我无法解释的东西。 当一个不能精确表示的浮点数加到自己身上几次时,答案比我们在数学上预期的要低,但当同一个浮点数乘以一个整数时,答案就精确地得

  • 我有一个神经网络,它对3个输出进行分类。我的数据集非常小,我有340张火车图像和60张测试图像。我构建了一个模型,当我编译时,我的结果是: 纪元97/100 306/306 [==============================] - 46s 151ms/阶跃损失: 0.2453-精度: 0.8824-val_loss: 0.3557-val_accuracy: 0.8922纪元98/10

  • 问题内容: 我试图确定双精度的最大精度是多少。在此链接的可接受答案的注释中,Java中的double保持精度 @PeterLawrey将max precision设置为15。 您如何确定呢? 问题答案: @PeterLawrey表示最大精度为15。 实际上,这根本不是他所说的。他说的是: 双精度有15个小数位 他错了。它们的精度为15个十进制 数字 。 任何数字中的小数位数由其对数10的对数给出。

  • 我试图确定double的最大精度是多少。在这个链接中接受的答案的注释中,Java中的Retain precision with double@PeterLawrey声明max precision In 15。 你如何确定这一点?

  • 问题内容: 我正在尝试计算函数用于运行的滴答声的数量,并使用像这样的函数来这样做: 但是问题在于它返回的值是10000的倍数,我认为是。有没有一种方法或等效函数值更精确? 我使用的是64位Ubuntu,但是希望该解决方案可以在Windows和Mac OS等其他系统上运行。 问题答案: POSIX中有许多更准确的计时器。 -正式淘汰,但可广泛使用;微秒的分辨率。 - 纳秒级分辨率的替代品(但不一定广