"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que o arredondamento flutuante surpreende com resultados uniformes?

Por que o arredondamento flutuante surpreende com resultados uniformes?

Publicado em 2024-11-04
Navegar:633

Why Does Float Rounding Surprise with Even Results?

Dilema de arredondamento de meio flutuador

Encontrando uma estranheza com a função round()? Observe o seguinte comportamento:

for i in range(1, 15, 2):
    n = i / 2
    print(n, "=>", round(n))

Você pode esperar que os valores flutuantes sejam consistentemente arredondados, mas eles surpreendentemente são arredondados para o número par mais próximo.

Razão por trás do comportamento

A documentação para tipos numéricos esclarece esse comportamento peculiar com a declaração "round(x[, n]) x arredondado para n dígitos, arredondando metade para até." Isso é conhecido como arredondamento de banqueiros. Em vez de arredondamentos persistentes para cima ou para baixo, o que amplificaria os erros de arredondamento, o arredondamento dos banqueiros compensa visando o número par mais próximo. , aproveite o módulo decimal. Este módulo fornece opções para especificar estratégias de arredondamento específicas. Por exemplo, para arredondar da metade:

>>> from decimal import localcontext, Decimal, ROUND_HALF_UP >>> com localcontext() como ctx: ... ctx.arredondamento = ROUND_HALF_UP ... para i no intervalo(1, 15, 2): ...n = Decimal(i)/2 ... imprimir(n, '=>', n.to_valor_integral()) ... 0,5 => 1 1,5 => 2 2,5 => 3 3,5 => 4 4,5 => 5 5,5 => 6 6,5 => 7

Declaração de lançamento Este artigo foi reimpresso em: 1729151236 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3