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 π