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.