Por que algumas linguagens são arredondadas para o inteiro EVEN mais próximo?

44

Linguagens de programação como Scheme (R5RS) e Python ( veja esta pergunta ) para o inteiro par mais próximo quando o valor estiver exatamente entre os inteiros próximos.

Qual é o raciocínio por trás disso?
Existe alguma idéia matemática que facilite o raciocínio posterior sobre os cálculos?

(R5RS referencia o padrão de ponto flutuante IEEE como fonte desse comportamento.)

    
por Profpatsch 14.09.2014 / 17:34
fonte

2 respostas

39

Há algum tempo atrás eu construí um programa de teste para arredondamentos sucessivos, porque é basicamente um teste de estresse do pior caso para um algoritmo de arredondamento.

Para cada número de 0 a 9.999, primeiro arredonda para o 10 mais próximo, depois para o 100 mais próximo, depois para o 1000 mais próximo. (Você também pode pensar nisso como 10.000 pontos em [0,1) sendo arredondados para 3 coloca, em seguida, para 2, em seguida, para 1.) Este conjunto de números tem um valor médio de 4999,5.

Se todos os três arredondamentos forem feitos usando o método "round half up", os resultados serão os seguintes (a primeira coluna é o resultado do arredondamento, a segunda coluna é como muitos números arredondados para esse resultado - ou seja, é um histograma).

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

O resultado difere de um único "round half up" para o milhar de 550 vezes de 10.000 e o valor médio arredondado é 5055 (maior que a média original de 55.5).

Se todos os três arredondamentos forem feitos até a metade do intervalo, os resultados serão:

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

O resultado difere de um único "round half down" para o próximo mil 550 de cada 10.000 e o valor médio arredondado é de 4944 (muito baixo de 55.5).

Se todos os três arredondamentos forem feitos usando "round half odd", o resultado é:

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

O resultado difere de um único "round half odd" para o milhar de 550 vezes mais próximo de 10.000 e o valor médio arredondado é de 4999.5 (correto).

Finalmente, se todos os três arredondamentos forem feitos usando "round half even", os resultados serão:

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

O resultado difere de um único "round half even" para o milhar mais próximo de 450 vezes de 10.000 e o valor médio arredondado é de 4999.5 (correto).

Eu acho óbvio que a metade para cima e a metade para baixo distorcem os valores arredondados, de modo que a média dos valores arredondados não tenha mais a mesma expectativa que a média dos valores originais, e que "metade da metade até" e " round half odd "remova o viés tratando 5 uma metade do tempo e a outra metade. Arredondamento sucessivo multiplica o viés.

A metade redonda e a metade da odd apresentam seu próprio tipo de viés na distribuição: um viés para dígitos pares e ímpares, respectivamente. Em ambos os casos, mais uma vez, esse viés é multiplicado por arredondamentos sucessivos, mas é pior para metade da rodada. Eu acho que a explicação neste caso é simples: 5 é um número ímpar, então meia rodada ímpar tem mais resultados terminando em 5 do que a metade da rodada - e portanto, mais resultados que terão que ser tratados especialmente pelo próximo arredondamento.

De qualquer forma, das quatro escolhas, apenas duas são imparciais, e das duas escolhas não tendenciosas, a metade redonda até dá a distribuição mais bem comportada quando sujeita a arredondamentos repetidos.

    
por 15.09.2014 / 10:51
fonte
55

É chamado de arredondamento do banqueiro. A ideia é minimizar o erro cumulativo de muitas operações de arredondamento.

Digamos que você sempre tenha arredondado 0,5. Pense em todos esses pequenos pagamentos de juros, o banco embolsando meio centavo a cada vez ...

Digamos que você sempre tenha arredondado 0,5. Contabilidade vai gritar porque você está pagando mais juros do que deveria.

    
por 14.09.2014 / 18:09
fonte