2011-09-01 131 views
3

我做了一些改裝的一個流行的遊戲(我的世界),我看到了這些線路中的地形生成,Java的雙精度數學

double d4 = 1.0D; 
d4 *= d4; 
d4 *= d4; 
d4 = 1.0D - d4; 
double d5 = (noise1[l1] + 256D)/512D; 
d5 *= d4; 

我想知道什麼的d4的一點是,因爲在第四行,它總是0,不是嗎?

+0

@pst:不,1.0d * 1.0d * *正好是* 1.0d,因爲1.0d在二進制浮點中可以精確表示。 (與0.1d相比,哪個*不是精確表示的。) –

+0

@pst:爲什麼1.0 * 1.0在浮點數學中不是1.0? –

+0

根據此代碼,yes和d5也將爲零。 – CoolBeans

回答

5

是的,直的Java至少這將保證爲0

對於本身就可以精確表示浮動小數點運算,1.0的所有不準確,並通過自身相乘的結果將始終回到簡單的1.0。

你確定其他地方沒有別的東西可以讓它略微不同於1.0d?或者,也許這在歷史上是0.1以外的價值?