Sobes.tech
Middle

Zašto poređenje float brojeva može biti netačno i kako se s tim boriti?

sobes.tech АИ

Одговор од АИ

Upoređivanje brojeva sa pokretnom tačkom (float) može biti netačno zbog karakteristika njihove reprezentacije u memoriji. Brojevi sa pokretnom tačkom se čuvaju u IEEE 754 formatu, koji ne može uvek tačno da predstavi decimalne razlomke, što dovodi do grešaka zaokruživanja.

Na primer, izraz 0.1 + 0.2 == 0.3 može vratiti false zbog malih netačnosti.

Da bismo rešili ovaj problem, obično upoređujemo brojeve uzimajući u obzir malu razliku (epsilon):

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

Na ovaj način, umesto direktnog poređenja a == b, proveravamo da li je razlika između brojeva dovoljno mala da ih smatramo jednakim. Ovo pomaže da se izbegnu greške povezane sa netačnom reprezentacijom brojeva i akumulacijom grešaka u računanjima.