2014-03-24 87 views
-1

如果我有一個double d;如果我這樣做:兩次調用1/val時可能會失去精度嗎?

d = 1/d; 
d = 1/d; 

這是可能的,我會失去精度?例如在什麼情況下?

+1

你爲什麼不試試這個? –

+0

@KugathasanAbimaran嘗試什麼?沒有鏈接。 – Yoda

+4

他的意思是運行代碼,看看會發生什麼 – James

回答

3

是的,當然它可能會失去精度。諸如floatdouble等浮點類型不是無限精確的。

double d = 123456789.0; 

System.out.println(d); 
d = 1/d; 
d = 1/d; 
System.out.println(d); 

輸出:

1.23456789E8 
1.2345678899999999E8 
+1

爲了獲得更好的效果,你可以使用一些簡單的數字,如3 :) –

-1

因爲計算機系統使用固定的精度來表示數字,所以即使這個方程式明顯在代數上相等,您也會發現d並不總是完全相等(1/(1/d))。

一些閱讀材料:enter link description here您可能想要搜索更多。

0

如果使用doublefloat則是你很可能失去精度。

但是,如果您使用類,如this one,您將避免精度損失。