Java - 计算圆周率
Java - Calculating Pi
一直想用格雷戈里-莱布尼茨级数来计算圆周率,结果出了点问题。我是 Java 的新手,所以这可能不是一个很难回答的问题。我不知道发生了什么,所以有人可以帮助我吗?
到目前为止的代码:
package com.waitdev.pi;
public class Pi {
static int pi = 0;
public static void main(String[] args) {
for (int i = 1; i < 51; i++) {
if (isOdd(i)) {
pi = pi+(4/((i*2)-1));
// System.out.println(i);
} else {
pi = pi-(4/(i*2)-1);
// System.out.println(i);
}
}
System.out.println(pi);
}
private static boolean isOdd(int n) {
if (n % 2 == 1) {
return true;
} else {
return false;
}
}
}
仅供参考:此输出为 28。
谢谢。
您在 else
块中缺少括号,您需要通过例如写 4.0 而不是 4 来强制进行浮点计算。
它应该是:
if (isOdd(i)) {
pi = pi+(4.0/((i*2)-1));
// System.out.println(i);
} else {
pi = pi-(4.0/((i*2)-1));
// System.out.println(i);
}
您还需要为 pi
使用 float
或 double
。
额外 - 至于你的 isOdd 方法,它可以简化为:
private static boolean isOdd(int n) {
return (n % 2 == 1)
}
但这并不影响结果。
首先:int
是一个整数,整数。你想把它改成:
static double pi = 0;
否则答案总是四舍五入为整数。
其次,您的 else 语句中缺少括号:
} else {
pi = pi-(4/((i*2)-1));
}
如果您想完全安全,请将 if 和 else 子句中的整数更改为双精度数:
if (isOdd(i)) {
pi = pi+(4.0/((i*2.0)-1.0));
// System.out.println(i);
} else {
pi = pi-(4.0/((i*2.0)-1.0));
// System.out.println(i);
}
但这不是必需的
一直想用格雷戈里-莱布尼茨级数来计算圆周率,结果出了点问题。我是 Java 的新手,所以这可能不是一个很难回答的问题。我不知道发生了什么,所以有人可以帮助我吗?
到目前为止的代码:
package com.waitdev.pi;
public class Pi {
static int pi = 0;
public static void main(String[] args) {
for (int i = 1; i < 51; i++) {
if (isOdd(i)) {
pi = pi+(4/((i*2)-1));
// System.out.println(i);
} else {
pi = pi-(4/(i*2)-1);
// System.out.println(i);
}
}
System.out.println(pi);
}
private static boolean isOdd(int n) {
if (n % 2 == 1) {
return true;
} else {
return false;
}
}
}
仅供参考:此输出为 28。
谢谢。
您在 else
块中缺少括号,您需要通过例如写 4.0 而不是 4 来强制进行浮点计算。
它应该是:
if (isOdd(i)) {
pi = pi+(4.0/((i*2)-1));
// System.out.println(i);
} else {
pi = pi-(4.0/((i*2)-1));
// System.out.println(i);
}
您还需要为 pi
使用 float
或 double
。
额外 - 至于你的 isOdd 方法,它可以简化为:
private static boolean isOdd(int n) {
return (n % 2 == 1)
}
但这并不影响结果。
首先:int
是一个整数,整数。你想把它改成:
static double pi = 0;
否则答案总是四舍五入为整数。
其次,您的 else 语句中缺少括号:
} else {
pi = pi-(4/((i*2)-1));
}
如果您想完全安全,请将 if 和 else 子句中的整数更改为双精度数:
if (isOdd(i)) {
pi = pi+(4.0/((i*2.0)-1.0));
// System.out.println(i);
} else {
pi = pi-(4.0/((i*2.0)-1.0));
// System.out.println(i);
}
但这不是必需的