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.)
scheme
numbers
numeric-precision
python-3.x
Profpatsch
fonte
fonte
Respostas:
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).
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:
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 é:
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:
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.
fonte
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.
fonte