Tout le monde connaît ou a déjà entendu parler des erreurs d’arrondi qui conduisent au fameux MISSIN PENNY. Ce sont des petites erreurs insignifiantes sur les arithmétiques sur les nombres à virgule, qui conduisent à l’arrondissement qui,...
moreTout le monde connaît ou a déjà entendu parler des erreurs d’arrondi qui conduisent au fameux MISSIN PENNY. Ce sont des petites erreurs insignifiantes sur les arithmétiques sur les nombres à virgule, qui conduisent à l’arrondissement qui, en s’accumulant, peuvent donner des manquants rarement graves du côté du caissier, du trésorier ou du comptable.
Nous verrons ici quelques scénarios sur les erreurs d’arrondis.
La simple addition soi-elle sur l’ordinateur, ne donne pas toujours des résultats corrects. Ci-dessous un programme qui additionne deux nombres dixième, et le résultat n’est pas toujours exactement ce qu’on attend :
<script language= "javascript" type= "text/javascript">
"use strict";
(function(){
let v;
for(let k=0 ; k<10 ; k++)
for(let m=0 ; m<10 ; m++){
v = k/10 + m/10;
let diff = v-v.toFixed(1);
...
Il y a plusieurs observations à faire sur cet affichage :
1. L’arithmétique des chiffres simples (ex. 0.1 et 0.2) peut déjà entraîner des erreurs d’arrondi.
2. Les tests conditionnels avec
« if ( (v*10) % 1) »
et
« if ( v-v.toFixed(1) ) »
ne donnent pas exactement le même résultat (voyez les combinaisons 27, 36, 63, 72, 89, 98) qui n’ont pas répondu avec
« if ( (v*10) % 1) ».
.
3. Dans le passé on nous apprenait que la division était l’opération arithmétique la plus consommatrice de temps dans un ordinateur. Ici nous voyons qu’elle n’a pas substantiellement pris vraiment plus de temps par rapport au modulo, la soustraction, et l’addition (ici avec un nombre négatif) pour 1 milliard d’itérations.
Voyons ce que le cumul des [erreurs d’] arrondis peut provoquer dans une banque. On cumule 1e9 (Un milliard opérations de dépôt et/ou retrait), d’abord sans arrondir et ensuite en arrondissant les centimes :
Il faut savoir que l’arrondi peut se faire vers le haut (par excès =différence avec signe positif) ou vers le bas (par défaut =différence avec signe négatif).
Comme on le verra à l’affichage de l’exécution du programme, le maximum de cumul d’erreurs d’arrondi n’est pas en rapport avec le numéro d’ordre de l’opération. Par exemple ci-dessous, le maximum de cumul d’erreurs d’arrondi a été atteint à la 976404491e (9.76404491e+8) opération bancaire, et ce cumul d’erreurs d’arrondi s’est chiffré à disons 11335.571329470475 USD. Donc 11’335.57 USD de manquant ou excédant dû aux [erreurs] d’arrondi (« missing penny » ou plutôt « missing thousands dollars »).
Et s’il s’agissait de la cosmologie, ça pourrait être 11’335.57 années lumières d’écart.
Moralité :
...