• Aucun résultat trouvé

1 Les entiers

N/A
N/A
Protected

Academic year: 2022

Partager "1 Les entiers"

Copied!
9
0
0

Texte intégral

(1)

Représentation des nombres

Contents

1 Les entiers 1

1.1 Base 2 . . . 1

1.2 La notation en complément à 2 . . . 2

1.2.1 Le principe . . . 2

1.2.2 Résumons . . . 2

1.2.3 En termes de congruences . . . 2

1.2.4 Concrètement . . . 3

1.2.5 Avantages . . . 3

1.3 Exemple . . . 3

2 Représentation des réels 3 2.1 Principe . . . 3

2.1.1 Le type oat . . . 3

2.1.2 La mantisse . . . 4

2.1.3 L'exposant . . . 4

2.1.4 Ecart entre deux ottants consécutifs . . . 4

2.2 Limitations . . . 4

2.2.1 Le zéro . . . 5

2.2.2 Arrondis . . . 5

2.3 Exemple 1 : 2n±1 . . . 5

2.3.1 253−1. . . 5

2.3.2 254−1. . . 5

2.3.3 253+ 1. . . 5

2.4 Exemple 2 : 43. . . 5

2.5 Exemple 3 : s+ = 2∗ ∗(−n) . . . 6

2.6 Représentation de 0.1 . . . 7

2.6.1 Valeur dee . . . 7

2.6.2 Valeur dem . . . 7

2.6.3 Autre approche . . . 7

2.6.4 Ecart entrexet X . . . 7

2.7 Calcul de0.1 + 0.2 . . . 8

1 Les entiers

1.1 Base 2

Tout entierk∈

0,2N −1s'écrit de manière unique

k=

N−1

X

j=0

aj.2j où lesaj sont dans{0,1}.

(2)

Démonstration Par récurrence surk.

Ecrivons la division euclidienne dekpar2 k= 2.q+r et

k=

N−1

X

j=0

aj.2j Donca0=ret

q=

N−1

X

j=1

aj.2j−1

1.2 La notation en complément à 2

1.2.1 Le principe

On souhaite représenter les entiers de I=

−2N−1,2N−1−1 surN bits en base 2.

On constate qu'il y en a bien2N. Notations

I1=

0,2N−1−1 ,I2=

−2N−1,−1 , I3=

2N−1,2N −1 , I=I1∪I2, Ie=I1∪I3

| −2N−1...−1|0...2N−1−1|2N−1...2N−1|

Les entiers positifs

Les éléments deI1 sont simplement représentés par leur écriture en base 2.

Les entiers négatifs

Sik∈I2, on représentekpar l'écriture en base 2 de2N +k, plutôt que par le signe−et la valeur absolue dek. Les éléments deI2sont donc représentés par des éléments deI3.

Il n'y a pas de confusion possible, car 2N +k∈I3

Il est trop grand pour être confondu avec les éléments deI1=

0,2N−1−1. 1.2.2 Résumons

- Six∈I1, xest représenté par l'écriture en base 2 de xe=x; son premier chire est donc 0.

- Six∈I2,xest représenté par l'écriture en base 2 de ex=x+ 2N, et son premier chire est donc 1.

Dans les deux cas,xest représenté par l'écriture en base deux dexe, qui est le reste de la division dexpar2N :

xe∈

0,2N−1

=Ie 1.2.3 En termes de congruences

x∈Ietx∈Isont deux représentants de la même classe dans /2N ; mais

(3)

1.2.4 Concrètement

Soitk∈I1. Pour calculer la représentation de−kà partir de la représenta- tion dek, on remplace les 0 par des 1 et inversement, et on ajoute 1.

Explication : écrivons

k=

N−1

X

j=0

aj.2j Alors :

−kf = 2N −k= 2N− a0+...+ 2N−1aN−1 Donc :

−kf = 1 + 1 + 2 +...+ 2N−1

− a0+...+ 2N−1aN−1

Donc :

−kf = 1 +

N−1

X

j=0

(1−aj).2j = 1 +

N−1

X

j=0

bj.2j oùbj= 1−aj.

1.2.5 Avantages

Avec cette méthode, 0 admet une unique représention ; l'addition s'eectue de la même manière pour tous les entiers, indépendamment de leur signe ; pourvu qu'on le résultat soit dansI bien sûr.

En eet, modulo2N,x≡xeety≡ye, donc x+y≡ex+ey

