[英]Casting int fraction to double
我正在嘗試獲取雙精度數(從兩個整數的分數中得出)作為以下函數的返回值。
public static double getThresHold(int n) {
int i, j;
int openSites = 0;
Percolation percolation = new Percolation(n);
do {
i = StdRandom.uniform(n) + 1;
j = StdRandom.uniform(n) + 1;
if ( !percolation.isOpen(i, j) ) {
percolation.open(i, j);
openSites++;
}
} while (!percolation.percolates());
double threshold = openSites * 1.0 / n*n;
return threshold;
}
但是結果總是錯誤的,我得到的價值是:
200.0
240.0
260.0
預期結果應在0.6
到0.5
之間
我的代碼有什么問題!
謝謝。
openSites * 1.0 / n*n
是從左到右計算的,因此它等效於((openSites * 1.0) / n)*n
,它等於openSites
。
您應該使用括號來強制操作順序,而不是乘以1.0,而可以通過將openSites
強制openSites
為double
來強制進行浮點除法:
double threshold = (double)openSites / (n*n);
這也可以工作,但我發現它不太優雅:
double threshold = openSites * 1.0 / (n*n);
double threshold = openSites * 1.0 / (n*n);
只需在除數周圍添加括號即可。 不必openSites
轉換為double,因為您將openSites
乘以1.0,這會使表達式openSites * 1.0
成為double。
因此,您的錯誤實際上不是強制轉換問題,而是先將openSites * 1.0
除以n
,然后將結果與n
相乘。 因此,在您的版本中,您基本上可以得到openSites * 1.0
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.