在此代码:while循环之外的变量初始化没有被循环内的代码修改?
public class PiCalc {
public static void main(String[] args) {
double pi = 1.0;
int n = 3;
int denominator = 3;
while (n<10) {
if (n%2 == 0) {
pi += 1/denominator;
}
else {
pi -= 1/denominator;
}
n++;
denominator += 2;
}
System.out.println(4*pi + "," + n + "," + denominator);
}
}
输出是: 4.0,10,17
所以,变量n和分母的更新,因为我想要的,但Pi没有。谁能告诉我为什么?
我不同意。分母应该是数学上的一个整数,这就是事实。如果将它加倍,并且迭代变得足够大,其价值的准确性可能会发生变化。最好将分母保留为int,并且只在进行除法时将其更改(或分子)以加倍。 –
双精度可以表示一个整数可以以完美精度表示的任何值。他们有53个尾数位!想想看。 – StilesCrisis
从理论上讲,这个数字还是一个整数。如果您必须进行递归计算或大量循环才能将PI计算为接近精度,则精度漂移将很重要。 –