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|}$$