Problema de imprecisão dos números de ponto flutuante
Os números de ponto flutuante em Python, e em muitas outras linguagens de programação, são representados internamente como aproximações binárias de valores decimais.
Devido a essa representação binária, alguns números decimais não podem ser exatamente representados com precisão. Isso pode levar a resultados inesperados em cálculos envolvendo números de ponto flutuante.
Para mais informações: double-precision floating-point format.
Problema de Precisão
Por exemplo, a representação interna de 0.1
em binário não é exata, o que pode resultar em imprecisões quando operações matemáticas são realizadas:
resultado = 0.1 + 0.1 + 0.1 - 0.3
print(resultado) # Resultado esperado: 0.0, mas devido à imprecisão: 5.551115123125783e-17
Uso da função round
A função embutida round()
pode ajudar a mitigar esse problema, arredondando números de ponto flutuante para um número específico de casas decimais:
resultado = round(0.1 + 0.1 + 0.1 - 0.3, 2)
print(resultado) # 0.0
Módulo decimal
Quando uma alta precisão é necessária, a biblioteca decimal
pode ser usada. Ela oferece aritmética decimal de ponto fixo para evitar as imprecisões inerentes aos números de ponto flutuante. Para utilizar essa biblioteca, é necessário criar objetos Decimal
e usar as funções e operadores fornecidos por ela:
from decimal import Decimal
num1 = Decimal("0.1")
num2 = Decimal("0.7")
resultado = num1 + num2
print(resultado) # 0.8
Conclusão
A imprecisão dos números de ponto flutuante é uma característica comum em muitas linguagens de programação. É importante estar ciente dessa imprecisão e usar abordagens apropriadas, como a função round()
ou a biblioteca decimal
, dependendo da necessidade de precisão nos cálculos.