我有整數XY和Z爪哇分配浮動
我有此式中,我使用的填充浮子[] []數組
的公式爲X /(Y *( X + Z),其中所有3個都是整數
但是,當計算出的值是0,這絕對不是因爲我檢查XY和z的值。
我怎麼去預防這一點,並表示float value instead?
提前
我有整數XY和Z爪哇分配浮動
我有此式中,我使用的填充浮子[] []數組
的公式爲X /(Y *( X + Z),其中所有3個都是整數
但是,當計算出的值是0,這絕對不是因爲我檢查XY和z的值。
我怎麼去預防這一點,並表示float value instead?
提前
非常感謝你要投的整數(或只是拳頭之一)浮動:
float result = ((float)x)/(y*(x+z));
這將使/
操作產生從操作的浮動。
不要忘記檢查你沒有被零除。
我假設你正在做的事情是這樣的:
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
代替float
。 float
的問題在於它只能表示具有最多24位精度的數字。這大約是7位十進制數字。除非性能或存儲非常關鍵,否則double
是首選,因爲它可以提供53位精度。這大概是14位十進制數字。
試試這個:
float a = x/(1.F * y * (x + z));
葉氏,也期待一個數值的錯誤,尤其是對y'的'大值。 – amit