我一直想用Gregory-Leibniz系列计算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。
感谢。
答案 0 :(得分:5)
你在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);
}
您还需要float
使用double
或pi
。
额外 - 对于你的isOdd方法,它可以简化为:
private static boolean isOdd(int n) {
return (n % 2 == 1)
}
但这不会影响结果。
答案 1 :(得分:0)
首先关闭:int
是整数,整数。你想把它改成:
static double pi = 0;
否则答案总是向下舍入到整数。
其次,你在else语句中缺少括号:
} else {
pi = pi-(4/((i*2)-1));
}
如果您想要完全安全,请将if和else子句中的整数更改为double:
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);
}
但这不应该是必要的