Nous allons simuler la représentation des nombres en machine à l’aide de Python. Supposons que l’on veuille représenter ces nombres en base 10, avec une précision donnée de $p$ décimales. Le terme « décimales » compte ici le nombre de chiffres significatifs (au sens IEEE 754) et pas le nombre de chiffres après la virgule. Comme il ne s’agit que d’une simulation, on supposera que $p$ est faible. cette représentation est appelée ici la représentation décimale réduite.
Tous les calculs appelés ici “réels” seront les calculs effectués par Python.
rp(x,p).Les exemples suivants peuvent servir de batterie de tests :
| Nombre réel | Sur 4 décimales | Sur 6 décimales |
|---|---|---|
| 3.141592658 | 3.142 | 3.14159 |
| 10507.1823 | 10510 | 10507.2 |
| 0.0001857563 | 0.0001858 | 0.000185756 |
L’exercice porte uniquement sur des manipulations de nombres flottants, et pas des manipulations de bits en mémoire.
Cette fonction doit calculer un nombre (par opposition à simplement afficher un résultat).
Considérons deux nombres $x$ et $y$ en représentation décimale réduite. Il est possible de calculer l’erreur relative réalisée en ajoutant $y$ à $x$ à l’aide de la formule :
$$ \delta_s(x,y) = \frac{\left| (x\underset{\textsf{réel}}{+}y)-(x\underset{\textsf{machine}}{+}y)\right|}{\left| (x \underset{\textsf{réel}}{+} y) \right|} $$
De même, il est possible de calculer l’erreur relative réalisée en multiplant $x$ et $y$ à l’aide de la formule :
$$\delta_p(x,y) = \frac{\left| (x\underset{\textsf{réel}}{\times}y)-(x\underset{\textsf{machine}}{\times}y)\right|}{\left| (x \underset{\textsf{réel}}{\times} y) \right|}$$