我正在尝试获取双精度数(从两个整数的分数中得出)作为以下函数的返回值。
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
强制转换为double
来强制浮点除法:
double threshold = (double)openSites / (n*n);
这也可以工作,但我发现它不太优雅:
double threshold = openSites * 1.0 / (n*n);