Menghitung Pi ke sejumlah istilah tertentu di Java?

Saya telah diberi tugas berikut dan kode saya tidak berfungsi. Pertanyaannya adalah:

Dengan menggunakan perulangan while atau do- while, tulislah program untuk menghitung PI menggunakan persamaan berikut: PI = 3 + 4/(2*3*4) - 4/(4*5*6) + 4/(6* 7*8) - 4/(8*9*10) + ... Izinkan pengguna menentukan jumlah suku (5 suku ditampilkan) untuk digunakan dalam perhitungan. Setiap putaran, hanya satu suku tambahan yang harus ditambahkan ke perkiraan PI.

Ini adalah kode yang saya miliki sejauh ini: import java.util.Scanner; impor javax.swing.JOptionPane; import java.lang.Math;

public class LabFriday25 {

public static void main(String[] args) {
    String termInput = JOptionPane.showInputDialog(null, "How many terms of 
                                 PI would you like?");
    Scanner termScan = new Scanner (termInput);

        double termNum = termScan.nextDouble();
        double pi = 3;
        int count = 0;
        double firstMul = 2;
        double secMul = 3;
        double thirdMul = 4;
        double totalMul = 0;

                while (count<= termNum)
                {
                    if (termNum==1)
                    {
                        pi = 3.0;
                    }

                    else if (count%2==0)
                    {
                        totalMul= (4/(firstMul*secMul*thirdMul));
                    }

                    else
                    { 

                       totalMul = -(4/((firstMul+2)*(secMul+2)*(thirdMul+2)));
                    }
                pi = pi + (totalMul);

                firstMul = firstMul + 2;
                secMul = secMul + 2;
                thirdMul = thirdMul + 2;
                //totalMul = (-1)*totalMul;
                count++;
            }


        JOptionPane.showMessageDialog(null, "The value of pi in " + termNum + " terms is : " + pi);
    }

}

Saya tidak tahu mengapa kode tidak mengembalikan nilai yang tepat untuk 3 atau lebih istilah Pi, kode tersebut terus memberikan nilai yang sama setiap saat.

EDIT: Saya menghapus titik koma dari akhir pernyataan while dan sekarang kode tersebut mengembalikan nilai 3.0 untuk sejumlah istilah yang dimasukkan oleh pengguna. Dimana kesalahanku?

EDIT2: Kondisi dihapus dari loop while. Jawabannya hampir mendekati benar, namun masih belum cukup akurat. Bagaimana saya bisa memperbaikinya agar memberi saya jawaban yang benar?


person user2928362    schedule 28.10.2013    source sumber
comment
Bukan implementasi yang baik yang saya lihat. Coba ini: math.hmc.edu/funfacts/ffiles/30001.1-3 .shtml   -  person duffymo    schedule 28.10.2013


Jawaban (1)


Titik koma di akhir pernyataan while dievaluasi secara independen menyebabkan badan perulangan dieksekusi tanpa syarat sehingga hasilnya selalu sama

while (count > 0 && count <= termNum);
                                     ^

Selain itu loop dihentikan setelah iterasi pertama. Hapus ekspresi pertama dari loop, mis.

while (count <= termNum) {
person Reimeus    schedule 28.10.2013
comment
Saya menghapus titik koma, tetapi sekarang kode tersebut mengembalikan nilai 3.0 untuk sejumlah istilah yang dimasukkan oleh pengguna. Ada ide? - person user2928362; 28.10.2013
comment
Ya, loop Anda gagal setelah iterasi pertama - cukup periksa apakah angkanya kurang dari angka batas atas - person Reimeus; 28.10.2013
comment
Jawabannya sekarang berubah, dan itu merupakan hal yang baik. Masalah saya adalah itu tidak mengembalikan nilai yang benar. Mereka hampir benar, namun masih belum sepenuhnya benar. - person user2928362; 28.10.2013
comment
Hasil yang dikembalikan adalah benar sesuai dengan persamaan masukan, oleh karena itu persamaan tersebut merupakan perkiraan yang sangat longgar dari PI, artinya persamaan ini seakurat yang diperoleh dengan menggunakan persamaan ini - person Reimeus; 28.10.2013
comment
Tidak ada yang dapat menjamin Anda bahwa jumlah suku dalam deret tersebut akan sama dengan jumlah digit yang benar dibandingkan dengan Pi. - person Traklon; 28.10.2013
comment
Apakah ada cara untuk meningkatkan akurasi? Saya tidak bisa menggunakan persamaan lain, dosen ingin yang khusus ini. Orang lain di kursus saya menemukan jawaban yang benar, jadi saya bertanya-tanya apakah ada cara untuk melakukannya. - person user2928362; 28.10.2013
comment
Penambahan 4 pada seluruh variabel Mul menyebabkan pembaginya terdistorsi dan tidak sesuai dengan rumus aslinya. Di sinilah debugger berguna :) - person Reimeus; 28.10.2013