-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapprox_pi.py
37 lines (30 loc) · 1.27 KB
/
approx_pi.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import os
import ctypes
from RationnelMod import RationnelMod
def approx_pi(n):
"""
Donne la valeur approximée de pi au bout de n itérations d'après la formule: pi = 4 * ( ((-1)^n) / (2n + 1))
ARGUMENTS
n (int): nombre d'itérations sohuaité
RENVOIE
RationnelMod: La valeur approximée de pi au bout de n itérations sous forme de rationnel
"""
somme = RationnelMod(0)
for i in range(n+1):
# on additionne chaque terme d'après la formule
terme = RationnelMod((-1) ** i, 2 * i + 1)
somme += terme
return somme * RationnelMod(4)
"""
ATTENTION:
BON A SAVOIR: comme pas de limite de récursion (en théorie) peut potentiellement causer
un peu de lag/utiliser toute la RAM.
testé sans soucis jusqu'a 20000.
"""
if __name__ == "__main__":
n = 1000
approximation_pi = approx_pi(n)
# N.B. ce print marche pour peu d'itérations (e.g. 1000) mais va causer une erreur car trop de chiffres au bout d'un certain n. Le deuxième print est donc favorable
print(f"Approximation de pi avec {n} itérations: {approximation_pi}") # sous forme de fraction
# pour un résultat plus lisible par un humain
print(f"\r\n\r\n\r\nApproximation de pi avec {n} itérations: {approximation_pi.num / approximation_pi.den}")