Perché alcune lingue arrotondano al numero intero EVEN più vicino?

44

Linguaggi di programmazione come Scheme (R5RS) e Python ( vedi questa domanda ) round verso il numero intero pari più vicino quando il valore è esattamente tra gli interi circostanti.

Qual è il ragionamento alla base di questo?
C'è un'idea matematica che rende più semplice ragionare i seguenti calcoli?

(R5RS fa riferimento allo standard floating point IEEE come origine di questo comportamento.)

    
posta Profpatsch 14.09.2014 - 17:34
fonte

2 risposte

39

Qualche tempo fa ho costruito un programma di test per arrotondamenti successivi, perché in pratica si tratta di uno stress test nel caso peggiore per un algoritmo di arrotondamento.

Per ogni numero compreso tra 0 e 9.999 si passa prima al 10 più vicino, quindi al 100 più vicino, quindi al 1000 più vicino. (Si potrebbe anche pensare che 10.000 punti in [0,1) siano arrotondati a 3 posti, quindi a 2, quindi a 1.) Questo insieme di numeri ha un valore medio di 4999,5.

Se tutti e tre gli arrotondamenti sono fatti usando il metodo "round half up", i risultati sono i seguenti (prima colonna è il risultato dell'arrotondamento, la seconda colonna è come molti numeri arrotondati a tale risultato - cioè è un istogramma).

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

Il risultato differisce da un singolo "mezzo round" al migliaio più vicino a 550 volte su 10.000 e il valore arrotondato medio è 5055 (superiore alla media originale di 55,5).

Se tutti e tre gli arrotondamenti sono fatti da "round half down", i risultati sono:

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

Il risultato differisce da un singolo "semirotondo" al migliaio più vicino a 550 volte su 10.000 e il valore medio arrotondato è 4944 (troppo basso di 55,5).

Se tutti e tre gli arrotondamenti sono fatti usando "round half odd", il risultato è:

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

Il risultato differisce da un singolo "mezzo giro dispari" al migliaio più vicino a 550 volte su 10.000 e il valore arrotondato medio è 4999,5 (corretto).

Infine, se tutti e tre gli arrotondamenti sono fatti usando "round half even", i risultati sono:

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

Il risultato differisce da un singolo "round half even" al migliaio più vicino 450 volte su 10.000 e il valore arrotondato medio è 4999.5 (corretto).

Penso che sia ovvio che arrotondare i valori arrotondati a metà e in basso a metà riducono i valori arrotondati, in modo che la media dei valori arrotondati non abbia più la stessa aspettativa della media dei valori originali e che "arrotondare metà pari" e " round half odd "rimuovi il pregiudizio trattando 5 in un modo metà tempo e l'altro modo nell'altra metà. L'arrotondamento successivo moltiplica il bias.

Round half even e round half odd introducono il proprio tipo di pregiudizio per la distribuzione: un pregiudizio verso cifre pari e dispari, rispettivamente. In entrambi i casi, ancora una volta, questa distorsione viene moltiplicata per arrotondamenti successivi, ma è peggio per la metà del giro dispari. Penso che la spiegazione in questo caso sia semplice: 5 è un numero dispari, quindi round half odd ha più risultati che terminano in 5 rispetto a metà round pari - e quindi, più risultati che dovranno essere gestiti specialmente dal successivo arrotondamento.

Ad ogni modo, delle quattro scelte, solo due sono imparziali, e delle due scelte imparziali, la metà rotonda fornisce anche la distribuzione migliore quando soggetti a arrotondamenti ripetuti.

    
risposta data 15.09.2014 - 10:51
fonte
55

Si chiama l'arrotondamento del banchiere. L'idea è di minimizzare l'errore cumulativo da molte operazioni di arrotondamento.

Diciamo che hai sempre arrotondato .5 verso il basso. Pensa a tutti quei piccoli pagamenti di interessi, la banca intascava mezzo centesimo ogni volta ...

Diciamo che hai sempre arrotondato .5 su. La contabilità sta per gridare perché stai pagando più interesse di quanto dovresti.

    
risposta data 14.09.2014 - 18:09
fonte

Leggi altre domande sui tag