Sobes.tech
Middle

Por que a comparação de números float pode ser incorreta e como lidar com isso?

sobes.tech IA

Resposta da IA

A comparação de números de ponto flutuante (float) pode ser incorreta devido às características da sua representação na memória. Os números de ponto flutuante são armazenados no formato IEEE 754, que nem sempre consegue representar com precisão as frações decimais, levando a erros de arredondamento.

Por exemplo, a expressão 0.1 + 0.2 == 0.3 pode retornar false devido a pequenas imprecisões.

Para lidar com esse problema, geralmente comparam-se os números considerando uma pequena delta (épsilon):

const epsilon = 1e-9
func floatEquals(a, b float64) bool {
    return math.Abs(a - b) < epsilon
}

Assim, em vez de comparar diretamente a == b, verifica-se se a diferença entre os números é suficientemente pequena para considerá-los iguais. Isso ajuda a evitar erros relacionados à representação imprecisa dos números e ao acúmulo de erros nos cálculos.