Leibniz serie ger en approximation av π:
π / 4 = 1 − 1/3 + 1/5 − 1/7 + …
Uppgift A
Beräkna π med de 500 första termerna och skriv ut resultatet med tio decimaler. Antalet utskrivna decimaler är inte samma sak som approximationens noggrannhet.
Uppgift B
Hur många termer behövs första gången resultatet avrundas till samma sex decimaler som math.pi, alltså 3.141593? Använd round(approximation, 6) för just detta stoppvillkor.
Ledtråd
Term nummer n, räknat från n = 0, är (−1) ** n / (2 * n + 1). Summera termerna och multiplicera summan med fyra.
Lösning
import math
def leibniz(terms):
total = 0.0
sign = 1
for n in range(terms):
total += sign / (2 * n + 1)
sign = -sign
return 4 * total
def first_matching_terms():
total = 0.0
sign = 1
terms = 0
target = round(math.pi, 6)
while True:
total += sign / (2 * terms + 1)
sign = -sign
terms += 1
if round(4 * total, 6) == target:
return terms, 4 * total
if __name__ == "__main__":
print(f"{leibniz(500):.10f}")
terms, approximation = first_matching_terms()
print(f"{approximation:.6f}")
print(terms)3.1395926556
3.141593
1181461Serien konvergerar långsamt och växlar kring π. Stoppvillkoret betyder att detta är den första matchningen vid avrundning; det garanterar inte att varje efterföljande delsumma avrundas likadant. Antalet kan påverkas av flyttalsavrundning nära en avrundningsgräns.