190 likes | 453 Views
Représentation des nombres. Une machine finie. Ici un composant avec 10 connections 0 ou 5 Volts. Représentation des nombres. Base 2, virgule fixe. Exemple sur 3 bits: 110 b = 6 d = 1x2 2 + 1x2 1 + 0x2 0. Bit de poids faible Lest Significant Bit (LSB). Bit de poids fort
E N D
Représentation des nombres Une machine finie Ici un composant avec 10 connections 0 ou 5 Volts
Représentation des nombres Base 2, virgule fixe Exemple sur 3 bits: • 110b = 6d = 1x22 + 1x21 + 0x20 Bit de poids faible Lest Significant Bit (LSB) Bit de poids fort Most Significant Bit (MSB) Résolution x = constante (ici = 1)
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.
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 0.10 101 = 1.0 0.11 101 = 1.1 ... 0.99 101 = 9.9 0.10 102 = 10 0.11 102 = 11 ... 0.99 102 = 99 0.10 103 = 100 0.11 103 = 110 ... 0.99 103 = 990 0.10 104 = 1000 ... ... Le plus grand : 0.99 109 = 990 000 000 x = 0.01 pour e=0 x = 0.1 pour e=1 x = 1 pour e=2 x = 10 pour e=3
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 etL ≤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
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 etL ≤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é.
Représentation des nombres Exercice: étude de la différence finie centrée 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 ci-contre. Exécuter et commenter chacune des lignes de ce programme. Interpréter la figure obtenue. On pourra s’inspirer de la figure ci-dessous. 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 • * En observant que avec k Z • 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.
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.
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 , m10. • 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...