Precisión vs. exactitud de System.nanoTime ()

La documentación paraSystem.nanoTime() Dice lo siguiente (énfasis mío).

Este método solo se puede utilizar para medir el tiempo transcurrido y no está relacionado con ninguna otra noción de sistema o de reloj de pared. El valor devuelto representa nanosegundos desde un tiempo fijo pero arbitrario (quizás en el futuro, por lo que los valores pueden ser negativos).Este método proporciona una precisión de nanosegundos, pero no necesariamente una precisión de nanosegundos. No se garantiza la frecuencia con la que cambian los valores.

Como lo veo, esto puede ser interpretado de dos maneras diferentes:

La sentencia ennegrita lo anterior se refiere a valores de retorno individuales. Entonces, la precisión y la exactitud deben entenderse en el sentido numérico. Es decir, la precisión se refiere al número de dígitos significativos: la posición del truncamiento y la precisión es si el número es el correcto (como se describe en la respuesta superior aquí¿Cuál es la diferencia entre 'precisión' y 'exactitud'? )

La sentencia ennegrita Lo anterior se refiere a la capacidad del propio método. Entonces, la precisión y la exactitud deben entenderse como lo ilustra la analogía de la diana (http://en.wikipedia.org/wiki/Precision_vs._accuracy#Accuracy_versus_precision:_the_target_analogy ). Por lo tanto, baja precisión, alta precisión => el valor incorrecto se golpea repetidamente con una alta precisión: al imaginar que el tiempo físico se detiene, las llamadas consecutivas de nanoTime () devuelven el mismo valor numérico, pero están fuera del tiempo real transcurrido desde el tiempo de referencia por algunosconstante compensar.

¿Qué interpretación es la correcta? Mi punto es que la interpretación 2 significaría que una medida del tiempodiferencia el uso de nanoTime () (al restar dos valores de retorno) sería correcto al nanosegundo (ya que se eliminaría el error / desplazamiento constante en la medición), mientras que la interpretación 1 no garantizaría ese tipo de cumplimiento entre las mediciones y, por lo tanto, no lo haría. Implica necesariamente una alta precisión de las mediciones de diferencia de tiempo.

Actualizado 15/04/13: La documentación de Java 7 paraSystem.nanoTime() se ha actualizado para abordar la posible confusión con la redacción anterior.

Devuelve el valor actual de la fuente de tiempo de alta resolución de la máquina virtual Java en ejecución, en nanosegundos.

Este método solo se puede utilizar para medir el tiempo transcurrido y no está relacionado con ninguna otra noción de sistema o de reloj de pared. El valor devuelto representa nanosegundos ya que algunos fijos pero arbitrariosorigen Tiempo (quizás en el futuro, por lo que los valores pueden ser negativos). El mismo origen es usado por todas las invocaciones de este método en una instancia de una máquina virtual Java; Es probable que otras instancias de máquinas virtuales utilicen un origen diferente.

Este método proporciona una precisión de nanosegundos, pero no necesariamente una resolución de nanosegundos (es decir, con qué frecuencia cambia el valor); no se ofrecen garantías, excepto que la resolución es al menos tan buena como la decurrentTimeMillis().

Diferencias en llamadas sucesivas que abarcan más de aproximadamente 292 años (263 nanosegundos) no calculará correctamente el tiempo transcurrido debido a un desbordamiento numérico.

Los valores devueltos por este método adquieren sentido solo cuando se calcula la diferencia entre dos de estos valores, obtenidos en la misma instancia de una máquina virtual Java.

Respuestas a la pregunta(4)

Su respuesta a la pregunta