D’où ma question initiale. Je trouve ce problème plus intéressant.
Par contre, 6,5 en base 10 n’est pas égal à 110,101 en base 2.
$110,101_2$ vaut $2^2 + 2^1 + 2^{-1} + 2^{-3}$ soit 6,625.
Alors que 6,5 est égal à $2^2 + 2^1 + 2^{-1}$, donc $110,1$.
Tu noteras aussi que tous les nombres décimaux n’ont pas un développement fini en base 2, tu ne pourras donc pas tous les représenter exactement.
Mais comme cette limitation est généralisée aux capacités de la machine, ton float est de toute manière déjà arrondi, donc aucun problème de ton côté (tu risques juste d’être surpris par le nombre de « décimales » pour un nombre comme 0,1).
Au passage, je viens de repenser à la méthode de classe from_bytes
du type int
qui permet de simplifier un peu le code fourni par nohar.
| >>> f"{int.from_bytes(struct.pack('>f', 42.42), 'big'):032b}"
'01000010001010011010111000010100'
|
Je te conseille de repartir de ce from_bytes
pour ton problème, il te sera plus facile d’identifier la mantisse et l’exposant (par masques binaires et décalages de bits), et donc de représenter le nombre comme tu le souhaites.