Introdução
Neste laboratório, você aprenderá como verificar se um número está próximo de outro em Python, abordando os desafios das comparações de números de ponto flutuante. Você começará entendendo o conceito de proximidade numérica e sua importância devido à maneira como os computadores representam números de ponto flutuante, o que pode levar a resultados inesperados ao compará-los quanto à igualdade. Um script Python ilustrará esse conceito calculando 0.1 + 0.2 e comparando o resultado com 0.3, demonstrando o potencial de desigualdade devido à representação de ponto flutuante.
O laboratório então o guiará através do cálculo da diferença absoluta entre dois números como uma abordagem para determinar a proximidade. Finalmente, você aprenderá como usar a função math.isclose() para comparações mais robustas de números de ponto flutuante, levando em consideração tanto as tolerâncias relativas quanto as absolutas.
Entenda a Proximidade Numérica
Nesta etapa, exploraremos o conceito de proximidade numérica e sua importância na programação, especialmente ao lidar com números de ponto flutuante. Devido à maneira como os computadores representam números de ponto flutuante, eles são frequentemente aproximações de números reais. Isso pode levar a resultados inesperados ao compará-los quanto à igualdade.
A proximidade numérica nos ajuda a determinar se dois números estão "suficientemente próximos" para serem considerados iguais, mesmo que não sejam exatamente os mesmos. Isso é particularmente útil ao lidar com cálculos que envolvem aritmética de ponto flutuante.
Vamos começar criando um script Python para ilustrar esse conceito.
Abra o editor VS Code no ambiente LabEx.
Crie um novo arquivo chamado
proximity.pyno diretório~/project.~/project/proximity.pyAdicione o seguinte código a
proximity.py:## proximity.py num1 = 0.1 + 0.2 num2 = 0.3 print(f"num1 is: {num1}") print(f"num2 is: {num2}") if num1 == num2: print("num1 and num2 are equal") else: print("num1 and num2 are not equal")Este script calcula
0.1 + 0.2e compara o resultado com0.3.Salve o arquivo e execute-o usando o seguinte comando no terminal:
python ~/project/proximity.pyVocê deve ver uma saída semelhante a esta:
num1 is: 0.30000000000000004 num2 is: 0.3 num1 and num2 are not equalComo você pode ver,
num1enum2não são exatamente iguais devido à representação de ponto flutuante, embora matematicamente devessem ser. É aqui que o conceito de proximidade numérica se torna importante. Nas próximas etapas, exploraremos maneiras de lidar com essa situação.
Calcular a Diferença Absoluta
Nesta etapa, aprenderemos como calcular a diferença absoluta entre dois números. A diferença absoluta é a magnitude da diferença entre dois números, independentemente de sua ordem. Em outras palavras, é a diferença positiva entre dois números.
Podemos usar a função abs() em Python para calcular a diferença absoluta. A função abs() retorna o valor absoluto de um número.
Vamos modificar o script proximity.py da etapa anterior para calcular a diferença absoluta entre num1 e num2.
Abra o arquivo
proximity.pyno diretório~/projectusando o editor VS Code.Modifique o código para calcular a diferença absoluta:
## proximity.py num1 = 0.1 + 0.2 num2 = 0.3 print(f"num1 is: {num1}") print(f"num2 is: {num2}") absolute_difference = abs(num1 - num2) print(f"The absolute difference between num1 and num2 is: {absolute_difference}") if absolute_difference < 0.00001: ## Using a small tolerance print("num1 and num2 are approximately equal") else: print("num1 and num2 are not approximately equal")Neste código, calculamos a diferença absoluta entre
num1enum2usando a funçãoabs(). Em seguida, comparamos a diferença absoluta com um pequeno valor de tolerância (0.00001 neste caso). Se a diferença absoluta for menor que a tolerância, consideramos que os números são aproximadamente iguais.Salve o arquivo e execute-o usando o seguinte comando no terminal:
python ~/project/proximity.pyVocê deve ver uma saída semelhante a esta:
num1 is: 0.30000000000000004 num2 is: 0.3 The absolute difference between num1 and num2 is: 4.440892098500626e-17 num1 and num2 are approximately equalAgora, o script identifica corretamente que
num1enum2são aproximadamente iguais, considerando a diferença absoluta e um valor de tolerância. Essa abordagem é mais robusta do que comparar diretamente números de ponto flutuante quanto à igualdade.
Use math.isclose() para Floats
Nesta etapa, aprenderemos como usar a função math.isclose() para comparar números de ponto flutuante quanto à igualdade aproximada. A função math.isclose() é uma maneira mais robusta e recomendada de comparar números de ponto flutuante do que usar uma tolerância fixa.
A função math.isclose() recebe dois números como entrada e retorna True se eles estiverem próximos um do outro dentro de uma tolerância especificada, e False caso contrário. Ela fornece dois parâmetros de tolerância: rel_tol (tolerância relativa) e abs_tol (tolerância absoluta).
Vamos modificar o script proximity.py da etapa anterior para usar a função math.isclose().
Abra o arquivo
proximity.pyno diretório~/projectusando o editor VS Code.Modifique o código para usar
math.isclose():## proximity.py import math num1 = 0.1 + 0.2 num2 = 0.3 print(f"num1 is: {num1}") print(f"num2 is: {num2}") if math.isclose(num1, num2): print("num1 and num2 are approximately equal") else: print("num1 and num2 are not approximately equal")Neste código, importamos o módulo
mathe usamos a funçãomath.isclose()para compararnum1enum2. Usamos os valores padrão pararel_toleabs_tol, que são adequados para a maioria dos casos.Salve o arquivo e execute-o usando o seguinte comando no terminal:
python ~/project/proximity.pyVocê deve ver uma saída semelhante a esta:
num1 is: 0.30000000000000004 num2 is: 0.3 num1 and num2 are approximately equalO script agora identifica corretamente que
num1enum2são aproximadamente iguais usando a funçãomath.isclose(). Esta é a maneira recomendada de comparar números de ponto flutuante quanto à igualdade aproximada em Python.
Resumo
Neste laboratório, começamos explorando o conceito de proximidade numérica e sua importância ao comparar números de ponto flutuante em Python. Devido à forma como os computadores representam esses números, as comparações diretas de igualdade podem ser pouco confiáveis. Criamos um script proximity.py para demonstrar esse problema, onde 0.1 + 0.2 foi comparado a 0.3, revelando que eles não são exatamente iguais devido à representação de ponto flutuante.
O laboratório então introduziu a necessidade de métodos alternativos para determinar se dois números são "suficientemente próximos" para serem considerados iguais, preparando o terreno para explorar técnicas como o cálculo da diferença absoluta em etapas subsequentes (conteúdo truncado).



