所以,我通过尝试使用具有用户定义精度的系列创建数学常数π,将我对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循环),我完全不知道是什么问题可能是。有什么想法吗?
答案 0 :(得分:2)
尝试改变这一点:
rawPi += 1 / (i * i);
到
rawPi += 1.0 / (i * i);
或由“Patricia Shanahan”评论,使用它来获得更好的准确性并避免i * i上的整数溢出:
1/((double)i*i)