Upload
marcellin-granger
View
119
Download
7
Embed Size (px)
Citation preview
sif-1053 1
Cours 3
2. Représentation et traitement des informations
Représentation des nombres réelsOpérations sur les nombres réelsFonctions logiques et algèbre booléenneOpérations sur les bitsTravail pratique #1
Epsilon d’une machine Propagation des erreurs
Le matérielChapitre 2 CSASynthèse du professeur
sif-1053 2
Représentation en virgule flottante La norme IEEE 754
Établi en 1985 comme norme uniforme de l’arithmétique en point flottant
Avant, plusieurs formats existaientImplémenté sur la plupart des CPUs
Représentation des réels courts (32 bits) selon la norme de l’IEEE 754
S Caractéristique Mantisse
31 30 23 22 0
sif-1053 3
Représentation en virgule flottante Représentation des réels longs (64 bits) selon la norme de l’IEEE 754
S Caractéristique Mantisse
63 62 52 51 0
sif-1053 4
Représentation en virgule flottante Un réel court est dit normalisé quand:
Condition C 000…0 et C 111…1
Exposant est codé sous forme d’excédent
E = C – Bias => C = E + Bias C : valeur unsigned Bias : valeur du bias ou de l’excédent
•Simple précision: 127 (C: 1…254, E: -126…127)
•Double précision: 1023 (C: 1…2046, E: -1022…1023)
•En général: Bias = 2m-1 - 1, ou m est le nombre de bits de la caractéristique
Mantisse codé avec un 1 implicite M = 1.xxx…x2
xxx…x: bits de la partie fractionnaire Minimum quand 000…0 (M = 1.0) Maximum quand 111…1 (M = 2.0 – ) Le bit implicite n’est pas storé en mémoire
sif-1053 5
Représentation en virgule flottante Un réel court normalisé en virgule flottante (S,C,M) a sa valeur décimale N donnée par
MN CS ,12)1( 127
• S: bit de signe• C: caractéristique • M: mantisse
sif-1053 6
Représentation en virgule flottante Représentation sous forme d’un réel court du nombre 87.125
210
210
210
001,1010111125,87
001,0125,0
101011187
Après normalisation
62 2010111001,1001,1010111
sif-1053 7
Représentation en virgule flottante Représentation sous forme d’un réel court du nombre 87.125
)6127133(:10000101
010111001
110
010111001,1
Mantisse avec le 1 implicite
Exposant
Mantisse entreposéeCaractéristique
sif-1053 8
Représentation en virgule flottante Représentation sous forme d’un réel court du nombre 87.125
0 10000101 01011100100000000000000
sif-1053 9
Représentation en virgule flottante Un réel court est dit dénormalisé quand:
Condition C = 000…0
Valeur E = -Bias +1 M = 0.xxx…x2
CasC = 000…0, M = 000…0
• Représente la valeur 0
Valeurs +0 et –0 possiblesC = 000…0, M 000…0
• Nombres très proches de 0.0• Perte de précision plus le nombre devient petit• Underflow graduel
sif-1053 10
Représentation en virgule flottante
Valeurs spécialesCondition
C = 111…1Cas
C = 111…1, M = 000…0• Représente (infinity)
• Opération qui donne un débordement• Autant positif que négatif
• Ex: 1.0/0.0 = 1.0/0.0 = +, 1.0/0.0 = C = 111…1, M 000…0
• Not-a-Number (NaN)• Représente les cas ou aucune valeur numérique ne peut être déterminée
• Ex: sqrt(–1),
sif-1053 11
Représentation en virgule flottante
Sommaire de l’encodage des nombres réels
sif-1053 12
Représentation en virgule flottante
Sommaire de l’encodage des nombres réels
sif-1053 13
Représentation en virgule flottante
Sommaire de l’encodage des nombres réels
sif-1053 14
Représentation en virgule flottante
Sommaire de l’encodage des nombres réels
sif-1053 15
Opérations en virgule flottante Approche conceptuelle
Calculer en premier le résultat exacte Convertir le résultat dans la représentation appropriée
Possibilité de débordement si l’exposant est trop gros
Possibilité d’arrondi pour cadrer dans la mantisse M
Type d’arrondi (exemple en $)
$1.40 $1.60 $1.50 $2.50 –$1.50
Round toward Zero $1.00 $1.00 $1.00 $2.00 –$1.00
Round down (-) $1.00 $1.00 $1.00 $2.00 –$2.00
Round up (+) $2.00 $2.00 $2.00 $3.00 –$1.00
Nearest (default) $1.00 $2.00 $2.00 $2.00 –$2.00
sif-1053 16
Round-To-Nearest Mode d’arrondi par défaut
Les autres modes sont statistiquement biasésDes sommes de nombres positifs peuvent être sur- ou sous- estimées
Application à d’autres positions décimales Quand nous sommes exactement entre
deux valeurs possiblesArrondi de façon à ce que le digit le moins significatif soit pair
Ex: arrondi au centième près1.2349999 => 1.23
1.2350001 => 1.24
1.2350000 => 1.24
1.2450000 => 1.24
sif-1053 17
Arrondi de nombres binaires Nombres fractionnaires binaire Examples
Arrondi au ¼ près (2 bits à droite du point binaire)
sif-1053 18
Opérations en virgule flottante Addition en virgules flottantes
Considérons l’addition de 2 réels chacun avec 15 bits significatifs
1
7
2000101001111000,0
2100111111011011,0
2345.1
45,123
b
a
b
a
sif-1053 19
Opérations en virgule flottante Alignement de b
001111000011111100101,0
011100000010000001001,0
100111111011011,0
2011100000010000001001,0 7
ba
b
sif-1053 20
Opérations en virgule flottante Arrondissement du résultat
68,1242011111111100101,0
011111111100101,0
001111000011111100101,0
7
sif-1053 21
Opérations en virgule flottante Multiplication en virgules flottantes Opérandes
(–1)s1 M1 2E1
(–1)s2 M2 2E2
Résultat exacte(–1)s M 2E
Signe s: s1 ^ s2 Mantisse M: M1 * M2Exposant E: E1 + E2
CadrageSI M ≥ 2, décaler M à droite, incrément de E
Si E hors des bornes possibles, overflow Arrondir M pour cadrer la représentation
sif-1053 22
Nombres réels en C Deux niveaux de nombres réelsfloatsinple précision
double double précision Conversions
Conversion entre des int, float, et double changent les valeurs numériques
Double ou float à intTruncature de la partie fractionnaireComme l’arrondissement rounding toward
zero int à double
Conversion exacte int à float
Arrondissement selon le mode d’arrondi
sif-1053 23
x == (int)(float) x Non: 24 bits significatifs
x == (int)(double) x Oui: 53 bits significatifs
f == (float)(double) f Oui: meilleure précision
d == (float) d Non: perte précision
f == -(-f); Oui: changement du bit s
2/3 == 2/3.0 Non: 2/3 == 0
d < 0.0 ((d*2) < 0.0) Oui!
d > f -f < -d Oui!
d * d >= 0.0 Oui!
(d+f)-d == f Non: Non associatif
Nombres réels en C
int x = …;
float f = …;
double d = …;
sif-1053 24
Ariane 5Ariane 5 Explosion apès 37
secondes de vol $500 millions
perdus Pourquoi ???
Vh représentée par des nombres réels
Conversion en short integer (16 bits)
OK pour Ariane 4 Overflow pour
Ariane 5 Même code
utilisé
sif-1053 25
Fonctions logiques et algèbre booléenne
C’est vers le milieu du 19ième siècle que le mathématicien et logicien anglais George Boole publie son traité d’algèbre intitulé: “Investigation des lois du raisonnement sur lesquelles reposent la théorie mathématique de la logique et les probabilités”.
Il faut par contre attendre près d’un siècle avant que l’on trouve des applications pratiques à cette théorie.
sif-1053 26
L’algèbre de Boole est une algèbre applicable aux raisonnements sur des propositions logiques, une proposition peut être vraie ou fausse, ce que l’on peut noter par 1 ou 0.
En électronique, le courant électrique passe ou ne passe pas, ce que l’on peut noter également par 1 ou 0. En fait c’est sur ce concept fondamental, pour le moins assez simple, que sont construits tous les ordinateurs électroniques.
sif-1053 27
Variable Booléenne
Puisqu’une variable de Boole ne peut prendre que deux valeurs, 0 ou 1, nous pouvons écrire:
si A différent de 0 ==> A = 1
si A différent de 1 ==> A = 0
28sif-1053
E S
SEA=0
A=1
On associe souvent la notation de variable booléenne à un interrupteur ouvert ou fermé. Supposons que la valeur 1 soit associée à l’interrupteur fermé et 0 à l’interrupteur ouvert. En admettant la présence d’une tension au point E, nous avons une tension au point S dans la mesure où A = 1. Si A = 0 (interrupteur ouvert), il n’y a pas de tension en S.
sif-1053 29
Complémentation d’une variable booléenne Étant donnée la dualité inhérente à toute l’algèbre de Boole, la notion de complémentation d’une variable ou d’une expression est immédiate, nous appelons complément d’une variable ou d’une expression l’opposé en algèbre de Boole de cette variable ou de cette expression. L’opération de complémentation peut donc être représentée par le tableau ci-dessous.
~A = 1 quand A=0
Variable Complément A A (ou A’) 0 1 1 0
30sif-1053
Nous voyons donc que si la variable A est associée à un interrupteur ouvert pour la valeur 0 et fermé pour la valeur 1, la variable A’ est associée à un interrupteur mécaniquement lié au premier, mais ouvert quand A = 1 et fermé quand A = 0
E S
S1E1
A
A
31sif-1053
La somme logique
La notion de somme logique (à ne pas confondre avec la somme algébrique) peut être associée à des interrupteurs en parallèle. En associant à la présence d’une tension en un point la valeur logique 1, et à son absence la valeur logique 0, nous obtenons:
S=0, si A=0 et B=0 simultanément;
S=1 , si A=1 ou B=1(ou les deux).
E SA
B
sif-1053 32
Cette opération de somme logique est indiquée par le signe +. Nous écrivons donc:
S = A + B
Le + logique (que nous ne devons pas confondre avec le + de l’algèbre classique) correspond assez bien à la dénomination OU: nous avons une tension en S si les interrupteurs A OU B (ou les deux) sont fermés.
A | B = 1 quand A = 1 ou B = 1
sif-1053 33
Par analogie avec la table d’addition classique, nous pouvons établir une table d’addition logique.
+ 0 1
0 0 1
1 1 1
34sif-1053
Le produit logique
Nous avons vu dans le paragraphe précédent que la notion de somme logique se rapproche de celle d’interrupteurs en parallèle. De la même façon, nous associons la notion de produit logique à celle d’interrupteurs placés en série
S=0, si A=0 ou B=0;
S=1 , si A=1 et B=1simultannément.
SEA B
sif-1053 35
Cette opération de produit logique est notée:
S = A x B (ou A.B ou AB)
Le x logique (que nous ne devons pas confondre avec le x de l’algèbre classique) correspond assez bien à la dénomination ET: nous avons une tension en S si les interrupteurs A et B sont fermés.
A & B = 1 quand A = B = 1
sif-1053 36
Par analogie avec la table de multiplication classique, nous pouvons établir une table de multiplication logique.
x 0 1
0 0 0
1 0 1
sif-1053 37
Le OU-EXCLUSIF (Xor)
A^B = 1 quand A=1 ou B=1 mais A != B
sif-1053 38
Identités utiles en algèbre Booléenne
sif-1053 39
Exemples Opérations sur plusieurs bits
Opérations appliquées bit à bit
01101001& 01010101 01000001
01101001| 01010101 01111101
01101001^ 01010101 00111100
~ 01010101 10101010
sif-1053 40
Opérations sur les bits en C Opérations &, |, ~, ^ disponibles en C
•Applicable à plusieurs types de données
–long, int, short, char
•Voir les opérandes comme des suites de bits
•Opérations bit à bit
Exemples (char)•~0x41 --> 0xBE
~010000012 --> 101111102
•~0x00 --> 0xFF
~000000002 --> 111111112
•0x69 & 0x55 --> 0x41
011010012 & 010101012 --> 010000012
•0x69 | 0x55 --> 0x7D
011010012 | 010101012 --> 011111012
sif-1053 41
Opérations logiques en C VERSUS
Opérations sur les bitsOpérateurs Logiques
•&& (ET logique), || (OU logique), ! (NON logique)
–Voir 0 comme FAUX
– Tout ce qui est différent de 0 est VRAI
–Retourne 0 ou 1
Exemples (char)•!0x41 --> 0x00 (NOT VRAI = FAUX)
•!0x00 --> 0x01 (NOT FAUX = VRAI)
•!!0x41 --> 0x01
•0x69 && 0x55 --> 0x01
•0x69 || 0x55 --> 0x01
• x = 100
• y = 50
• xx = 120
• yy = 130
• (x >= y) && (xx == yy) 0x00
sif-1053 42
Résumé des opérateurs en C
Opérateurs–Arithmétiques
» +, += /* addition, addition et affectation */
» -, -= /* soustraction, soustraction et affectation */
» *, *= /* multiplication, multiplication et affectation */
» /, /= /* division, division et affectation */
» %, %= /* reste de la division entière (modulo), modulo et affectation */
» ++ /* incrémentation a++, ++a */
» -- /* décrémentation a--, --a */
–Relationnels» <, <= /* plus petit, plus petit ou égal */
» >, >= /* plus grand, plus grand ou égal */
» ==, != /* égal ou différent */
–Logiques» ! /* complément (non) */
» && /* et */
» | | /* ou */
sif-1053 43
Résumé des opérateurs en C
Opérateurs–Logiques bitwise (sur des bits)
» ~ /* complément à 1 */
» &, &= /* et logique, et logique et affectation */
» | , |= /* ou logique, ou logique et affectation */
» ^, ^= /* ou exclusif, ou exclusif et affectation */
» >>, >>= /* décalage à droite, décalage à droite et affectation */
» <<, <<= /* décalage à gauche, décalage à gauche et affectation */
sif-1053 44
Epsilon de la machine et nombre de chiffres significatifs d’une
représentation Lorsque nous effectuons l’addition de 2 nombres réels le plus petit des 2 est décalé ce qui occasionne une perte de précision Dans des cas extrêmes il peut arriver que le plus petit nombre n’ai aucune signifiance dans le calcul, ayant été décalé complètement vers la droite Le nombre de décalages maximum que peut subir un nombre avant qu’il n’ai plus de signifiance correspond au nombre de chiffres significatifs de la représentation
sif-1053 45
Epsilon de la machine et nombre de chiffres significatifs d’une
représentation Le plus petit nombre signifiant d’une représentation est appelé epsilon de la machine Ce nombre représente la plus petite valeur de x pour laquelle 1+x>1
sif-1053 46
Epsilon de la machine et nombre de chiffres significatifs d’une
représentation Algorithme qui trouve le epsilon de la machine et le nombre de chiffres significatifs (cas binaire)
eps=1
n=0
unpluseps = 1 + eps
TTQ unpluseps>1 FAIRE
eps = eps/2
unpluseps = 1 + eps
n++
FIN TTQ
eps = eps * 2
n = n-1
imprimer eps et n
sif-1053 47
Propagation des erreurs
Lorsque une opération telle que l’addition est répétée il peut survenir un phénomène de propagation des erreurs d’arrondiAlors la sommation suivante peut dans certain cas ne pas donner 1
N
N1
/11
sif-1053 48
Propagation des erreurs
De plus, l’ordre des sommations a aussi une influence sur la propagation des erreursPar conséquent les 2 sommations suivantes devraient donner la même valeur mais ce n’est pas le cas quand N est le moindrement grand
1
1
/1/1Ni
nN
i
n ii
sif-1053 49
Propagation des erreurs
Algorithme de sommation successivesaut = 1/N
somme = 0
POUR i = 1 à N FAIRE
somme = somme + saut
FIN POUR
imprimer somme et erreur (1-somme)
sif-1053 50
Propagation des erreurs
Algorithme de sommation ascendantsomme = 0
POUR i = 1 à N par saut de 1FAIRE
somme = somme + 1/in
FIN POUR
imprimer somme
sif-1053 51
Propagation des erreurs
Algorithme de sommation descendantsomme = 0
POUR i = N à 1 par saut de -1 FAIRE
somme = somme + 1/in
FIN POUR
imprimer somme
sif-1053 52
Éléments de programmation en C
Entrées/Sorties–Des symboles de formattage sont utilisés comme arguments aux fonctions d’I/O (ex: lecture au clavier et écriture à l’écran)
»“%d” /* formattage d’un nombre décimal */
»“%i” /* formattage d’un nombre décimal */
»“%f” /* formattage d’un nombre réel */
»“%c” /* formattage d’un caractère */
»“%s” /* formattage d’une chaîne de caractères */
»“%ld” /* formattage d’un nombre entier long */
»“%lf” /* formattage d’un nombre réel long */
sif-1053 53
Éléments de programmation en C
Caractères spéciaux–Des caractères spéciaux sont utilisés pour modifier une sortie à l’écran ou pour faciliter la gestion des chaînes de caractères
»‘\b’ /* backspace */
»‘\f’ /* saut de page (form feed) */
»‘\n’ /* nouvelle ligne (new line) */
»‘\r’ /* retour de chariot (return) */
»‘\t’ /* tabulation (tab) */
»‘\’’ /* apostrophe */
»‘\”’ /* guillemets */
»‘\0’ /* caractère nul (null) */
»‘\\’ /* barre oblique inversée */
sif-1053 54
Éléments de programmation en C
Structures de contrôle (Boucles)–Boucle while
while(condition){}– Par exemple:
iter =10;i=res=0;a = 12.5;
while(i<iter){res += (int) a;
printf(“\n Dans main() res = %d et a = %5.2f”, res,a); i++;
}
sif-1053 55
Éléments de programmation en C
Exemple de programme (somme successive de termes puissances)
Voir projet calculPOW
sif-1053 56
Éléments de programmation en C
Exemple de programme (somme successive de termes puissances)
Ajouter ces lignes dans le fichier StdAfx.h
sif-1053 57
Éléments de programmation en C
Exemple de programme (somme successive de termes puissances)
Exécution du programme