2016-08-01 77 views
1

這些語句在不同平臺上的執行結果是否完全相同?具有時間 - 乘法與除法的浮點精度

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

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

這個問題是使用小浮點值的精度損失。

+0

您可能還會問,如果相同的浮點計算會在多個硬件和操作系統上給出相同的結果。谷歌「浮點確定性」。 – lionscribe

+0

你想要編碼一些「原子」精密手錶? – 2016-08-02 05:09:00

+0

@RC沒有原子精度,只需將時間增加到60 fps〜0.017秒。根據[這個浮點位表示](http://www.h-schmidt.net/FloatConverter/IEEE754.html),乘法器精度是可以的,但不知道在乘法過程中會發生什麼。 –

回答

2

只要把它留長。不失全面的精確性和完美的決定性。

+0

你如何建議按此時間增量遞增浮點值? –

+0

完全跳過浮子!分鐘除以1e9。以1e9的模塊,加20,除以16666667,你有你的第60秒。 – lionscribe

+0

甚至更​​簡單。只要保持長時間除以16666666(長數學,忽略餘數)。在57個小時內你將失去半秒的精確度。以前的方法不會失去精度。您將在所有設備和操作系統上獲得相同的結果。 – lionscribe