2014-11-14 63 views
1

我是新來的java,我試圖做一個程序,用100000次迭代計算pi使用萊布尼茲系列。我需要定義一個方法並調用它。當我運行我的程序時,我沒有得到結果。有人能告訴我我做錯了什麼,並幫助我回到正軌嗎?使用萊布尼茲系列計算pi

public class pi 
 
{ 
 
    public static void main(String[] args) 
 
    { 
 
     double pi = computePi(100000); 
 
    } 
 
    public static double computePi(int count) 
 
    { 
 
     double pi = 0; 
 
     count = 100000; 
 
     
 
     for(int i =0; i<count; i++) 
 
     { 
 
      pi = Math.pow(-1,i)/(2*i+1); 
 

 
     } 
 
     return pi; 
 
    } 
 
}

+0

我不不要在任何地方看到打印聲明。 – defube

回答

0

如果你想將它打印到控制檯,請嘗試:

public static void main(String[] args) 
{ 
    System.out.println("pi = " + calculatePi(100000)); 
} 

我不能說太多的精度,但。

0

你的代碼有一些問題。首先,main中的函數調用與computePi函數的名稱不匹配。其次,在for循環中,您可以在每次迭代過程中重新分配pi變量的值。你需要做的是取所有迭代的總和。因此,您需要保留pi的前一個值並將當前商添加到它。最後,Leibnez求和公式返回pi/4,而不是pi。因此,你應該返回值更改爲PI * 4

public static void main(String[] args) 
{ 
    double pi = computePi(100000); 
    System.out.println(pi); 
} 

public static double computePi(int count) 
{ 
    double pi = 0; 

    for(int i = 0; i < count; i++) 
    { 
     pi += Math.pow(-1,i)/(2*i+1); 
    } 
    return pi * 4; 
} 

最後請注意:當你傳遞一個參數,你不一定需要將其恢復到一個變量。只需使用參數值。

0

您的代碼中有許多問題。首先,你不打印你的函數的結果。另一方面,您的實施似乎是關閉的。我想你想,

public static void main(String[] args) { 
    double pi = computePi(100000); 
    System.out.println(pi); 
} 

public static double computePi(int count) { 
    double pi = 1; 

    for (int i = 3; i < count; i += 4) { 
     pi = pi - (1/(double) i) + (1/(double) (i + 2)); 
    } 
    return pi * 4; 
} 

輸出是

3.141612653189785 

或者你可以使用內置的Math.PI不變,

System.out.println(Math.PI); 

輸出是

3.141592653589793