Variables et instruction d’affectation
CHAPITRE 2
28
Remarques
1 Une conséquence étonnante de la représentation approchée des réels réside dans la comparaison entre les valeurs de deux expressions apparemment identiques comme :
z1 = (x + y - x)/y
z2 = (x - x + y)/y
en supposant que y ait une valeur petite par rapport à celle de x, par exemple x=1 et y=1e10 dans un langage où les réels sont représentés avec environ 8 chiffres significatifs. Si
l’ordre des additions est respecté (ce qui n’est pas toujours le cas), l’expression x+y est
alors rigoureusement égale à x, de sorte que x+y-x vaut 0 et que z vaut exatement 0. En
revanche, dans la seconde expression, x-x vaut 0 et x-x+y vaut exactement y, de sorte que
z2 vaut exactement 1.
2 Très souvent, on définit pour un type réel donné, ce que l’on nomme « l’epsilon
machine », c’est-à-dire le plus grand réel eps tel que 1+eps soit égal à 1.
3 Dans tous les langages, les valeurs entières « pas trop grandes » sont représentées de
façon exacte en réel. La limite dépend du nombre d’octets utilisés et du mode de
codage.
Exercice 2.8 Que font ces instructions ?
reel a, b, c
a := 5.25
b := 2.0 * a
c := 1.5
b := 5. * c
4.3 Expressions mixtes
Jusqu’ici, nous avons considéré que les opérateurs arithmétiques n’étaient définis que pour
des valeurs de même type. Mais, supposons que x soit une variable de type réel et
considérons l’expression :
2 * x
Elle fait intervenir le produit d’un entier par un réel, opération à laquelle nous n’avons
pas donné de signification (contrairement à l’expression 2.0*x qui, quant à elle ferait intervenir le produit de deux réels).
Plutôt que d’interdire ce genre de chose, nous avons préféré adopter la démarche autorisée
par la plupart des langages, à savoir que cette expression sera évaluée suivant ce schéma :
• conversion de l’entier 2 en un nombre réel ;
• produit de ce réel par la valeur de x.
Précédent

- 51/370

Suivant