Représentation des flottants Informatique pour tous

publicité
Représentation des flottants
Informatique pour tous
Informatique pour tous
Représentation des flottants
Représentations pour les différents types de nombres
La plupart des langages de programmation représentent :
1
Les entiers positifs par leur écriture en base 2.
2
Les entiers relatifs par leur codage par complément à 2.
3
Les flottants par la norme IEEE-754.
Informatique pour tous
Représentation des flottants
Représentations pour les différents types de nombres
La plupart des langages de programmation représentent :
1
Les entiers positifs par leur écriture en base 2.
2
Les entiers relatifs par leur codage par complément à 2.
3
Les flottants par la norme IEEE-754.
Le module de calcul scientifique numpy permet de spécifier comment
on veut représenter un nombre.
Informatique pour tous
Représentation des flottants
Entiers positifs
Avec p bits, on peut représenter tous les entiers positifs de :
< 00...00
| {z } >2
p
Informatique pour tous
à
< 11...11
| {z } >2 =
p
Représentation des flottants
Entiers positifs
Avec p bits, on peut représenter tous les entiers positifs de :
< 00...00
| {z } >2
p
à
p
< 11...11
| {z } >2 = 2 − 1
p
Dans numpy, les nombres positifs sont de type uint (unsigned int),
suivi du nombre de bits p utilisé :
Informatique pour tous
Représentation des flottants
Entiers positifs
C’est un dépassement d’entier qui a causé le crash d’Ariane 5 !
Informatique pour tous
Représentation des flottants
Entiers relatifs
Le codage par complément à 2 (sur p bits) représente tous les
entiers n ∈ {−2p−1 , ..., 2p−1 − 1} :
1
Si n ≥ 0, on représente n par son écriture en base 2.
2
Si n < 0, on représente n par l’écriture en base 2 de n + 2p ≥ 0.
0 0 0 ... 0 0 0 représente :
Informatique pour tous
Représentation des flottants
Entiers relatifs
Le codage par complément à 2 (sur p bits) représente tous les
entiers n ∈ {−2p−1 , ..., 2p−1 − 1} :
1
Si n ≥ 0, on représente n par son écriture en base 2.
2
Si n < 0, on représente n par l’écriture en base 2 de n + 2p ≥ 0.
0 0 0 ... 0 0 0 représente : 0
0 1 1 ... 1 1 1 représente :
Informatique pour tous
Représentation des flottants
Entiers relatifs
Le codage par complément à 2 (sur p bits) représente tous les
entiers n ∈ {−2p−1 , ..., 2p−1 − 1} :
1
Si n ≥ 0, on représente n par son écriture en base 2.
2
Si n < 0, on représente n par l’écriture en base 2 de n + 2p ≥ 0.
0 0 0 ... 0 0 0 représente : 0
0 1 1 ... 1 1 1 représente : 2p−1 − 1
1 0 0 ... 0 0 0 représente :
Informatique pour tous
Représentation des flottants
Entiers relatifs
Le codage par complément à 2 (sur p bits) représente tous les
entiers n ∈ {−2p−1 , ..., 2p−1 − 1} :
1
Si n ≥ 0, on représente n par son écriture en base 2.
2
Si n < 0, on représente n par l’écriture en base 2 de n + 2p ≥ 0.
0
0
1
car
1
0 0 ... 0
1 1 ... 1
0 0 ... 0
< −2p−1 + 2p
0 0 ... 0
0 0
1 1
0 0
>2 =
0 1
Informatique pour tous
représente : 0
représente : 2p−1 − 1
représente : −2p−1 ,
< 2p−1 (−1 + 2) >2 = < 2p−1 >2
représente :
Représentation des flottants
Entiers relatifs
Le codage par complément à 2 (sur p bits) représente tous les
entiers n ∈ {−2p−1 , ..., 2p−1 − 1} :
1
Si n ≥ 0, on représente n par son écriture en base 2.
2
Si n < 0, on représente n par l’écriture en base 2 de n + 2p ≥ 0.
0
0
1
car
1
1
0 0 ... 0
1 1 ... 1
0 0 ... 0
< −2p−1 + 2p
0 0 ... 0
1 1 ... 1
0 0
1 1
0 0
>2 =
0 1
1 1
Informatique pour tous
représente : 0
représente : 2p−1 − 1
représente : −2p−1 ,
< 2p−1 (−1 + 2) >2 = < 2p−1 >2
représente : −2p−1 + 1
représente :
Représentation des flottants
Entiers relatifs
Le codage par complément à 2 (sur p bits) représente tous les
entiers n ∈ {−2p−1 , ..., 2p−1 − 1} :
1
Si n ≥ 0, on représente n par son écriture en base 2.
2
Si n < 0, on représente n par l’écriture en base 2 de n + 2p ≥ 0.
0
0
1
car
1
1
0 0 ... 0
1 1 ... 1
0 0 ... 0
< −2p−1 + 2p
0 0 ... 0
1 1 ... 1
0 0
1 1
0 0
>2 =
0 1
1 1
Informatique pour tous
représente : 0
représente : 2p−1 − 1
représente : −2p−1 ,
< 2p−1 (−1 + 2) >2 = < 2p−1 >2
représente : −2p−1 + 1
représente : −1
Représentation des flottants
Entiers relatifs
0
0
1
1
1
0
1
0
0
1
0
1
0
0
1
...
...
...
...
...
0
1
0
0
1
0
1
0
0
1
Informatique pour tous
0
1
0
1
1
représente
représente
représente
représente
représente
:
:
:
:
:
0
2p−1 − 1
−2p−1
−2p−1 + 1
−1
Représentation des flottants
Entiers relatifs
Le type int classique de python utilise une représentation par
complément à 2 sur 64 bits mais s’agrandit automatiquement si la
taille de l’entier dépasse 263 − 1.
Il n’y a donc pas de limite de taille des int de python.
Informatique pour tous
Représentation des flottants
Entiers relatifs
Le type int classique de python utilise une représentation par
complément à 2 sur 64 bits mais s’agrandit automatiquement si la
taille de l’entier dépasse 263 − 1.
Il n’y a donc pas de limite de taille des int de python.
En caml (option info), les entiers utilisent une représentation par
complément à 2 sur 64 bits, qui ne se redimensionnent pas.
Informatique pour tous
Représentation des flottants
Flottants
Question
Comment représenter les nombres à virgules ?
Informatique pour tous
Représentation des flottants
Flottants
Question
Comment représenter les nombres à virgules ?
Par définition, 0,1415 = 1 × 10−1 + 4 × 10−2 + 1 × 10−3 + 5 × 10−4 .
Informatique pour tous
Représentation des flottants
Flottants
Question
Comment représenter les nombres à virgules ?
Par définition, 0,1415 = 1 × 10−1 + 4 × 10−2 + 1 × 10−3 + 5 × 10−4 .
Définition : développement en base b
< 0, x−1 x−2 ... >b = x−1 × b −1 + x−2 × b −2 + ....
Informatique pour tous
Représentation des flottants
Flottants
Question
Comment représenter les nombres à virgules ?
Par définition, 0,1415 = 1 × 10−1 + 4 × 10−2 + 1 × 10−3 + 5 × 10−4 .
Définition : développement en base b
< 0, x−1 x−2 ... >b = x−1 × b −1 + x−2 × b −2 + ....
Exemple : < 0, 101 >2 =
Informatique pour tous
Représentation des flottants
Flottants
Question
Comment représenter les nombres à virgules ?
Par définition, 0,1415 = 1 × 10−1 + 4 × 10−2 + 1 × 10−3 + 5 × 10−4 .
Définition : développement en base b
< 0, x−1 x−2 ... >b = x−1 × b −1 + x−2 × b −2 + ....
Exemple : < 0, 101 >2 =
Informatique pour tous
1
2
+
1
23
= 0, 625 (= < 0, 625 >10 )
Représentation des flottants
Flottants
Question
Comment représenter les nombres à virgules ?
Par définition, 0,1415 = 1 × 10−1 + 4 × 10−2 + 1 × 10−3 + 5 × 10−4 .
Définition : développement en base b
< 0, x−1 x−2 ... >b = x−1 × b −1 + x−2 × b −2 + ....
Exemple : < 0, 101 >2 =
1
2
+
1
23
= 0, 625 (= < 0, 625 >10 )
< 1, 01010101... >2 =
Informatique pour tous
Représentation des flottants
Flottants
Question
Comment représenter les nombres à virgules ?
Par définition, 0,1415 = 1 × 10−1 + 4 × 10−2 + 1 × 10−3 + 5 × 10−4 .
Définition : développement en base b
< 0, x−1 x−2 ... >b = x−1 × b −1 + x−2 × b −2 + ....
1
2
+
1
23
= 0, 625 (= < 0, 625 >10 )
< 1, 01010101... >2 = 1 +
1
22
+
1
24
Exemple : < 0, 101 >2 =
Informatique pour tous
+
1
26
... =
1
40
+
1
4
+
1
42
+
Représentation des flottants
1
43
...=
Flottants
Question
Comment représenter les nombres à virgules ?
Par définition, 0,1415 = 1 × 10−1 + 4 × 10−2 + 1 × 10−3 + 5 × 10−4 .
Définition : développement en base b
< 0, x−1 x−2 ... >b = x−1 × b −1 + x−2 × b −2 + ....
1
2
+
1
23
= 0, 625 (= < 0, 625 >10 )
< 1, 01010101... >2 = 1 +
1
= 43 .
1− 1
1
22
+
1
24
Exemple : < 0, 101 >2 =
+
1
26
... =
1
40
+
1
4
+
1
42
+
4
Informatique pour tous
Représentation des flottants
1
43
...=
Flottants
Question
Comment passer d’un développement de 0 < x < 1 en base 10 à un
développement dans une autre base b ?
On veut écrire x sous la forme x =< 0, x−1 x−2 x−3 ... >b .
Informatique pour tous
Représentation des flottants
Flottants
Question
Comment passer d’un développement de 0 < x < 1 en base 10 à un
développement dans une autre base b ?
On veut écrire x sous la forme x =< 0, x−1 x−2 x−3 ... >b .
1
x×b =
Informatique pour tous
Représentation des flottants
Flottants
Question
Comment passer d’un développement de 0 < x < 1 en base 10 à un
développement dans une autre base b ?
On veut écrire x sous la forme x =< 0, x−1 x−2 x−3 ... >b .
1
x × b = < x−1 , x−2 x−3 ... >b , donc x−1 =
Informatique pour tous
Représentation des flottants
Flottants
Question
Comment passer d’un développement de 0 < x < 1 en base 10 à un
développement dans une autre base b ?
On veut écrire x sous la forme x =< 0, x−1 x−2 x−3 ... >b .
1
x × b = < x−1 , x−2 x−3 ... >b , donc x−1 = bx × bc.
2
Pour trouver x−2 , on refait la même chose sur x × b − x−1 =
< 0, x−2 x−3 ... >b .
3
...
Informatique pour tous
Représentation des flottants
Flottants
Question
Comment passer d’un développement de 0 < x < 1 en base 10 à un
développement dans une autre base b ?
On veut écrire x sous la forme x =< 0, x−1 x−2 x−3 ... >b .
1
x × b = < x−1 , x−2 x−3 ... >b , donc x−1 = bx × bc.
2
Pour trouver x−2 , on refait la même chose sur x × b − x−1 =
< 0, x−2 x−3 ... >b .
3
...
Exemples : 0,625 = < 0, ? >2
Informatique pour tous
Représentation des flottants
Flottants
Question
Comment passer d’un développement de 0 < x < 1 en base 10 à un
développement dans une autre base b ?
On veut écrire x sous la forme x =< 0, x−1 x−2 x−3 ... >b .
1
x × b = < x−1 , x−2 x−3 ... >b , donc x−1 = bx × bc.
2
Pour trouver x−2 , on refait la même chose sur x × b − x−1 =
< 0, x−2 x−3 ... >b .
3
...
Exemples : 0,625 = < 0, 1? >2
1
0,625 × 2 = 1, 25
Informatique pour tous
Représentation des flottants
Flottants
Question
Comment passer d’un développement de 0 < x < 1 en base 10 à un
développement dans une autre base b ?
On veut écrire x sous la forme x =< 0, x−1 x−2 x−3 ... >b .
1
x × b = < x−1 , x−2 x−3 ... >b , donc x−1 = bx × bc.
2
Pour trouver x−2 , on refait la même chose sur x × b − x−1 =
< 0, x−2 x−3 ... >b .
3
...
Exemples : 0,625 = < 0, 10? >2
1
0,625 × 2 = 1, 25
2
0, 25 × 2 = 0, 5
Informatique pour tous
Représentation des flottants
Flottants
Question
Comment passer d’un développement de 0 < x < 1 en base 10 à un
développement dans une autre base b ?
On veut écrire x sous la forme x =< 0, x−1 x−2 x−3 ... >b .
1
x × b = < x−1 , x−2 x−3 ... >b , donc x−1 = bx × bc.
2
Pour trouver x−2 , on refait la même chose sur x × b − x−1 =
< 0, x−2 x−3 ... >b .
3
...
Exemples : 0,625 = < 0, 101 >2
1
0,625 × 2 = 1, 25
2
0, 25 × 2 = 0, 5
3
0, 5 × 2 = 1
Informatique pour tous
Représentation des flottants
Flottants
Question
Écrire un algorithme python pour passer d’un développement de
0 < x < 1 en base 10 à la base 2.
Informatique pour tous
Représentation des flottants
Flottants
Question
Écrire un algorithme python pour passer d’un développement de
0 < x < 1 en base 10 à la base 2.
Informatique pour tous
Représentation des flottants
Flottants
Ensuite, pour passer un flottant de la base 10 à la base 2, on convertit
sa partie entière et sa partie fractionnaire.
Informatique pour tous
Représentation des flottants
Flottants
B x peut avoir un développement décimal fini mais infini en base 2 :
0,1 = < 0, 000110011001100110011001100... >2
Informatique pour tous
Représentation des flottants
Flottants
B x peut avoir un développement décimal fini mais infini en base 2 :
0,1 = < 0, 000110011001100110011001100... >2
Comme on ne peut stocker qu’un nombre fini de chiffres sur un PC,
python fait une troncature donc une approximation.
Il ne faut donc jamais tester une égalité entre deux flottants !
Informatique pour tous
Représentation des flottants
Flottants
Il ne faut donc jamais tester une égalité entre deux flottants !
Si x et y sont deux flottants, plutôt qu’écrire :
On écrira :
Informatique pour tous
Représentation des flottants
Flottants
Question
Comment stocker un flottant en mémoire ?
Informatique pour tous
Représentation des flottants
Flottants
Question
Comment stocker un flottant en mémoire ?
On utilise la notation scientifique :
932, 134 = 9, 32134 × 102
< 1001, 011 >2 =
Informatique pour tous
Représentation des flottants
Flottants
Question
Comment stocker un flottant en mémoire ?
On utilise la notation scientifique :
932, 134 = 9, 32134 × 102
23
< 1001, 011 >2 = 1, 001011
| {z } × |{z}
mantisse
Informatique pour tous
2exposant
Représentation des flottants
Norme IEEE-754
Python code les flottants sur 64 bits :
1
1 bit pour le signe (0 si ≥ 0, 1 si < 0)
2
11 bits pour l’exposant : de −210 + 1 = −1023 à 210 = 1024
3
52 bits (chiffres significatifs) pour l’écriture en base 2 de la
mantisse : de 0, 00...00
| {z } à 0, 11...11
| {z }
52
Informatique pour tous
52
Représentation des flottants
Norme IEEE-754
Python code les flottants sur 64 bits :
1
1 bit pour le signe (0 si ≥ 0, 1 si < 0)
2
11 bits pour l’exposant : de −210 + 1 = −1023 à 210 = 1024
3
52 bits (chiffres significatifs) pour l’écriture en base 2 de la
mantisse : de 0, 00...00
| {z } à 0, 11...11
| {z }
52
52
Exemple :
1 0 ... 0 1 1 0 ... 0 1 1 0
représente :
Informatique pour tous
Représentation des flottants
Norme IEEE-754
Python code les flottants sur 64 bits :
1
1 bit pour le signe (0 si ≥ 0, 1 si < 0)
2
11 bits pour l’exposant : de −210 + 1 = −1023 à 210 = 1024
3
52 bits (chiffres significatifs) pour l’écriture en base 2 de la
mantisse : de 0, 00...00
| {z } à 0, 11...11
| {z }
52
52
Exemple :
1 0 ... 0 1 1 0 ... 0 1 1 0
représente : - 1, 6 × 2?
Informatique pour tous
Représentation des flottants
Flottants
B Ainsi, il peut y avoir dépassement de float dans python :
Informatique pour tous
Représentation des flottants
Flottants
B Seul 52 chiffres significatifs sont stockés, on peut avoir des
problèmes d’arrondis :
Informatique pour tous
Représentation des flottants
Flottants
B Seul 52 chiffres significatifs sont stockés, on peut avoir des
problèmes d’arrondis :
Question
Que fait l’algorithme suivant ?
Informatique pour tous
Représentation des flottants
Téléchargement