กำลังคำนวณ Pi ตามจำนวนคำศัพท์เฉพาะใน Java หรือไม่

ฉันได้รับมอบหมายงานต่อไปนี้ และรหัสของฉันใช้งานไม่ได้ คำถามคือ:

ใช้ while หรือ do- While loop เขียนโปรแกรมเพื่อคำนวณ PI โดยใช้สมการต่อไปนี้: PI = 3 + 4/(2*3*4) - 4/(4*5*6) + 4/(6* 7*8) - 4/(8*9*10) + ... อนุญาตให้ผู้ใช้ระบุจำนวนเทอม (แสดง 5 เทอม) เพื่อใช้ในการคำนวณ แต่ละครั้งในรอบลูป ควรเพิ่มคำศัพท์พิเศษเพียงคำเดียวในการประมาณค่าสำหรับ PI

นี่คือรหัสที่ฉันมี: import java.util.Scanner; นำเข้า javax.swing.JOptionPane; นำเข้า 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);
    }

}

ฉันไม่เข้าใจว่าทำไมโค้ดถึงไม่ส่งคืนค่าที่ถูกต้องสำหรับเงื่อนไขของ Pi ตั้งแต่ 3 คำขึ้นไป มันให้ค่าเดิมทุกครั้ง

แก้ไข: ฉันลบเครื่องหมายอัฒภาคออกจากส่วนท้ายของคำสั่ง while และตอนนี้โค้ดกำลังส่งคืนค่า 3.0 สำหรับคำศัพท์จำนวนเท่าใดก็ได้ที่ผู้ใช้ป้อน ฉันจะผิดตรงไหน?

แก้ไข 2: ลบเงื่อนไขออกจาก while loop คำตอบใกล้จะถูกต้องแล้ว แต่ก็ยังไม่แม่นยำเพียงพอ ฉันจะแก้ไขสิ่งนี้เพื่อให้คำตอบที่ถูกต้องได้อย่างไร


person user2928362    schedule 28.10.2013    source แหล่งที่มา
comment
ไม่ใช่การใช้งานที่ดีอย่างที่ฉันเห็น ลองสิ่งนี้: math.hmc.edu/funfacts/ffiles/30001.1-3 .shtml   -  person duffymo    schedule 28.10.2013


คำตอบ (1)


เครื่องหมายอัฒภาคที่ส่วนท้ายของคำสั่ง while จะถูกประเมินอย่างอิสระ ทำให้เนื้อความของลูปดำเนินการโดยไม่มีเงื่อนไข ดังนั้นผลลัพธ์จึงเหมือนเดิมเสมอ

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

นอกจากนี้การวนซ้ำจะสิ้นสุดหลังจากการวนซ้ำครั้งแรก ลบนิพจน์แรกออกจากลูป เช่น

while (count <= termNum) {
person Reimeus    schedule 28.10.2013
comment
ฉันลบเครื่องหมายอัฒภาคออกแล้ว แต่ตอนนี้โค้ดส่งคืนค่า 3.0 สำหรับเงื่อนไขจำนวนเท่าใดก็ได้ที่ผู้ใช้ป้อน มีความคิดอะไรบ้าง? - person user2928362; 28.10.2013
comment
ใช่ วงของคุณกำลังระเบิดหลังจากการวนซ้ำครั้งแรก - เพียงตรวจสอบว่าตัวเลขนั้นน้อยกว่าตัวเลขขอบเขตบน - person Reimeus; 28.10.2013
comment
คำตอบกำลังเปลี่ยนไปซึ่งเป็นสิ่งที่ดี ปัญหาของฉันคือมันไม่ส่งคืนค่าที่ถูกต้อง พวกเขาใกล้เคียงกับความถูกต้อง แต่ก็ยังไม่ถูกต้องนัก - person user2928362; 28.10.2013
comment
ผลลัพธ์ที่ส่งคืนนั้นถูกต้องตามสมการอินพุต ดังนั้นสมการจึงเป็นค่าประมาณที่ มาก ของ PI กล่าวคือ นี่จะแม่นยำพอๆ กับที่ใช้สมการนี้ - person Reimeus; 28.10.2013
comment
ไม่มีอะไรที่รับประกันได้ว่าจำนวนพจน์ในชุดข้อมูลจะเท่ากันกับจำนวนหลักที่ถูกต้องเมื่อเทียบกับ Pi - person Traklon; 28.10.2013
comment
มีวิธีใดในการปรับปรุงความแม่นยำหรือไม่? ฉันไม่สามารถใช้สมการอื่นได้ อาจารย์ต้องการสมการเฉพาะนี้ คนอื่นๆ ในหลักสูตรของฉันพบคำตอบที่ถูกต้อง ดังนั้นฉันจึงสงสัยว่ามีวิธีแก้หรือไม่ - person user2928362; 28.10.2013
comment
การบวก 4 เข้ากับตัวแปร Mul ทั้งหมดทำให้ตัวหารผิดเพี้ยนและไม่ตรงกับสูตรดั้งเดิม นี่คือจุดที่ดีบักเกอร์มีประโยชน์ :) - person Reimeus; 28.10.2013