Por que alguns idiomas arredondam para o número inteiro mais próximo?


44

Linguagens de programação como Scheme (R5RS) e Python ( consulte esta pergunta ) são arredondadas para o número inteiro par mais próximo quando o valor está exatamente entre os números inteiros ao redor.

Qual é o raciocínio por trás disso?
Existe uma ideia matemática que facilite o raciocínio dos cálculos a seguir?

(O R5RS faz referência ao padrão de ponto flutuante IEEE como fonte desse comportamento.)



1
O IEEE permite o modo de múltiplos arredondamentos. Este é um deles. Alguns idiomas ainda permitem alterar o modo de arredondamento durante a execução.
Tobias Brandt

5
Você pode ler a seção de desempate para arredondamentos na Wikipedia e o raciocínio da associação por trás de cada um deles.


1
"embora exata seja uma questão de discussão com números de ponto flutuante" Não é uma questão de discussão, é especificada com muita precisão. Por exemplo, os números relevantes aqui (como 42,5) podem ser representados exatamente, porque são frações binárias. O que não pode ser representado exatamente são frações diferentes de binárias, incluindo frações decimais.
svick

Respostas:


39

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

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

Se todos os três arredondamentos são feitos usando o método "round metade up", então os resultados são os seguintes (primeira coluna é o resultado de arredondamento, 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 uma única "metade arredondada para cima" para os mil e quinhentos e cinquenta e cinco vezes mais de 10.000 e o valor médio arredondado é 5055 (acima da média original em 55,5).

Se todos os três arredondamentos forem feitos por "meia volta arredondada", 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 uma única "metade arredondada para baixo" para os mil mais próximos 550 vezes em 10.000 e o valor médio arredondado é 4944 (muito baixo em 55,5).

Se todos os três arredondamentos forem feitos usando "meia volta ímpar", 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 uma única "meia-volta redonda" para os mil próximos 550 vezes em 10.000 e o valor médio arredondado é 4999,5 (correto).

Por fim, se todos os três arredondamentos forem feitos usando "metade redonda igual", 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 "meio-par redondo" para os mil 450 mais próximos de 10.000 e o valor médio arredondado é 4999,5 (correto).

Eu acho que é óbvio que a metade arredondada para cima e a metade arredondada para baixo influenciam os valores arredondados, para que a média dos valores arredondados não tenha mais a mesma expectativa que a média dos valores originais, e que a "metade redonda par" e a "meia rodada ímpar" "remova o viés tratando 5 de uma maneira na metade do tempo e na outra metade na outra metade. Arredondamentos sucessivos multiplicam o viés.

A metade redonda e a ímpar redonda introduzem seu próprio tipo de viés na distribuição: um viés para dígitos pares e ímpares, respectivamente. Nos dois casos, novamente, esse viés é multiplicado por arredondamentos sucessivos, mas é pior para a metade do round ímpar. Eu acho que a explicação nesse caso é simples: 5 é um número ímpar, então a metade da ímpar tem mais resultados terminando em 5 do que a metade da par - e, portanto, mais resultados que terão que ser tratados especialmente no próximo arredondamento.

De qualquer maneira, das quatro opções, apenas duas são imparciais, e das duas escolhas imparciais, a metade redonda fornece a distribuição mais bem comportada quando sujeita a arredondamentos repetidos.


55

Chama-se arredondamento de banqueiro. A idéia é minimizar o erro cumulativo de muitas operações de arredondamento.

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

Digamos que você sempre arredondou 0,5 para cima. A contabilidade vai gritar porque você está pagando mais juros do que deveria.


6
mas por que par e não ímpar?
roquete aberração

17
@ratchetfreak - números tão pequenos arredondados para, e não para longe, zero. Fora isso, é arbitrário - tem que ser alguma coisa.
Jonathan Dursi 14/09/14

15
@ratchetfreak: O que aconteceria se você começar com o número 1, dividir por 2 e arredondar para ímpar? Você recebe 0,5 arredondado para 1. E se você dividir por 2 novamente? Você recebe 0,5 arredondado para 1. E assim por diante. Nunca se torna zero.
gnasher729

13
Penso que os números pares também devem ser preferidos aos números ímpares, porque diminuem a probabilidade da necessidade de dilemas de arredondamento subsequentes . A divisão por (exatamente) dois é uma operação bastante frequente na prática.
Marc van Leeuwen

4
Também é importante nas estatísticas. Se cada membro fracionário de um conjunto de dados for arredondado para cima, as estatísticas descritivas, como a média, serão (ligeiramente) mais altas do que se forem arredondadas para baixo. A Introdução à Epidemiologia, de Kenneth Rothman, menciona especificamente sempre o arredondamento do terminal 0,5 (ou 0,005, ou o que for) como gradualmente influenciando um banco de dados em direção a números mais altos, mas sempre arredondando para um número par ou ímpar não influencia a média.
Will Murphy
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.