CALCUL DES DÉCIMALES DE π - La nuit c`est fait pour dormir

Transcription

CALCUL DES DÉCIMALES DE π - La nuit c`est fait pour dormir
CALCUL DES DÉCIMALES DE π
Durée : 40 minutes
On se propose dans cet exercice d'écrire un programme calculant un nombre arbitraire de décimales de
π. Nous utiliserons la librairie des nombres décimaux, en xant par exemple un peu plus de mille chires
signicatifs :
from decimal import Decimal , getcontext
getcontext (). prec = 1010
On peut alors calculer avec les opérations habituelles et les opérateurs de comparaison, à condition de
remplacer les nombres ordinaires 1, 17 ou 3.108927 par leurs équivalents décimaux Decimal(1), Decimal(17)
et Decimal("3.108927"). Attention aux guillemets pour les nombres à virgule.
In [1] : Decimal (355) / Decimal (113)
Out [1] : Decimal ("3.141592920353982300884955752212389380530973451327433628
31858407079646017699115044247787610619469026548672566371681415929203539823
00884955752212389380530973451327433628318584070796460176991150442477876106
19469026548672566371681415929203539823008849557522123893805309734513274336
28318584070796460176991150442477876106194690265486725663716814159292035398
23008849557522123893805309734513274336283185840707964601769911504424778761
06194690265486725663716814159292035398230088495575221238938053097345132743
36283185840707964601769911504424778761061946902654867256637168141592920353
98230088495575221238938053097345132743362831858407079646017699115044247787
61061946902654867256637168141592920353982300884955752212389380530973451327
43362831858407079646017699115044247787610619469026548672566371681415929203
53982300884955752212389380530973451327433628318584070796460176991150442477
87610619469026548672566371681415929203539823008849557522123893805309734513
2743362831858407079646017699115044247787610619469026548672566371681")
On utilisera la formule suivante, valable quand |x| 1 :
arctanpxq p1qk x2k
¸
n 1
2k
k 0
et on admet que l'erreur commise est inférieure à
QUESTION 2.1 s1 ; 1r
Écrire un programme
et un entier naturel
n
,
x2n 1
.
2n 1
SommeArctan(x, n)
x
P
calcul des décimales de
π
qui étant donnés un nombre décimal
calcule la somme
p1qk x2k
¸
n 1
k 0
ng Lycée Saint Louis
1
1
2k
1
1
1
.
QUESTION 2.2 maux
x P s1 ; 1r
et
ε
QUESTION 2.3 détermine le plus
Déduire des questions précédentes un programme
nés deux nombres décimaux
valeur approchée de
Trouver_n(x, epsilon) qui
x2n 1
petit entier n tel que
¤ ε.
2n 1
Écrire un programme
P s1 ; 1r
x
arctanpxq
à
ε
ε
et
étant donnés deux nombres déci-
Arctan(x, epsilon)
qui étant don-
calcule et renvoie, sous la forme d'un nombre décimal, une
près.
Nous allons maintenant utiliser la formule de John Machin (1706) :
π 16 arctan
1
5
4 arctan
1
239
.
Nous admettrons que cette formule est juste.
QUESTION 2.4 valeur approchée de
π
Écrire un programme
à
ε
Pi(epsilon)
qui étant donné un nombre décimal
ε
renvoie une
près.
In [2] : epsilon = Decimal (10) ** Decimal ( -1000)
In [3] : Pi ( epsilon )
Out [3] : Decimal ("3.141592653589793238462643383279502884197169399375105820
97494459230781640628620899862803482534211706798214808651328230664709384460
95505822317253594081284811174502841027019385211055596446229489549303819644
28810975665933446128475648233786783165271201909145648566923460348610454326
64821339360726024914127372458700660631558817488152092096282925409171536436
78925903600113305305488204665213841469519415116094330572703657595919530921
86117381932611793105118548074462379962749567351885752724891227938183011949
12983367336244065664308602139494639522473719070217986094370277053921717629
31767523846748184676694051320005681271452635608277857713427577896091736371
78721468440901224953430146549585371050792279689258923542019956112129021960
86403441815981362977477130996051870721134999999837297804995105973173281609
63185950244594553469083026425223082533446850352619311881710100031378387528
86587533208381420617177669147303598253490428755468731159562863882353787593
7519577818577805321712268066130019278766111959092164201989221488470")
ng Lycée Saint Louis
2
calcul des décimales de
π
solution
QUESTION 2.1 Dans cette question on s'eorce de ne pas calculer les puissances à chaque étape,
en tenant à jour une variable qu'on multiplie par ce qu'il faut à chaque étape. Le nom de la variable est
l'acronyme de x puissance 2n 1 .
def SommeArctan (x , n) :
S = Decimal (0)
xp2np1 = x
for k in range (n ) :
if k % 2 == 0 :
S += xp2np1 / Decimal (2* k + 1)
else :
S -= xp2np1 / Decimal (2* k + 1)
xp2np1 *= x **2
return S
QUESTION 2.2 Même idée.
def Seuil (x , epsilon ) :
xp2np1 = x
n = 0
while xp2np1 / Decimal (2* n + 1) > epsilon :
xp2np1 *= x **2
n += 1
return n
QUESTION 2.3 Cette question est immédiate : il faut mettre bout à bout les deux programmes
précédents. En mathématique on dirait qu'on les compose .
def Arctan (x , epsilon ) :
return SommeArctan (x , Seuil (x , epsilon ))
QUESTION 2.4 Cette question a été la moins bien réussie : seuls quatre élèves ont vu la subtilité.
On veut que l'erreur globale soit majorée par ε. Si on calcule les deux arc tangentes avec une précision ε,
on a une erreur globale de 16ε 4ε à la n. Il faut donc calculer la première, qui sera multipliée par 16, à
la précision ε{32, et la deuxième à la précision ε{8 (par exemple), ce qui donnera une erreur totale au plus
égale à
16 ε
32
4
ε
8
2ε
ε
2
ε.
Si l'on voulait vraiment optimiser, on aurait même intérêt à concentrer l'erreur sur la première, qui va
demander le plus de calculs, mais bon.
def Pi ( epsilon ) :
A = Decimal (1) / Decimal (5)
B = Decimal (1) / Decimal (239)
return 16* Arctan (A , epsilon /32) - 4* Arctan (B , epsilon /8)
ng Lycée Saint Louis
3
calcul des décimales de
π