Middle
Proč může být porovnání float čísel nesprávné a jak s tím bojovat?
sobes.tech AI
Odpověď od AI
Porovnání čísel s plovoucí desetinnou čárkou (float) může být nesprávné kvůli vlastnostem jejich reprezentace v paměti. Čísla s plovoucí desetinnou čárkou jsou uložena ve formátu IEEE 754, který nemusí vždy přesně reprezentovat desetinné zlomky, což vede k zaokrouhlovacím chybám.
Například výraz 0.1 + 0.2 == 0.3 může vrátit false kvůli drobným nepřesnostem.
Pro řešení tohoto problému se obvykle porovnávají čísla s ohledem na malou delta (epsilon):
const epsilon = 1e-9
func floatEquals(a, b float64) bool {
return math.Abs(a - b) < epsilon
}
Tímto způsobem se místo přímého porovnání a == b kontroluje, zda je rozdíl mezi čísly dostatečně malý, aby je bylo možné považovat za rovné. To pomáhá zabránit chybám spojeným s nepřesnou reprezentací čísel a s hromaděním chyb při výpočtech.