2016-09-03 7 views
1

pi/4=1-1/3+1/5-1/7+1/9-1/11...100の用語を使用)を使用してpiの値を計算する必要がある割り当てがありますが、何らかの理由でwhileループを実行していないようです。私たちは、以前にコードを書いた経験がなく、まもなく始まった学生です。ループを使ってpiを計算するのがなぜ正しく動作しないのですか?

double pi = 1; 
int count = 0; 
int n = 3; 

while (count < 100) { 
    if ((count&1) == 0) { 
     pi = pi - 1/n; 
    } else { 
     pi = pi + 1/n; 
    } 
    n = n + 2; 
    count++; 
} 
out.print(pi*4); //why is it printing out pi=1????? 
+0

最初に「if」が間違っています。 && これを使って。 –

+1

intをintで除算すると、1/nは常に0になります。結果もintです – Natalia

+0

+ =または - =演算子を使用して変数を増減させようとします。 –

答えて

7

問題は、あなたがキャストを入力しないです。 piはdoubleですが、1/nは分母と分子の両方が整数なのでintを返します。これはJAVAで発生します。基本的に、実際に小数である1/nのたびに、タイプキャストの不足のためにn > 1ごとに0(int)が返されます。したがって、piの値は常に1で、最後にはpi*4が4.0を表示します。したがって、分母(分数)として分子または分母を1/n分数に変換(キャスト)する必要があります。これは、3.1514934010709914として出力を表示し、問題を解決

pi = pi + 1.0/(double) n; 
pi = pi - 1.0/(double) n; 

に文

pi = pi + 1/n; 
pi = pi - 1/n; 

を変更するには

+3

1.0は倍精度であるためnをdoubleとしてキャストする必要はありません。結果はダブル –

+0

@ NicolasFilotto yesになります。しかしそれはちょうど私がやろうとしているものをOPに見せることです。プラスそれは理解しやすくなります。 – progyammer

+0

ありがとうございます。私たちは二重にnを宣言することでそれを解決しました。当時私たちはまだintとdoubleについて学んでいました。 –

関連する問題