2014-09-25 100 views
0

我想通过迭代近似pi。这只是代码的一部分。我试图把这个公式放入java中:pi = 4(1 - 1/3 + 1/5 - 1/7 + 1/9 + ... +(( - 1)^(i + 1))/(2i-1))。我的问题是这个方程的总和(在我的代码中说明)。如果用户继续输入y,程序应该将i乘以2并计算pi直到用户输入n,然后返回到主菜单。近似pi通过迭代JAVA

else if(input == 4) 
    { 
     System.out.print("i=1 pi=4.0\tWould you like to continue? (y|n) ");  
     char y = keyboard.next().charAt(0); 
     if (y =='y') 
     { 
      for (int i=2; i<=1000; i=i*2) 
      { 
       int sum = 0; 
       double pi =4 * (Math.pow(-1, i+1)/(2*i-1)); 
       //Right here, how do I modify it to get a sum across a multitude of i's? 
       System.out.print("i=" + i + " " + "pi" + "=" + pi + "\tcontinue (y|n)? "); 
       keyboard.next().charAt(0); 
      } 
     } 
     else 
     { 

     } 
+0

你为什么要把'i'乘以2?应该不是'i ++'而是? – Henry 2014-09-25 15:31:30

+0

'Math.pow(-1,i + 1)'这也行不通。 – Henry 2014-09-25 15:32:36

+0

i的增量应该是前一个的两倍 – awxf218 2014-09-25 15:35:17

回答

0

我觉得你的问题是使用i通过计算编程的方式来循环求和公式之间的差异。像这样的事情将循环通过is加/减分数,然后最后乘以4。

boolean plus = true 
double sum = 0; 
for (double i=1.0; i<=1000; i+=2.0) 
{ 
    if (plus) { 
     sum += 1.0/i; 
     plus = false; 
    } else { 
     sum -= 1.0/i; 
     plus = true; 
    } 
} 
sum *= 4; 
+1

当'i> 1'时,'1/i'不会是整数除法,因此总是'0'吗? – 2014-09-25 15:36:36

+0

啊,好电话。更新为双倍。 – WOUNDEDStevenJones 2014-09-25 15:38:57