Nyckelord: Leibniz formel, Loopar, Pi

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.1395926556Sex decimaler: 3.141593Antal termer: 1181461