2016-08-01 21 views
1

これらのステートメントは、異なるプラットフォーム間で全く同じ結果で実行されますか?時間 - 乗算と除算の浮動小数点精度

currentTime = System . nanoTime () * 0.000000001f ; // 01 

    currentTime = System . nanoTime ()/1000000000f ; // 02 

小さい浮動小数点値を使用すると精度が低下することが懸念されます。

+0

複数のハードウェアとOSで同じ浮動小数点演算によって同じ結果が得られるかどうかを尋ねる場合もあります。 Googleの "浮動小数点決定論"。 – lionscribe

+0

"アトミック"精密時計をコーディングしようとしていますか? –

+0

@RC原子精度はなく、60fps〜0.017秒で時間を増やすだけです。乗数の精度は[この浮動小数点ビットの表現](http://www.h-schmidt.net/FloatConverter/IEEE754.html)によれば問題ありませんが、乗算の間に何が起こるかはわかりません。 –

答えて

2

長いままにしてください。精度を損なうことなく、完全な決定論を全面的に提供します。

+0

この時間増分で浮動小数値をインクリメントすることをどのようにお勧めしますか? –

+0

フロートを完全にスキップしてください!ちょうど1分9秒で割ります。 1e9のモジュールを取って20を加え、16666667で割ると、60分の1秒になります。 – lionscribe

+0

さらに簡単です。ちょうど長いままにして16666666(長い数学、残りの部分を無視)で割ります。約57時間で半分の精度が失われます。以前の方法は決して精度を失うことはありません。すべてのデバイスとOSで同じ結果が得られます。 – lionscribe

関連する問題