Représentation des nombres

Download Report

Transcript Représentation des nombres

Représentation des nombres
Une machine finie
Ici un composant avec 10
connections 0 ou 5 Volts
1
Représentation des nombres
Base 2, virgule fixe
Exemple sur 3 bits:
110b = 6d = 1x22 + 1x21 + 0x20
Bit de poids fort
Bit de poids faible
Most Significant Bit (MSB)
Lest Significant Bit (LSB)
Résolution x = constante
(ici = 1)
2
Représentation des nombres
Représentation des réels en virgule flottante
Les réels compris dans l’intervalle
de la flèche seront arrondis à un
unique nombre en virgule
flottante. On écrit: = fl(x).
Soit F  R l’ensemble des
nombres à virgule flottante.
Les éléments de F sont plus
« denses » lorsqu’on s’approche
de zéro que pour les plus grandes
valeurs. Cette représentation
permet de garder une « erreur »
relative constante.
3
Représentation des nombres
Un exemple d’ensemble de nombres en virgule flottante
Soit F défini par:
Base 10 de chiffres  {0, 1, 2, ..., 9}
2 chiffres significatifs
1 chiffre d’exposant « e »
0.85 102 = 85  F
* Ici la mantisse m  ]0, 1[
m = 0.a1a2 avec a1  0 sinon on
aurait qu’un seul chiffre significatif.
 0 (zéro)  F
* Contrairement aux systèmes à
virgule fixe, la « résolution » x n’est
pas constante: x = 107 pour e=9 !!!
Le plus petit :
0.10 100 = 0.10
0.11 100 = 0.11
0.12 100 = 0.12
.....
0.99 100 = 0.99
x = 0.01 pour e=0
0.10 101 = 1.0
0.11 101 = 1.1
...
0.99 101 = 9.9
x = 0.1 pour e=1
0.10 102 = 10
0.11 102 = 11
...
0.99 102 = 99
x = 1 pour e=2
0.10 103 = 100
0.11 103 = 110
...
0.99 103 = 990
x = 10 pour e=3
0.10 104 = 1000
...
...
Le plus grand : 0.99 109 = 990 000 000
Représentation des nombres
Représentation des rééls en virgule flottante
s = 0 ou 1
0  ai  β-1 (t chiffres, par ex.: ai  {0, 1} en base 2)
t = nombre maximum de chiffres de la représentation
β = base (base 2 pour les ordinateurs actuels)
m = mantisse (entier à t chiffres): m=a1a2a3... at
e = exposant, e   et L ≤ e ≤ U (L<0, U>0)
Le plus petit
Le plus grand
L’ensemble F  R des nombres à virgule flottante est caractérisé par {β, t, L, U}.
En Matlab on a : F = F{2, 53, -1021, 1024}
Représentation des nombres
Valeurs spéciales (codes IEE spécifiques)
Infini
Conformément à la norme IEE 754, Matlab représente l’infini par la valeur spéciale inf.
L’infini résulte d’opérations comme la division par zéro et les dépassements qui
conduisent à des résultats supérieurs à max(F).
>> x = 1/0
>> y = exp(1000)
>> x = log(0)
NaN
MATLAB représente des valeurs qui ne sont ni réelles ni complexes avec la valeur
spéciale NaN (Not a Number). Des expressions comme 0/0 et inf/inf résultent en NaN,
ainsi que toute opération arithmétique contenant un NaN.
>> x = 7i/0
x = NaN + Inf i
Voir par exemple: http://fr.wikipedia.org/wiki/IEEE_754
Représentation des nombres
Nombres complexes
Les nombres complexes sont de la forme:
Commandes Matlab:
z= complex(x, y)
 = abs(z)
 = angle(z)
x = real(z)
y = imag(z)
conjugue_de_z = conj(z)
compass(3 + 1j*3)
Dans les versions récentes
de Matlab, on écrit 1i ou 1j pour i
120
150
90 5
4 60
3
2
1
180
30
0
330
210
240
270
300
Représentation des nombres
Exercice: IEE 754
On rappelle la norme IEE 754 ci-contre :
Avec:
s = 0 ou 1
0  ai  β-1 (t chiffres, par ex.: ai  {0, 1} en base 2)
t = nombre maximum de chiffres de la représentation
β = base (base 2 pour les ordinateurs actuels)
m = mantisse (entier à t chiffres): m=a1a2a3... at
e = exposant, e   et L ≤ e ≤ U (L<0, U>0)
1/ On pourra éventuellement, raisonner en base 10: β=10
Montrer qu’on a :
2/ Soit l’ensemble des réels x tels que xmin ≤ x ≤ xmax et tels que tout x est représentable
dans le système flottant F={β, t, L, U} par un seul nombre noté fl(x).
Montrer que l’erreur relative
de sa représentation est telle que:
Représentation des nombres
Exercice: pertes dans F
- Lire l’aide sur la fonction Matlab « eps ». La fonction eps(x) donne la distance du
flottant représentant x au flottant immédiatement supérieur. Donner eps(1), puis
eps(1e16). Expérimenter et expliquer les réponses retournées par les commandes
suivantes:
>> 1e16+1-1e16
>> 1e16+2-1e16
>> 1e16+3-1e16
>> 1e16+4-1e16
>> 1e16+5-1e16
- Ecrire sous Matlab les fonctions :
f (x) = x3 - 3x2 + 3x -1 et g(x) = (x-1)3
Mathématiquement, on a f(x) = g(x) pour tout réel x.
- Représenter f(x) et g(x) dans le même graphique pour x  [1-1e-5, 1+1e-5]. On définira
un vecteur x de longueur 100 en utilisant la fonction linspace. Interpréter la figure
obtenue en raisonnant sur les valeurs eps(1) et eps(1e-5) comparativement aux valeurs
que prennent les fonctions f et g dans le domaine considéré.
9
Représentation des nombres
Soit la fonction « dfun » donnée ci-contre et déjà
étudiée dans le chapitre « programmation
Matlab ». L’incrément dx est fixé à max(x)/1000.
On se propose d’étudier l’erreur commise sur la
dérivée en fonction de l’incrément dx. Pour cela il
faudra se choisir une fonction à dériver pour
laquelle on connait la valeur exacte de la dérivée
en un point x0, puis comparer cette valeur exacte
avec celle obtenue numériquement. Le
programme réalisant cela est donné lui-aussi cicontre. Exécuter et commenter chacune des lignes
de ce programme. Interpréter la figure obtenue.
On pourra s’inspirer de la figure ci-dessous.
Exercice: étude de la différence finie centrée
function df=dfun(f, x)
% Fonction renvoyant la dérivée de f évaluée en x.
dx=max(x)/1000;
dy=(f(x+dx)-f(x-dx))/2/dx;
% ex: x=-10:0.01:10;f=@sinc; plot(x, f(x), x, df(f, x))
end
f = @(x) x^3+x^2+x+1; x0 = 1; dfx0 = 6;
dx(1) = 1; continuer = true; n = 1; maxiter = 250;
dfnum(1)=(f(x0+dx(1))-f(x0-dx(1)))/2/dx(1);
while continuer
n=n+1;
dx(n)=dx(n-1)/1.8;
dfnum(n)=(f(x0+dx(n))-f(x0-dx(n)))/2/dx(n);
if dx(n)<eps, continuer=false;end
if isequal(maxiter,n), continuer=false;end
end
subplot(211)
plot(log10(dx),'*')
subplot(212)
plot(log10(dx),log10(abs(dfx0-dfnum)),'o‘)
Représentation des nombres
Exercice: nombres complexes, racines
avec k  Z
* En observant que
donner les expressions des 3 valeurs possibles de
* Essayer la commande Matlab: u = (-5)^(1/3) où l’opérateur « ^ » est « puissance ».
Matlab ne renvoie qu’une valeur sur les 3 possibles. En observant que u est solution de
utiliser la commande roots* pour calculer les 3 valeurs de u.
* En observant que
montrer que
est réel. Vérifier sous Matlab.
* En lisant l’aide sur roots, remarquer que le polynôme en z est représenté sous Matlab par le vecteur [1 0 0 5].
Représentation des nombres
Exercice: virgule fixe
Soit le système à virgule fixe en base 10, à 3 digits: 3 avant la virgule et 0 après.
L’ensemble des nombres représentables est R1 = {000; 001; 002; ...; 998; 999}.
Combien d’éléments comporte cet ensemble ?
On définit la résolution comme étant la distance séparant un élément de R1 à son plus
proche voisin de valeur supérieure. Quelle est la résolution dans R1 ?
Appelons erreur absolue aR1(x) la quantité : résolution/2. Justifier cette appellation.
Ecrire un programme qui produise le graphique log10(aR1(x))* en fonction de log10(x)
où x est un réel tel que min(R1)  x  max(R1) .
Soit rR1(x) = aR1(x)/x l’erreur relative sur la représentation d’un réel x tel que
min(R1)  x  max(R1) .
Ecrire un programme qui produise le graphique log10(rR1) en fonction de log10(x).
*Le log en base 10 est donné par la fonction log10 dans Matlab.
12
Représentation des nombres
Exercice: résolution dans IEE 754
Les nombres double précision de Matlab peuvent être mis sous la forme :
x = S * M * 2E
(Ⅰ)
avec S le signe (-1 ou +1),
M = 1 + m1*2-1 + m2*2-2 + ... + m52*2-52 la mantisse et mi = 0 ou 1
E  {-1022, -1021, ..., +1023} l’exposant.
- Ecrire x = 256 sous la forme (Ⅰ) en précisant les valeurs des bits m1, m2, ...
- Ecrire de la même façon le nombre-machine y immédiatement supérieur à x
-Sous Matlab, comparer eps(x) et y-x
Soit maintenant la suite xn = 2n . Ecrire xn et la suite correspondante yn des nombres
machines qui leur sont immédiatement supérieurs sous la forme (Ⅰ).
En déduire l’expression de n = yn – xn.
A l’aide de eps, représenter sous Matlab, log(n) en fonction de n, pour n = 1, 2, ...,
25.
Vérifier que la pente et l’ordonnée à l’origine sont conformes à l’expression de n.
13
Représentation des nombres
Exercice: virgule flottante
Dans un système à virgule flottante, le nombre de digits est fixe mais la virgule ne l’est
pas, elle ‘flotte’. Considérons le système R2 en base 10 à 3 digits: 2 digits m  {0, 1, 2,...,
8, 9} affectés à la mantisse et 1 digit e  {0, 1, ..., 4, 5} affecté à l’exposant (puissance de
10). Un nombre x appartenant à R2 s’écrit alors: x = (m1m2).10e , m10.
Donner min(R2) et max(R2). Combien d’éléments comporte R2 ?
On définit la résolution comme étant la distance séparant un élément de R2 à son plus
proche voisin de valeur supérieure. Quelle est la résolution dans R2 ?
Appelons erreur absolue a R2(x) la quantité : résolution/2. Justifier cette appellation.
Ecrire un programme qui produise le graphique log10(a R2(x))* en fonction de log10(x) où
x est un réel tel que min(R2)  x  max(R2) .
Soit rR2(x) = aR2 (x)/x l’erreur relative sur la représentation d’un réel x tel que
min(R2)  x  max(R2) .
Ecrire un programme qui produise le graphique log10(rR2) en fonction de log10(x).
*Le log en base 10 est donné par la fonction log10 dans Matlab.
Représentation des nombres
Exercice: overflow, underflow (dépassement)
Les nombres double précision de Matlab peuvent être mis sous la forme :
x = S * M * 2E
(Ⅰ)
avec S le signe (-1 ou +1),
M = 1 + m1*2-1 + m2*2-2 + ... + m52*2-52 la mantisse où mi = 0 ou 1 les bits de mantisse
E  {-1022, -1021, ..., +1023} l’exposant.
Ecrire un programme qui calcule maxM = max(M)
Calculer maxM-2 et comparer à eps(1)
En déduire le plus grand nombre machine utilisant la norme IEE et comparer à la
valeur renvoyée par la fonction realmax (voir l’aide Matlab de realmax ).
Même raisonnement pour calculer le réel positif le plus petit représentable sous la
norme IEE. Comparer à la valeur renvoyée par la fonction realmin.
Essayer >> realmin/2. Matlab parvient à calculer ce nombre ??? En réalité, le calcul
n’est pas réalisé sous la norme IEE 754. On dit que le nombre est dé-normalisé.
Essayer aussi realmax*2...
15