2017-08-22 18 views
0
私は彼らもそれが 6桁を計算した後、それはを停止させる に私たちをしたい式

パイ計算アルゴリズム

pi/4 = 1 - 1/3 + 1/5 - 1/7 +- ... 
  • を使用して、検索パイにアルゴリズムを記述する必要が

  • 誰もそれを作る方法を知っていますは丸めてを丸めますか?

私のコードは、現在、次のとおりです。

public class Pi 
{ 
    public static void main(String[] args) 
    { 
     double sum = 1; 
     int sign = -1; 
     double value = 3; 
     while (value < 10_000_000_000) 
     { 
      sum = sum + sign/value; 
      value = value + 2; 
      sign = sign * -1; 
     } 
     System.out.println("The value of pi is: " + (4 * sum)); 
    } 
} 

今、それは私がそれを計算して出力3.141593する必要があり、この

The value of pi is: 3.1415926335902506 

のように実行します。

+0

可能重複[Pi Javaプログラムの計算](https://stackoverflow.com/questions/21686036/calculating-pi-java-program) –

+1

Can yoあなたの現在のコードで何が問題になっているのかを教えてください。現在何が出力されているのですか?それは間違っていますか?または、あなたは2つの質問を実装する方法を知りたいだけですが、pi計算自体はすでに機能していますか? – Zabuza

+3

@BerkleyLamb質問は、アルゴリズム自体ではなく、2つの強調されたサブ疑問についてより多くを目指すと思います。この場合、この質問と重複しません。しかし、おそらく2つの他の質問に[Javaの小数点以下n桁の数値を丸める方法](https://stackoverflow.com/questions/153724/how-to-round-a-number-to-n-decimal-places) -in-java)と[doubleの小数点以下の桁数](https://stackoverflow.com/questions/6264576/number-of-decimal-digits-in-a-double)を入力します。 – Zabuza

答えて

1

は、このコードを試してください:

/** This method rounds a double to specified number of digits 
* The idea is to multiply the incoming number with the appropriate 
* power of 10, round it to the nearest integer, and then divide it. 
*/ 
public static double round(double x, int n) 
{ 
    double exp = Math.pow(10, n); 
    return Math.round(x * exp)/exp; 
} 

public static void main (String[] args) 
{ 
    double sum = 1; 
    int sign = -1; 
    double value = 3; 

    /* The convergence rate for this series is known, 
    * As suggested, 10^7 iterations are enough. 
    */ 
    int nofIterations = Math.pow(10, 7); 
    for(int i=0;i<nofIterations;i++) 
    { 
     sum = sum + sign/value; 
     value = value + 2; 
     sign = sign * -1; 
    } 
    double pseudoPi = 4 * sum; 

    /** Now we print both the calculated value and the rounded value 
    */ 
    System.out.println("The calculated value of pi is : " + pseudoPi); 
    System.out.println("The rounded value of pi is : " + round(pseudoPi, 6)); 
} 

印刷する:

をPIの計算値は:3.141592663589326
PIの丸められた値は次のとおりの3.141593

+0

私はforループの状態でMath.powを呼び出すとかなりのパフォーマンスに影響すると思います。おそらく、この計算は別の行で行う必要があります。したがって、繰り返しごとに繰り返されるわけではありません。 – mrog

+0

通常、コンパイラはこれが定数であることを認識し、提案された最適化を行う必要があります。 –

+0

あなたのコードを説明し、あなたが変更したことを述べることができますか? *コードのみの回答よりも役に立ちます。 – Zabuza

関連する問題