2012-10-13 104 views
0

我有整數XY和Z爪哇分配浮動

我有此式中,我使用的填充浮子[] []數組

的公式爲X /(Y *( X + Z),其中所有3個都是整數

但是,當計算出的值是0,這絕對不是因爲我檢查XY和z的值。

我怎麼去預防這一點,並表示float value instead?

提前

回答

2

非常感謝你要投的整數(或只是拳頭之一)浮動:

float result = ((float)x)/(y*(x+z)); 

這將使/操作產生從操作的浮動。

不要忘記檢查你沒有被零除。

+0

葉氏,也期待一個數值的錯誤,尤其是對y'的'大值。 – amit

0

我假設你正在做的事情是這樣的:

floats[i][j] = x/(y * (x + z)); 

的問題是,在RHS計算使用整數運算完成的......因爲所有的值都是整數。特別是,除法是一個整數除法,這意味着(例如)如果0 <= x < (y * (x + z),則表達式將最多評估爲零。

解決方案是強制使用浮點運算執行除法。

問題的第二個方面是存在整數溢出的風險。特別是,如果一個或多個輸入太大,y * (x + z)子表達式可能會溢出。這將導致該部分計算值大幅錯誤​​。

溢出問題的解決方案是強制整個計算完成浮點...不僅僅是最後的分割;例如

floats[i][j] = x/(y * ((float) x + z)); 

最後,如果你想要得到的結果是正確的(或儘可能準確),你或許應該使用的double代替floatfloat的問題在於它只能表示具有最多24位精度的數字。這大約是7位十進制數字。除非性能或存儲非常關鍵,否則double是首選,因爲它可以提供53位精度。這大概是14位十進制數字。

0

試試這個:

float a = x/(1.F * y * (x + z));