ÖVNINGSUPPGIFT

Uppgift 4 – Leibniz formel

Försök själv först. Ledtrådar och facit finns längre ner – helt utan inloggning.


Nyckelord: Leibniz formel, Loopar, Pi

data i molnet

Leibniz formel i Java

Enligt Gottfried Leibniz formel kan man räkna ut värdet på Pi med följande samband:

Pi/4 = 1-(1/3)+(1/5)-(1/7) … osv

Uppgift a

Använd de 500 första termerna på Leibniz formel för att beräkna värdet på Pi. Vad blir svaret? Svara med 10 decimalers noggrannhet. Utgå från följande program:

public class LooparUppgift3 {
    public static void main(String[] args) {
        // Skriv din kod här
    }
}

Uppgift b

π avrundat till sex decimaler är 3.141593. Hur många termer behövs för att delsumman ska avrundas till samma sex decimaler?

Ledtråd a

Använd sambandet

term = t/(1+2*n);
sum = sum + term;
t = -t;

för att räkna ut en term i Leibniz formel där variablerna initieras till:

double t = 1;
double sum = 0;
double term;
Ledtråd b

Jämför avrundade värden för att kontrollera att samma sex decimaler skrivs ut. Ett absolut fel under 10⁻⁶ garanterar inte samma avrundning.

double target = Math.PI;
long scale = 1_000_000L;
// Jämför avrundning till sex decimaler, inte bara absolut fel.

där variabeln diff är absolutbeloppet av felet i varje iteration.

Lösning
public class LooparUppgift4 {
    public static void main(String[] args) {
        double sum = 0;
        for (int n = 0; n < 500; n++) {
            sum += (n % 2 == 0 ? 1.0 : -1.0) / (2.0 * n + 1);
        }
        System.out.printf(java.util.Locale.ROOT, "500 termer: %.10f%n", 4 * sum);
        sum = 0;
        long terms = 0;
        long scale = 1_000_000L;
        do {
            sum += (terms % 2 == 0 ? 1.0 : -1.0) / (2.0 * terms + 1);
            terms++;
        } while (Math.round(4 * sum * scale) != Math.round(Math.PI * scale));
        System.out.printf(java.util.Locale.ROOT, "Sex decimaler: %.6f%n", 4 * sum);
        System.out.println("Antal termer: " + terms);
    }
}

Vilket ger utskriften:

500 termer: 3.1395926556
Sex decimaler: 3.141593
Antal termer: 1181461