- um
double
é armazenado (simplificadamente) como dois números
inteiros, uma mantissa e um expoente, semelhante ao formato de
constantes com expoente
- assim como em
int
s, esses números inteiros têm certos limites de
tamanho
- muitos números reais, mesmo que “simples”, não podem ser
representados de forma exata, mas apenas de forma
aproximada
double
’s são chamados de números de ponto flutuante
(floating-point
numbers)
- mais detalhes, exemplos e visualizações [1, 2]
- “solução” ingênua: fazer comparações permitindo erros/tolerâncias. Por exemplo:
- digamos que nossa tolerância a erros é
double tol = 1e-6;
- vamos considerar um
double z
como “(quase) zero” se estiver no
intervalo (-tol
,+tol
)
- isso pode ser testado com a condição
z < tol && -z < tol
- podemos verificar se
double
s x
e y
são “(quase) iguais”
testando se x-y
é “(quase) zero”, ou seja, x-y < tol && y-x < tol