Professional Documents
Culture Documents
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
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)
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
ab
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 = …;
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
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
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.
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:
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
E S
A B
sif-1053 36
Cette opération de produit logique est
notée:
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
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
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
sif-1053 47
Epsilon de la machine et nombre de
chiffres significatifs d’une représentation
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
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)
sif-1053 58
Éléments de programmation
en C
Exemple de programme (somme
successive de termes puissances)
sif-1053 59
Éléments de programmation
en C
Exemple de programme (somme
successive de termes puissances)
Exécution du programme
sif-1053 60