Adloun

Écrire developpement binaire(x, n) rendant les n premiers bits après…

Exercice d'entraînement · niveau 2 · NSI (première), chapitre 2 — Flottants, booléens et textes · Automatiser le développement binaire

Énoncé

Écrire developpement_binaire(x, n) rendant les premiers bits après la virgule de . L'appliquer à , et avec , et commenter la troisième sortie.

Corrigé


def developpement_binaire(x, n):
    """Les n premiers bits apres la virgule de x.

    Precondition : 0 <= x < 1. A chaque tour on multiplie par deux et
    on prend la partie entiere, exactement comme a la main.
    """
    assert 0.0 <= x < 1.0, "x doit appartenir a [0, 1["
    bits = ""
    for _ in range(n):
        x = x * 2
        if x >= 1:
            bits, x = bits + "1", x - 1
        else:
            bits = bits + "0"
    return bits

>>> developpement_binaire(0.1, 16)
'0001100110011001'
>>> developpement_binaire(0.25, 16)
'0100000000000000'
>>> developpement_binaire(1 / 3, 16)
'0101010101010101'

: on lit un puis la période 0011 répétée — le cours l'annonçait. : un seul puis des zéros, l'écriture est finie et la fonction n'a simplement plus rien à rendre. : la période 01, conforme au calcul à la main du cours.

La subtilité : pour la fonction ne travaille pas sur mais sur le flottant le plus proche. Les bits rendus sont donc ceux de ce flottant. Ils coïncident avec ceux de tant que environ ; au-delà, la fonction rend les zéros de la mantisse, pas la période mathématique. Un programme sur des flottants ne calcule jamais sur le nombre qu'on croit lui donner.

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.