Sur un exemple:
\(123,456 = 1 \times 10^2 + 2 \times 10^1 + 3 \times 10^0 + 4 \times \dfrac{1}{10^1} + 5 \times \dfrac{1}{10^2} + 6 \times \dfrac{1}{10^3}\)
\(123,456 = 1 \times 10^2 + 2 \times 10^1 + 3 \times 10^0 + 4 \times 10^{-1} + 5 \times 10^{-2} + 6 \times 10^{-3}\)
Comment retrouver les digits dans cette écriture par le calcul ? Facile !
On procède comme précédemment.
Exemple:
Écrire en base 2 le nombre décimal \(13,375\).
Exemple:
Écrire en base 10 le binaire \(\texttt{101,01}_2\).
Reprenons le premier exemple:
\(123,456 = \dfrac{123456}{1000} = 123 + \dfrac{456}{1000} = 123 + 0,456\)
Exemple:
Écrire en base 2 le nombre décimal \(13,375\).
Exemple:
Écrire en base 10 le binaire \(\texttt{101,01}_2\).
a) Écrire en base décimale \(\texttt{1000,1}\).
b) Obtenir l’écriture binaire des nombres suivants:
i) \(-7,6875\)
ii) \(0,1\)
iii) \(0,2\)
iv) \(0,3\)
v) \(\dfrac{9}{5}\)
f) \(\dfrac{1}{3}\)
À RETENIR: \(0,1 + 0,2 \neq 0,3\) avec leurs représentations sous forme de
flottants en raison des arrondis.
Les égalités avec des nombres réels ne sont pas toujours convervées lors du
passage aux flottants/floats
.
Elle est définie par la norme IEEE-754 dans toutes les machines.
Pour commencer, en binaire, tout nombre peut se ramener à une écriture de la forme \(\pm \texttt{a} \times \texttt{10}^p\) où \(1 \leqslant a < 2 \) (autrement dit \(\texttt{a} \approx \texttt{1,…}\)) et \(p\) est un entier signé. Rappelez vous que \(\texttt{10}_2 = 2_{10}\).
Vous aurez peut être fait le rapprochement avec l’écriture scientifique (\(\pm a \times 10^p\) avec \(1 \leqslant a < 10\)).
Exemple: en binaire, \(\texttt{101,01} = + \texttt{1,0101} \times \texttt{10}^2\).
Par conséquent, dans la machine, il ne reste plus qu' à stocker:
le signe: un bit est nécessaire,
l'exposant \(p\) (quelque peu transformé pour des soucis de comparaison des flottants) : quelques bits réservés (leur nombre diffère suivant le processeur, donc impossible de représenter tous les nombres),
le nombre \(\texttt{a}\) enfin seulement la partie à droite de la virgule puisque on l’est assuré d’avoir un \(texttt{1}\) à gauche de la virgule (la partie conservée s’appelle la mantisse): quelques bits réservés (leur nombre diffère suivant le processeur, donc impossible de représenter tous les nombres et nécessité d’arrondir si besoin).
À titre d’exemple, sur une configuration possédant un processeur de 64 bits La norme impose alors 1 bit pour le signe, 11 bits pour l'exposant transformé et les 52 bits restants pour la mantisse):
\(0,1 = +\texttt{0,0001 1001 1001 1001 1… }_2 = +\texttt{1,1001 1001 1001 … }_2 \times \texttt{10}_2 ^{-4}\).
Comme le 53ème bit est un \(\texttt{1}\), en arrondissant de sorte de garder 52 bits, on a \(0,1 \approx +\texttt{1,1001 1001 1001 … 1001 1010}_2 \times \texttt{10}_2 ^{-4}\) puisque \(\texttt{1001}_2 + \texttt{1}_2 = \texttt{1010}_2\).
Finalement,
le signe \(+\) est mémorisé avec le bit 0
.
l’exposant mémorisé est \(-4+1023 = 1019 = \texttt{011 1111 1011}\).
la mantisse est \(\texttt{1001 1001 1001 … 1001 1010}\).
Le nombre \(0,1\) est représenté sous la forme de flottant par \(\fbox{\(\texttt{0}\)} \fbox{\(\texttt{011 1111 1011}\)} \fbox{\(\texttt{1001 1001 1001 … 1001 1010}\)}\).