Une somme géométrique : la boucle et la formule
Exercice d'entraînement · niveau 2 · mathématiques appliquées (ECG 1re année), chapitre 4 — Suites de nombres réels · Suites en Python
Énoncé
Écrire une fonction Python somme_boucle(q, n) qui calcule par une boucle, puis somme_formule(q, n) qui utilise la formule du cours. Comparer les deux pour et . Que se passe-t-il pour , et pourquoi ?
Corrigé
Les deux fonctions.
def somme_boucle(q, n):
s = 0.0
t = 1.0 # t vaut q**k au tour numero k
for _ in range(n + 1):
s = s + t
t = t * q
return s
def somme_formule(q, n):
return (1 - q ** (n + 1)) / (1 - q)
La boucle tourne fois — autant que de termes, d'indices à — et fait une addition et une multiplication par tour. La formule, elle, ne demande qu'une puissance et une division.
La comparaison. Pour et , les deux fonctions renvoient des valeurs qui diffèrent d'environ selon la machine. La raison est que les nombres flottants ne représentent pas exactement : les vingt additions successives accumulent de minuscules erreurs d'arrondi, que la formule ne fait pas. Les deux résultats sont justes ; c'est l'égalité stricte entre eux qui ne l'est pas — on ne compare jamais deux flottants avec ==, mais on teste abs(a - b) < 1e-12.
Le cas . La formule divise par : Python lève une ZeroDivisionError. C'est cohérent avec le cours, qui suppose .
La boucle, elle, renvoie — et c'est la bonne réponse, puisque est une somme de termes égaux à . Le programme le plus lent est ici le plus fiable : il n'a fait aucune hypothèse.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.