[英]Leibniz Series Java
我正在尝试使用Leibniz系列验证pi,而我得到的问题是:
“您可以通过使用以下序列来近似π:
pi = 4(1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + ((-1)^i+1)/2i - 1
编写一个程序,显示i = 10,000、20,000,...到100,000的π值”
现在问题本身还很模糊,这主要是我需要帮助的地方,到目前为止,我到这里为止。
public class Q2 {
public static void main(String[] args)
{
for (int i = 1; i <= 10000; i++)
{
double pi = 4* (1 - (1/3) + (1/5) - (1/7) + (1/9) - (1/11) +
(Math.pow((-1),(i+1)) ) / ((2*i)-1));
if(i%10000==0)
{
System.out.println();
}
}
}
}
问题在于,运行系统时不会产生任何结果,如果运行额外的else语句来检查pi的值,则会返回4.000200030004501和3.999799949987497的变化。
if(i%10000==0)
{
System.out.println();
}
else
{
System.out.print(pi);
}
我是否在错误地扩充自己? 我觉得这个问题盯着我的脸,我想念它了! 谢谢,戴夫。
您误解了问题中的系列。 它们的意思是该系列的第i个元素由下式给出:
((-1)^i+1)/(2i - 1) [i starting with 1 in this notation]
所以直到元素2为止的序列是:
4 * ( -1^(1+1) / (2*1-1) + -1^(2+1) / (2*2-1) ) = 4*(1 - 1/3)
因此,问题列出了系列中的第1个6个元素,但是系列的长度是无限的。 这意味着对于给定的i(TARGET)值,计算将如下所示:
double sum = 0;
for (int i=1; i<TARGET; i++) {
double element = Math.pow(-1,i+1) / (2*i + 1); //element i
sum += element; // add element i to the results so far
}
double result = 4*sum;
有关此系列的更多详细信息,请参见Wikipedia (请注意,Wikipedia文章从i = 0开始计数)
不确定这个问题是否仍然有用,但是答案可能像这样
public class Calculate_PI
{
public static void main(String[] args)
{
double pi = 0;
for(int i = 10_000; i <= 100_000; i += 10_000)
{
double variablePart = 0;
for(int j = 1; j <= i; j++)
{
variablePart += (Math.pow(-1, j+1) / ((2 * j) - 1));
}
pi = 4 * variablePart;
System.out.printf("For i = %d\npi = %12.9f\n", i,pi);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.