我正在尝试获取双精度数(从两个整数的分数中得出)作为以下函数的返回值。

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.60.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);

09-27 07:39