Rationella tal och beräkning av π

Denna övning ber dig fixa fel i en klass för rationella tal och sedan använda den klassen för att beräkna ett närmevärde för π.

Magnus Myreen, september 2016.

Filer

Du får två filer:

Kör programmet med att köra main i Main.java.

Uppgift 1

När man kör testprogrammet så ser man att alla test inte fungerar. Var för fungerar inte testen?

Din uppgift är att fixa klassen Rational.java.

Tips: det går att fixa det med att använda BigInteger istället för den primitiva typen int.

Uppgift 2

Din uppgift är att skriva ett program som räknar ett närmevärde för π med hjälp av Rational klassen.

Beräkningen av närmevärdet kan göras på följande sätt. För att räkna ett närmevaräde som fungerar för 4 decimaler av π, kan du räkna fyra rader av följande oändliga summa.

1/1 * ( 4/(8*0+1) - 2/(8*0+4) - 1/(8*0+5) - 1/(8*0+6) ) +
1/16 * ( 4/(8*1+1) - 2/(8*1+4) - 1/(8*1+5) - 1/(8*1+6) ) +
1/(16*16) * ( 4/(8*2+1) - 2/(8*2+4) - 1/(8*2+5) - 1/(8*2+6) ) +
1/(16*16*16) * ( 4/(8*3+1) - 2/(8*3+4) - 1/(8*3+5) - 1/(8*3+6) ) +
...

För 5 decimlar räknar man 5 rader, för 6 decimalter 6 rader osv.

Rational klassen har en metod som kan användas för utskrifter till String. Exempel: följande kod

Rational r = new Rational(2,3);
r = r.multiply(new Rational(1000,1));
System.out.println("0." + r.floorIntegerAsString());

skriver ut: 0.666