時間はJavaで長く署名されているため、63ビットでもあります。
それで、今年はオーバーフローするのではないかと心配していますか?個人的には、それまでに Java を使用する人はいないと思います。実際、私たちもその時までに絶滅/進化している可能性があります。
System.out.println("Overflow at " + new Date(Long.MAX_VALUE));
版画
Overflow at Sun Aug 17 08:12:55 CET 292278994
注: 2 億 9200 万年前は、恐竜が地球を支配する前のことです。
ナノ秒のタイム スタンプを double に変換する際の精度の低下が懸念される場合は、その誤差を計算できます。
long now = System.currentTimeMillis() * 1000000L;
double error_f = Math.ulp((float) now);
double error = Math.ulp((double) now);
System.out.println("The error for a nano-second timestamp using a double "
+ now + " is " + error + " and float is " + error_f);
版画
The error for a nano-second timestamp using a double 1378970569656000000 is 256.0 and float is 1.37438953472E11
これは、への変換の誤差double
が最大でこの半分の 128 ns であることを意味します。float への変換の場合、誤差も ulp の半分の 68 秒であり、かなり高い値です。