web-dev-qa-db-fra.com

Pourquoi certaines langues sont-elles arrondies à l'entier EVEN le plus proche?

Les langages de programmation comme Scheme (R5RS) et Python ( voir cette question ) arrondissent vers l'entier pair le plus proche lorsque la valeur est exactement entre les entiers environnants.

Quel est le raisonnement derrière cela?
Existe-t-il une idée mathématique qui facilite le raisonnement des calculs suivants?

(R5RS fait référence à la norme à virgule flottante IEEE comme source de ce comportement.)

46
Profpatsch

Il y a quelque temps, j'ai construit un programme de test pour l'arrondi successif, car il s'agit essentiellement du pire test de stress pour un algorithme d'arrondi.

Pour chaque nombre compris entre 0 et 9 999, il arrondit d'abord au 10 le plus proche, puis au 100 le plus proche, puis au 1000 le plus proche. (Vous pourriez aussi penser à cela comme 10 000 points en [0,1) étant arrondi à 3 endroits, puis à 2, puis à 1.) Cet ensemble de nombres a une valeur moyenne de 4999,5.

Si les trois arrondis sont effectués en utilisant la méthode "arrondir à la moitié", les résultats sont les suivants (la première colonne est le résultat de l'arrondi, la deuxième colonne indique combien de nombreux nombres arrondis à ce résultat - c'est-à-dire qu'il s'agit d'un histogramme).

0     445
1000  1000
2000  1000
3000  1000
4000  1000
5000  1000
6000  1000
7000  1000
8000  1000
9000  1000
10000 555

Le résultat diffère d'une seule "demi-arrondie" au millier 550 fois le plus proche sur 10 000 et la valeur arrondie moyenne est de 5055 (supérieure à la moyenne d'origine de 55,5).

Si les trois arrondis sont effectués par "arrondir la moitié vers le bas", les résultats sont les suivants:

0     556
1000  1000
2000  1000
3000  1000
4000  1000
5000  1000
6000  1000
7000  1000
8000  1000
9000  1000
10000 444

Le résultat diffère d'une seule "moitié arrondie vers le bas" au millier 550 fois le plus proche sur 10 000 et la valeur moyenne arrondie est de 4944 (trop faible de 55,5).

Si les trois arrondis sont effectués en utilisant "arrondi à moitié impair", le résultat est:

0     445
1000  1111
2000  889
3000  1111
4000  889
5000  1111
6000  889
7000  1111
8000  889
9000  1111
10000 444

Le résultat diffère d'un simple "demi-impair rond" au millier 550 fois le plus proche sur 10 000 et la valeur arrondie moyenne est de 4999,5 (correcte).

Enfin, si les trois arrondis sont effectués en utilisant "arrondir la moitié même", les résultats sont les suivants:

0     546
1000  909
2000  1091
3000  909
4000  1091
5000  909
6000  1091
7000  909
8000  1091
9000  909
10000 1091

Le résultat diffère d'une seule "moitié ronde égale" au millier le plus proche 45 fois sur 10 000 et la valeur arrondie moyenne est 4999,5 (correcte).

Je pense qu'il est évident que arrondir la moitié vers le haut et arrondir la moitié vers le bas biaisent les valeurs arrondies, de sorte que la moyenne des valeurs arrondies n'a plus la même attente que la moyenne des valeurs d'origine, et que "la moitié ronde paire" et "la moitié ronde impaire "supprimer le biais en traitant 5 dans un sens la moitié du temps et dans l'autre sens l'autre moitié. L'arrondi successif multiplie le biais.

La moitié ronde paire et la moitié ronde impaire 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 les arrondis successifs, mais il est pire pour les arrondis à moitié impairs. Je pense que l'explication dans ce cas est simple: 5 est un nombre impair, donc la moitié ronde impaire a plus de résultats se terminant par 5 que la moitié ronde même - et donc, plus de résultats qui devront être traités spécialement par le arrondi suivant .

Donc, de toute façon, sur les quatre choix, seuls deux sont sans biais, et parmi les deux choix sans biais, la moitié arrondie donne même la distribution la mieux comportée lorsqu'elle est soumise à des arrondis répétés.

39
hobbs

C'est ce qu'on appelle l'arrondissement bancaire. L'idée est de minimiser l'erreur cumulative de nombreuses opérations d'arrondi.

Disons que vous arrondissez toujours 0,5 vers le bas. Pensez à tous ces petits paiements d'intérêts, la banque empochant un demi-cent à chaque fois ...

Disons que vous arrondissez toujours 0,5. La comptabilité va crier parce que vous payez plus d'intérêts que vous ne le devriez.

55
Loren Pechtel