Middle
Kodėl palyginimas su float skaičiais gali būti netikslus ir kaip su tuo kovoti?
sobes.tech AI
Atsakymas iš AI
Palyginti plaukiojančio taško (float) skaičius gali būti neteisinga dėl jų atvaizdavimo atmintyje ypatybių. Plaukiojančio taško skaičiai saugomi IEEE 754 formatu, kuris ne visada gali tiksliai atvaizduoti dešimtainius trupmenis, dėl to kyla apvalinimo klaidų.
Pavyzdžiui, išraiška 0.1 + 0.2 == 0.3 gali grąžinti false dėl mažų netikslumų.
Sprendžiant šią problemą, paprastai lyginami skaičiai atsižvelgiant į mažą delta (epsilon):
const epsilon = 1e-9
func floatEquals(a, b float64) bool {
return math.Abs(a - b) < epsilon
}
Taip vietoj tiesioginio a == b palyginimo tikrinama, ar skaičių skirtumas yra pakankamai mažas, kad juos būtų galima laikyti lygiais. Tai padeda išvengti netikslios skaičių reprezentacijos ir klaidų kaupimosi skaičiavimuose.