Sobes.tech
Middle

Ինչու՞ կարող է սխալ լինել float թվերի համեմատությունը և ինչպես պայքարել դրա դեմ։

sobes.tech AI

Պատասխան AI-ից

Նկատեք, որ թռուցիկ թվերի (float) համեմատությունը կարող է լինել սխալ, քանի որ դրանք ներկայացվում են հիշողության մեջ։ Թռուցիկ թվերը պահվում են IEEE 754 ձևաչափով, որը միշտ չէ, որ կարող է ճշգրիտ ներկայացնել տասնորդական մասնաբաժինները, ինչը հանգեցնում է ռաունդինգի սխալների։

Օրինակ, արտահայտությունը 0.1 + 0.2 == 0.3 կարող է վերադարձնել false փոքր սխալների պատճառով։

Այս խնդիրը լուծելու համար սովորաբար համեմատում ենք թվերը հաշվի առնելով փոքր դելտա (epsilon):

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

Այսպիսով, փոխարենը ուղղակի համեմատելու a == b, ստուգվում է, արդյոք թվերի տարբերությունը բավականին փոքր է, որպեսզի դրանք համարվեն հավասար։ Սա օգնում է խուսափել թվերի անճշտ ներկայացումից և հաշվարկներում սխալների կուտակումից։