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, შემოწმდება, არის თუ არა რიცხვებს შორის განსხვავება საკმარისად მცირე, რათა მათ მიიჩნიონ თანაბრად. ეს ეხმარება თავიდან აიცილოს რიცხვების არაზუსტი წარმოდგენა და გამოთვლებში დაგროვილი შეცდომები.