1.3 Exemple

N= 8. I= [−128,127]. Représenter 1, 2, 3, 4, 16, 127,

-1, -2, -3, -4, -16, -127, -128.

Réponse

00000001, 00000010,00000011,00000100,00010000,01111111,

11111111, 11111110,11111101,11111100,11110000,10000001,10000000.

2 Représentation des réels

2.1 Principe

2.1.1 Le type oat

En Python, 'oat' ou 'oat64' (double-précision) : les nombres sont représen- tés sur 64 bits ( 8 octets ) ; attention, byte'octet.

- 1 bit pour le signeε - 11 pour l'exposante

- 52 pour la mantissem,1≤m <2 x=ε.m.2e m= 1 +

52

X

k=1

ak 2k On constate que six >0,

e=blog2(x)c

(4)

2.1.2 La mantisse

Le premier chire de m est toujours 1, il n'est donc pas nécessaire de le représenter.

Il y a donc52chires après la virgule dansm. Remarque

La mantissemvaut

m= p 252 oùpest un entier vériant

252≤p≤253−1 2.1.3 L'exposant

−1022≤e≤1023

On le représente par e+ 1023, un peu comme pour la représentation en complément à 2.

1≤e+ 1023≤2046

0 et 2047 sont réservés pour des cas particuliers,0,±∞, N aN, ...

Exemples

Déterminer l'exposantedu oat représentant les nombres

√ 2, π, 1

3, 1 5, 1

10, 3 10 Réponses

0,1,−2,−3,−4,−2 Autres exemples

ln 2, γ,2022, e, c

Réponses

−1,−1,10,1,28 2.1.4 Ecart entre deux ottants consécutifs Ecart absolu :

y−x= 2e−52 Ecart relatif :

2−52

2 ≤y−x x ≤2−52 L'écart relatif varie peu.

2.2 Limitations

On ne peut pas représenter de manière exacte tous les rationnels (sans parler des réels !). Par exemple :

- les nombres trop grands : 2.0**(1024).

- les nombres trop proches de zéro : 2**(-1100) - tous ceux qui n'ont pas une écriture nie en base 2.

- tous ceux qui ont une écriture nie mais trop longue en base 2.

(5)

2.2.1 Le zéro

Si on applique la formule

x=ε.m.2e

le nombre0 n'est pas représenté. On choisit de le représenter par tous les bits nuls ; donc :

m= 1 ete=−1023 2.2.2 Arrondis

Un réel qui n'est pas un oat est représenté par le oat le plus proche.

Concrètement :

- si le premier bit négligé est 1, on arrondit au oat supérieur.

- si le premier bit négligé est 0, on arrondit au oat inférieur.

Cas particulier

Dans le cas où le oat le plus proche n'est pas unique, on choisit alors celui qui se termine par un zéro : le plus 'simple'.

De même, en base 10, pour arrondir1.605à deux chires après la virgule, on choisira

1.6 plutôt que

1.61

2.3 Exemple 1 : 2

n

± 1

2.3.1 253−1 x = 2**(53)-1 y = oat(x) x == y z = int (y) y-xz-x

Réponses ? 2.3.2 254−1

Même question avec

x= 254−1 2.3.3 253+ 1

Même question avec

x= 253+ 1

2.4 Exemple 2 :

43

Calculer le réel suivant écrit en base 2

s= 1,01010101...

(6)

Réponse

s=

X

k=0

1 22k =

X

j=0

1 4j = 4

3

Quel est le oatS qui le représente ?

...010101|010101...

est arrondi en

010101|

donc par défaut.

Donc

S=

26

X

k=0

1 4

k

Ecarts−S ?

s−S=

X

k=27

1 4k =1

3.2−52 Vérication

On souhaite vérier que

3.252(s−S) = 1 soit

254−3.S.252= 1 Pour cela on calcule de manière exacte

2∗ ∗54− 3∗int (S∗2∗ ∗52) Par contre

2∗ ∗54 −3∗(S∗2∗ ∗52) renvoie 0.

En eet la multiplication par 3 nécessite un arrondi.

2.5 Exemple 3 : s + = 2 ∗ ∗(−n)

Que répond le programme suivant ? s, n = 1, 0

while s != 2:

n += 1 s += 1/2**n print(n)

Celui-là ? s, n = 0, 0 while s != 1:

n += 1 s += 1/2**n print(n)

Réponses 53 et 54.

