Middle
Prečo môže byť porovnanie float čísel nesprávne a ako s tým bojovať?
sobes.tech AI
Odpoveď od AI
Porovnanie čísel s plávajúcou desatinnou čiarkou (float) môže byť nesprávne kvôli vlastnostiam ich reprezentácie v pamäti. Čísla s plávajúcou desatinnou čiarkou sú uložené vo formáte IEEE 754, ktorý nemôže vždy presne reprezentovať desatinné zlomky, čo vedie k zaokrúhľovacím chybám.
Napríklad výraz 0.1 + 0.2 == 0.3 môže vrátiť false kvôli drobným nepresnostiam.
Na riešenie tohto problému sa zvyčajne porovnávajú čísla s ohľadom na malú delta (epsilon):
const epsilon = 1e-9
func floatEquals(a, b float64) bool {
return math.Abs(a - b) < epsilon
}
Týmto spôsobom sa namiesto priameho porovnania a == b kontroluje, či je rozdiel medzi číslami dostatočne malý na to, aby ich bolo možné považovať za rovné. To pomáha predísť chybám spojeným s nepresnou reprezentáciou čísel a s hromadením chýb pri výpočtoch.