Explorar a Representação de Ponto Flutuante
Nesta etapa, você explorará como os números de ponto flutuante (floating-point numbers) são representados em Python e as potenciais implicações que essa representação pode ter em comparações numéricas. Números de ponto flutuante são usados para representar números reais (números com casas decimais) em computadores. No entanto, devido à maneira como são armazenados na memória, eles são frequentemente aproximações dos números reais reais. Isso pode levar a resultados inesperados ao realizar comparações.
Vamos começar criando um arquivo Python chamado float_representation.py em seu diretório ~/project usando o editor VS Code.
## Create a floating-point number
x = 0.1 + 0.2
## Print the value of x
print(x)
Salve o arquivo e, em seguida, execute-o usando o seguinte comando no terminal:
python float_representation.py
Você pode esperar que a saída seja 0.3, mas provavelmente verá algo como isto:
0.30000000000000004
Isso ocorre porque 0.1 e 0.2 não podem ser representados exatamente como números de ponto flutuante. O resultado da adição é um número que está muito próximo de 0.3, mas não exatamente igual a ele.
Agora, vamos ver como essa imprecisão pode afetar as comparações. Adicione o seguinte código ao seu arquivo float_representation.py:
## Create a floating-point number
x = 0.1 + 0.2
## Check if x is equal to 0.3
if x == 0.3:
print("x is equal to 0.3")
else:
print("x is not equal to 0.3")
Salve o arquivo e execute-o novamente:
python float_representation.py
Você provavelmente verá a seguinte saída:
x is not equal to 0.3
Isso ocorre porque x não é exatamente igual a 0.3 devido ao problema de representação de ponto flutuante.
Para comparar números de ponto flutuante com precisão, você deve usar um valor de tolerância. Em vez de verificar a igualdade exata, verifique se a diferença absoluta entre os dois números é menor que um pequeno valor de tolerância.
Modifique seu arquivo float_representation.py para incluir uma tolerância:
## Create a floating-point number
x = 0.1 + 0.2
## Define a tolerance value
tolerance = 1e-9 ## A small value like 0.000000001
## Check if x is approximately equal to 0.3
if abs(x - 0.3) < tolerance:
print("x is approximately equal to 0.3")
else:
print("x is not approximately equal to 0.3")
Salve o arquivo e execute-o mais uma vez:
python float_representation.py
Agora, você deve ver a seguinte saída:
x is approximately equal to 0.3
Ao usar uma tolerância, você pode comparar com precisão números de ponto flutuante, apesar da imprecisão inerente em sua representação. Este é um conceito crucial para entender ao trabalhar com números de ponto flutuante em Python e outras linguagens de programação.