TP flottants
Le but de ce TP est d’expliquer en détail le résultat du calcul de 0.1 + 0.2 - 0.3 dans
python.
1. Taper 0.1 + 0.2 - 0.3 dans le shell de python.
On rappelle que, par définition, <0, x1x2... >b=x1b1+x2b2+...
2. Convertir (à la main) en base 10 le flottant <0,000110011001100... >2(où 1100 se répète
infiniment).
On rappelle que la notation scientifique en base 2 d’un nombre revient à l’écrire sous la forme
<1, x1x2... >2×2eeest un entier relatif appelé exposant et x1x2... mantisse.
Par exemple, 0,625 =<0,101 >2donc la notation scientifique en base 2 de 0,625 est :
<1,01 >2×21
3. Donner la notation scientifique en base 2 de 0,1.
Python stocke les flottants sur 64 bits, en utilisant la notation scientifique :
1 bit pour le signe (0 si 0, 1 sinon).
11 bits pour l’exposant : de 210 + 1 = 1023 à210 = 1024.
52 bits (chiffres significatifs) pour l’écriture en base 2 de la mantisse : de 1,00...00
| {z }
52
à
1,11...11
| {z }
52
.
On ne se préoccupera pas de la représentation utilisée pour l’exposant.
Si on essaie de stocker un flottant avec plus de 52 chiffres après la virgule en notation scientifique
en base 2, le résultat est arrondi à 52 chiffres significatifs (si le 53ème chiffre est un 1, on arrondi
au supérieur, sinon à l’inférieur).
4. Comment 0.1 est stocké en python ?
5. En déduire comment 0.2 est stocké en python.
(remarque : si on tape 0.1 ou 0.2 dans le shell de Pyzo, on ne retrouve pas les résultats
précédents. Ceci est dû au fait que python n’affiche pas la valeur stockée mais seulement une
approximation, pour qu’elle soit plus « lisible »)
Pour additionner deux flottants xy, python décale les bits de la notation scientifique de
xafin d’avoir le même exposant dans l’écriture de xet de y, en supprimant les éventuels bits
dépassant les 52 bits de la mantisse.
Ensuite, python additionne ces deux nombres (en posant l’addition comme au CP).
Par exemple, pour additionner <1,1>2×26et <1,1101 >2×24, python écrit <1,1>2
×26=<0,0110 >2×24pour « mettre au même exposant » :
1
<0,0110 >2×24
+<1,1101 >2×24
=<10,0011 >2×24
Ce dernier résultat étant finalement mis sous la forme scientifique : <1,00011 >2×23, en
arrondissant le résultat si besoin.
6. Calculer le résultat de 0.1 + 0.2 en python.
7. Trouver comment 0.3 est stocké en python.
8. Retrouver le résultat de 0.1 + 0.2 - 0.3 affiché par python.
Il est possible de faire des calculs exacts en python sur des rationnels (ce que l’on appelle
calcul formel) en utilisant le module sympy.
Après avoir importé sympy 1, en écrivant par exemple from sympy import *, on peut définir un
rationnel p
qen écrivant Rational(p, q).
9. Quel est le résultat de Rational(1, 10) +Rational(2, 10) -Rational(3, 10) ?
10. Si vous avez fini, vous pouvez vous rendre sur http://docs.sympy.org/latest/tutorial/intro.html
et comprendre comment calculer des dérivées, limites, intégrales... en utilisant sympy.
1. Si sympy n’existe pas sur votre PC, vous pouvez aller sur http://live.sympy.org/
2
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !