Des langages de programmation tels que Scheme (R5RS) et Python ( voir cette question ) s’arrondissent vers l’entier pair le plus proche lorsque la valeur se situe exactement entre les entiers environnants.
Quel est le raisonnement derrière cela?
Existe-t-il une idée mathématique permettant de raisonner plus facilement sur les calculs suivants?
(R5RS fait référence au standard de virgule flottante IEEE en tant que source de ce problème.)
scheme
numbers
numeric-precision
python-3.x
Profpatsch
la source
la source
Réponses:
Il y a quelque temps, j'ai construit un programme de test pour l'arrondissement successif, car il s'agit essentiellement d'un test de contrainte dans le cas le plus défavorable d'un algorithme d'arrondi.
Pour chaque nombre compris entre 0 et 9 999, il arrondit d'abord à 10, puis à 100, puis à 1000. (Vous pouvez également penser que cela correspond à 10 000 points dans [0,1], étant arrondi à 3, puis à 2, puis à 1.) Cet ensemble de nombres a une valeur moyenne de 4999,5.
Si les trois arrondis sont effectués à l'aide de la méthode "arrondir la moitié", les résultats sont les suivants (la première colonne correspond au résultat de l'arrondi, la deuxième colonne indique le nombre de chiffres arrondis à ce résultat - c'est-à-dire un histogramme).
Le résultat diffère d'un simple "arrondi de moitié" au millier de fois 550 fois sur 10 000 et la valeur arrondie moyenne est 5055 (supérieure à la moyenne initiale de 55,5).
Si les trois arrondis sont effectués par "arrondir la moitié", les résultats sont les suivants:
Le résultat diffère d'un simple "demi-tour" au millier de fois près de 550 fois sur 10 000 et la et la valeur arrondie moyenne est 4944 (trop faible de 55,5).
Si les trois arrondis sont effectués en utilisant "round half odd", le résultat est le suivant:
Le résultat diffère d'un simple "demi-tour impair" au mille 550 fois près de 10 000 et la valeur arrondie moyenne est 4999,5 (correct).
Enfin, si les trois arrondis sont effectués en utilisant "demi-tour même", les résultats sont les suivants:
Le résultat diffère d'un simple "demi-tour même" au millier de fois près 450 fois sur 10 000 et la valeur arrondie moyenne est 4999,5 (correct).
Je pense qu’il est évident que les valeurs arrondies sont biaisées de manière à ce que la moyenne des valeurs arrondies n’ait plus les mêmes attentes que la moyenne des valeurs initiales, et que les expressions "arrondi moitié égal" et "arrondi moitié impair "Supprimez le biais en traitant 5 fois la moitié du temps dans l’autre sens et l’autre moitié. Les arrondis successifs multiplient les biais.
Les parties arrondie moitié pair et moitié impair introduisent leur propre type de biais dans la distribution: un biais vers les chiffres pairs et impairs, respectivement. Dans les deux cas, encore une fois, ce biais est multiplié par arrondi, mais il est pire pour le demi-tour impair. Je pense que l'explication est simple dans ce cas: 5 est un nombre impair, donc demi arrondi a plus de résultats se terminant par 5 que demi-tour pair - et donc plus de résultats qui devront être traités spécialement lors du prochain arrondi.
Quoi qu’il en soit, sur les quatre choix proposés, deux seulement sont sans biais, et sur les deux, la moitié arrondie donne même la distribution la mieux comportée lorsqu’elle est arrondie.
la source
C'est ce qu'on appelle l'arrondi du banquier. L'idée est de minimiser l'erreur cumulative de nombreuses opérations d'arrondi.
Disons que vous avez toujours arrondi 0,5. Pensez à tous ces petits paiements d'intérêts, la banque empochant un demi-cent à chaque fois ...
Disons que vous avez toujours arrondi .5. La comptabilité va crier parce que vous payez plus d'intérêts que vous n'auriez dû.
la source