"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 > Como mitigar erros de ponto flutuante em Python?

Como mitigar erros de ponto flutuante em Python?

Publicado em 2024-11-21
Navegar:981

How to Mitigate Floating Point Errors in Python?

Evitando erros de ponto flutuante em Python

No reino da programação, é essencial entender as complexidades dos cálculos de ponto flutuante, pois eles podem introduzir erros inesperados se não forem tratados adequadamente. Este artigo explora um exemplo prático que destaca as armadilhas da aritmética de ponto flutuante.

O problema da raiz quadrada

Considere uma função Python projetada para aproximar raízes quadradas:

def sqrt(num):
    root = 0.0
    while root * root 

Usando esta função, encontramos resultados surpreendentes:

>>> sqrt(4)
2.0000000000000013
>>> sqrt(9)
3.00999999999998

A aritmética de ponto flutuante explica essas imprecisões. Ao representar números fracionários, os computadores os armazenam como uma combinação de número inteiro e expoente. Devido às limitações nesta representação, certos valores decimais não podem ser representados com exatidão, levando a aproximações.

Compreendendo o erro

No código acima, o problema está no incremento usado para aumentar o valor raiz. Embora pretendamos adicionar um valor de 0,01, o valor real armazenado no registro de ponto flutuante é ligeiramente diferente e maior que 0,01.

Endereçando o erro

Para evitar erros de ponto flutuante, várias abordagens podem ser empregadas:

  • Usando o Módulo Decimal:
    O O módulo decimal em Python fornece aritmética decimal mais precisa. Ao substituir float por Decimal no código, obtemos resultados mais precisos:
from decimal import Decimal as D

def sqrt(num):
    root = D(0)
    while root * root 
Now, the function returns precise results, such as:

```
>>> sqrt(4)
Decimal('2.00')
>>> sqrt(9)
Decimal('3.00')
```
  • Usando incrementos de ponto não flutuante:
    Se usar o módulo Decimal não for uma opção, outra abordagem é usar valores de ponto flutuante que sejam exatamente representáveis ​​em binário, como 1/2**J. Isso envolve código mais complexo, mas garante incrementos precisos.
  • Empregamento de técnicas de análise numérica:
    A análise numérica oferece métodos especializados para lidar com cálculos matemáticos complexos. Técnicas como o método de Newton podem fornecer aproximações precisas de raiz quadrada.
Declaração de lançamento Este artigo foi reimpresso em: 1729493718 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