Java For 循环在更改循环变量类型时更改数值结果
我用莱布尼茨公式编写了一个程序来计算PI数:
[
我写了一个for-loop,初始化类型是“int”,循环工作正常,但是当我将初始化类型更改为“long”时,结果发生了变化。只有当循环时间超过十亿时,才会发生这种情况。这使得“int - loop”计算PI比“long - loop”更准确。我不知道为什么会发生这种情况。请帮助我理解这个问题。谢谢!这是我的代码。
public static void main(String[] args) {
double result1 = 0;
double result2 = 0;
double sign = 1;
for (int i = 0; i <= 1607702095; i++) {
result1 += sign/(2 * i + 1);
sign *= -1;
}
sign = 1;
for (long j = 0; j <= 1607702095; j++) {
result2 += sign/(2 * j + 1);
sign *= -1;
}
System.out.println("result1 " + result1 * 4);
System.out.println("result2 " + result2 * 4);
System.out.println("pi " + Math.PI);
}
结果是:
result1 3.141592653576877
result2 3.1415926529660116
pi 3.141592653589793