You are on page 1of 60

Cours 3

 2. Représentation et traitement des


informations
Représentation des nombres réels
Opérations sur les nombres réels
Fonctions logiques et algèbre booléenne
Opérations sur les bits
Travail pratique #1
 Epsilon d’une machine
 Propagation des erreurs

 Le matériel
Chapitre2 CSA
Synthèse du professeur

sif-1053 1
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 existaient
Implé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 2
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 3
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 4
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

S C 1 2 7
N  (  1)  2  1, M
• S: bit de signe
• C: caractéristique
• M: mantisse

sif-1053 5
Représentation en virgule
flottante
 Représentation sous forme d’un réel
court du nombre 87.125
8710  10101112
0,12510  0,0012
87 ,12510  1010111,0012

Après normalisation

6
1 0 1 0 1 1 1,0 0 1 2  1,0 1 0 1 1 1 0 0 1  2

sif-1053 6
Représentation en virgule
flottante
 Représentation sous forme d’un réel
court du nombre 87.125

1,010111001 Mantisse avec le 1 implicite


110 Exposant
010111001 Mantisse entreposée
10000101 : (133  127  6) Caractéristique

sif-1053 7
Représentation en virgule
flottante
 Représentation sous forme d’un réel
court du nombre 87.125

0 10000101 01011100100000000000000

sif-1053 8
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
Cas
 C = 000…0, M = 000…0
• Représente la valeur 0
 Valeurs +0 et –0 possibles
 C = 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 9
Représentation en virgule
flottante

Valeurs spéciales
Condition
 C = 111…1
Cas
 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 10
Représentation en virgule
flottante

Sommaire de l’encodage des nombres
réels

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 (retour sur le projet
erreurAccesMemoireH2018)

a-3 = 1; // ecrase la valeur


// dans la variable d (float)

0 00000000 00000000000000000000001

Contenu de d
• S: 0
• C: 0
• M: 1

sif-1053 15
Opérations en virgule flottante
 Addition en virgules flottantes
 Considérons l’addition de 2 réels chacun
avec 15 bits significatifs

a  123,45
b  1.2345
7
a  0,111101101110011  2
1
b  0,100111100000010  2

sif-1053 16
Opérations en virgule flottante
 Alignement de b

7
b  0,0000001001 1110000001 0  2
ab 
0,1111011011 10011 
0,0000001001 1110000001 0 
0,1111100101 0111100001 0

sif-1053 17
Opérations en virgule flottante
 Arrondissement du résultat

0,1111100101 0111100001 0
0,1111100101 01111
Bits de précision perdus
7
0,1111100101 01111  2  124,68

sif-1053 18
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 * M2
Exposant E: E1 + E2

Cadrage
SI 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 19
Nombres réels en C
 Deux niveaux de nombres réels
floatsinple précision
double double précision
 Conversions
Conversion entre des int, float, et
double changent les valeurs
numériques
 Double ou float à int
 Truncature de la partie fractionnaire
 Comme l’arrondissement rounding toward
zero
 int à double
 Conversion exacte
int à float
 Arrondissement selon le mode d’arrondi

sif-1053 20
Nombres réels en C
int x = …;
float f = …;
double d = …;

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

sif-1053 21
Ariane 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 22
Système Anti-Missile Patriot
 Missile Scud non
intercepté
 23 soldats US
tués (05/01/1991)

Pourquoi ???
 V représentée par
des nombres
réels
 T représenté par
un integer
 Conversion de T
en réel (24 bits)
 Perte de
précision
 Avec le temps
cette erreur
s’accumule
http://www.math.umn.edu/~arnold/disasters/patriot.html
sif-1053 23
Système Anti-Missile Patriot
  It turns out that the cause was an inaccurate
calculation of the time since boot due to
computer arithmetic errors. Specifically, the time
in tenths of second as measured by the system's
internal clock was multiplied by 1/10 to produce
the time in seconds. This calculation was
performed using a 24 bit fixed point register. In
particular, the value 1/10, which has a non-
terminating binary expansion, was chopped at 24
bits after the radix point. The small chopping
error, when multiplied by the large number giving
the time in tenths of a second, led to a significant
error. Indeed, the Patriot battery had been up
around 100 hours, and an easy calculation
shows that the resulting time error due to the
magnified chopping error was about 0.34
seconds.
http://www.math.umn.edu/~arnold/disasters/patriot.html
sif-1053 24
Système Anti-Missile Patriot
   The number 1/10 equals
