0

因此,我尝试使用具有用户定义精度的系列创建数学常数 π,从而测试我对 for 循环的了解:

public double pi(int accuracy) {
    for (int i = 1; i <= accuracy; i++) {
        rawPi += 1 / (i * i);
    }
    return Math.sqrt(rawPi * 6);
}

现在,你会认为随着射出,它会越来越接近 π int accuracy,但事实并非如此。它只是保持在 6 的平方根处,这意味着它private double rawPi达到 1 并且永远不会更高,这意味着我的系列中没有添加任何术语(表示为 for 循环),我完全不知道问题可能是什么。有任何想法吗?

4

1 回答 1

2

尝试改变这一点:

    rawPi += 1 / (i * i);

    rawPi += 1.0 / (i * i);

或如 "Patricia Shanahan" 所评论,使用它以获得更好的准确性并避免 i*i 上的整数溢出:

1/((double)i*i) 
于 2013-10-08T01:28:11.997 回答