Sobes.tech
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.