1/24+1/25+1/28+1/29+1/212+1/213+.... In other
words, the binary expansion of 1/10 is
0.0001100110011001100110011001100.... Now
the 24 bit register in the Patriot stored instead
0.00011001100110011001100 introducing an
error of
0.0000000000000000000000011001100...
binary, or about 0.000000095 decimal.
Multiplying by the number of tenths of a second
in 100 hours gives
0.000000095×100×60×60×10=0.34. A Scud
travels at about 1,676 meters per second, and so
travels more than half a kilometer in this time.
This was far enough that the incoming Scud was
outside the "range gate" that the Patriot tracked.
http://www.math.umn.edu/~arnold/disasters/patriot.html
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
Fonctions logiques et algèbre
booléenne

 Ce 2 novembre 2015 Google a fêté les


200 ans de Georges Boole.

sif-1053 27
 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 28
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

sif-1053 29
 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.

E S
A=0
E S
A=1

sif-1053 30
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

sif-1053 31
 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

A
E S

S1
E1
A

sif-1053 32
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).

A
E S

sif-1053 33
 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 34
 Par analogie avec la table d’addition
classique, nous pouvons établir une
table d’addition logique.

+ 0 1

0 0 1

1 1 1

sif-1053 35
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

E S
A B

S=0, si A=0 ou B=0;


S=1 , si A=1 et B=1simultannément.

sif-1053 36
 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 37
 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 38
Le OU-EXCLUSIF (Xor)
 A^B = 1 quand A=1 ou B=1 mais A != B

sif-1053 39
Identités utiles en algèbre
Booléenne

sif-1053 40
Exemples
 Opérations sur plusieurs bits
 Opérations appliquées bit à bit

01101001 01101001
& 01010101 ^ 01010101
01000001 00111100

01101001
| 01010101 ~ 01010101
01111101 10101010

sif-1053 41
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 42
Opérations logiques en C
VERSUS
Opérations sur les bits
Opé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 43
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 44
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 45
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 réel avant
qu’il n’ai plus de signifiance correspond
au nombre de chiffres significatifs de la
représentation

sif-1053 46
Epsilon de la machine et nombre de
chiffres significatifs d’une représentation

 Le plus petit nombre signifiant d’une


représentation réelle est appelé epsilon
de la machine
Ce nombre représente la plus petite
valeur de x pour laquelle 1+x>1

sif-1053 47
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 // while (unpluseps>1)
eps = eps/2
unpluseps = 1 + eps
n++
FIN TTQ
eps = eps * 2
n = n-1
imprimer eps et n
//printf(“\n eps = %12.10f et n = %n”, eps, n);
//printf(“\n eps = %20.18lf et n = %n”, eps, n);
sif-1053 48
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’arrondi
Alors la sommation suivante peut dans
certain cas ne pas donner 1

N
1  1/ N
1

sif-1053 49
Propagation des erreurs
 De plus, l’ordre des sommations a
aussi une influence sur la propagation
des erreurs
Par 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 (ex: 32767)

N 1

 1
i 1
/ i  n
 1
i N
/ i n

sif-1053 50
Propagation des erreurs
 Les 2 sommations suivantes pour
N=32767 et n = 1
 Somme ascendante:

 Somme descendante:

sif-1053 51
Propagation des erreurs
 Algorithme de sommation successive
saut = 1/N
somme = 0
POUR i = 1 à N FAIRE
somme = somme + saut
FIN POUR
imprimer somme et erreur (1-somme)

//for(i =1;i=N;i++)

sif-1053 52
Propagation des erreurs
 Algorithme de sommation ascendant
somme = 0
POUR i = 1 à N par saut de 1FAIRE
somme = somme + 1/in
FIN POUR
imprimer somme

// for(i =1;i=N;i++)
// somme += 1.0/pow((double) i, (double) n);

sif-1053 53
Propagation des erreurs
 Algorithme de sommation descendant
somme = 0
POUR i = N à 1 par saut de -1 FAIRE
somme = somme + 1/in
FIN POUR
imprimer somme

//for(i = N;i = 1;i--)

sif-1053 54
É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 55
É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 56
É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 57
Éléments de programmation
en C
 Exemple de programme (somme
successive de termes puissances)

Voir projet calculPOW

sif-1053 58
Éléments de programmation
en C
 Exemple de programme (somme
successive de termes puissances)

Ajouter ces lignes dans le fichier StdAfx.h

sif-1053 59
Éléments de programmation
en C
 Exemple de programme (somme
successive de termes puissances)
Exécution du programme

sif-1053 60

You might also like