(7)

Explication ?

Dans le deuxième cas, l'exposant e vaut−1.

2.6 Représentation de 0.1

x= 0.1 2.6.1 Valeur dee

e=−4 car

1≤24.x= 1.6<2 2.6.2 Valeur dem

16x= 1,6 = 1 +1 2 +x D'où, en base 2 :

16x= 1,10011001100...

Python ne conserve que 52 chires après la virgule, et arrondit au plus proche :

...0011001|10011...

devient :

...0011010|

xest donc représenté par un nombre strictement plus grand : X. 2.6.3 Autre approche

ms'écrit

m= p 252 avecpentier.

On cherche l'entierpqui minimise

16.x− p 252

=

16 10− p

252

donc, l'entierpqui minimise

256−10.p

Avec ou sans machine, on calcule le resterde la division euclidienne de256 par 10 :

256= 10q+r On trouver= 6.

q < 256

10 =q+ 6

10 < q+ 1 On choisit doncp=q+ 1.

2.6.4 Ecart entrexet X

p=256 10 + 4

10 Donc

X =x+2−54

10 =x+err1

(8)

2.7 Calcul de 0.1 + 0.2

Poury= 0.2 = 2.x:

eY =−3; évidemment,m est le même que pourx. Donc Y =y+2−53

10 =y+err2

Python ne calcule pasx+y, maisZ=X+Y, qui n'est pas un oat, et qui est donc arrondi à son tour à une valeurS.

1

4 < Z <1 2 donc pourZ, l'exposant esteZ =−2. Valeur de S

Les derniers chires des mantisses deX et Y :

X : . . . 1 1 0 0 1 1 0 1 0

Y : . . . 1 0 0 1 1 0 1 0

Z : . . . 0 1 1 0 0 1 1 1

S : . . . 0 1 1 0 1 0 0

exp . . . −54 −55 −56

-Y est obtenu en multipliantX par 2, d'où le décalage.

-Z est obtenu en ajoutantX etY.

-S est obtenu en arrondissantZ au oat immédiatement supérieur ;Z fait partie des cas particuliers où le oat le plus proche n'est pas unique :

S=Z±2−55 Le choix qui est fait est

S=Z+ 2−55=Z+err3

Donc pour Python,0.1 + 0.2vaut0.3 +err, avec un écart err=err1+err2+err3=2−51

10 On peut le vérier avec :

decimal.Decimal(0.1 + 0.2)

(9)

import decimal

# calcule les n premiers chiffres après la virgule

# d'un rationnel p/q en base 2.

def rationnel_binaire(p, q, n):

if q == 0:

return 'division par zéro' p = p % q

b2 = ''

for k in range(n):

p = 2*p

b2 += str(p // q) p = p % q

return b2 S=4/3

test = 2**54 - 3*int(S*2**52) print('test : ', test)

s, n = 1, 0 while s != 2:

n += 1

s += 1 / 2**n print('n : ', n) s, n = 0, 0 while s != 1:

n += 1

s += 1 / 2**n print('n : ', n)

q, r = divmod(2**56, 10) print('q, r : ', q, r) err = 1/(10*2**51) print('err : ', err)

print(decimal.Decimal(0.1 + 0.2))

# calcule les chiffres en base 2 d'un float x

# qu'on suppose tel que 1 <= x < 2

def float_binaire(x):

chiffres = [0 for k in range(53)]

for k in range(53):

c = int(x >= 1) chiffres[k] = c x -= c

x *= 2 return chiffres

1

Références

Documents relatifs

[r]

Partie de la mathématique qui étudie les propriétés et les relations élémentaires sur les ensembles des entiers (naturels et relatifs) et des nombres rationnels.(d’après le

de R 3 , car c’est l’ensemble des solutions d’un syst` eme lin´ eaire homog` ene.. Ce suppl´ ementaire est donc de

[r]

Voyons une illustration du fonctionnement des cônes avec une illusion d’optique colorée Explication : après avoir fixée les zones colorées vertes les cônes capteurs de lumière

On remarque alors que lorsque le prix atteint la valeur de 1000 euros, le nombre d’acheteur est n´ egatif, ce qui n’a pas de sens.. Question ouverte sur les fonctions

Donc Int(A)

Pour terminer le raisonnement il FAUT vérifier que ces fonctions  et  sont bien dans Ker 6  (vérification sans difficulté).. On vient de prouver que SI Ker