Sobes.tech
Middle

Waarom kan het vergelijken van float-getallen onjuist zijn en hoe hiermee om te gaan?

sobes.tech AI

Antwoord van AI

Vergelijking van drijvende-komma-getallen (float) kan onjuist zijn vanwege de kenmerken van hun representatie in het geheugen. Drijvende-komma-getallen worden opgeslagen in het IEEE 754-formaat, dat niet altijd decimale breuken nauwkeurig kan weergeven, wat leidt tot afrondingsfouten.

Bijvoorbeeld, de uitdrukking 0.1 + 0.2 == 0.3 kan false retourneren vanwege kleine onnauwkeurigheden.

Om dit probleem aan te pakken, vergelijken we meestal de getallen met inachtneming van een kleine delta (epsilon):

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

Op deze manier wordt in plaats van directe vergelijking a == b gecontroleerd of het verschil tussen de getallen klein genoeg is om ze als gelijk te beschouwen. Dit helpt fouten te voorkomen die verband houden met de onnauwkeurige representatie van getallen en de opeenstapeling van fouten in berekeningen.