Adloun

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.