Middle
Niyə float ədədlərinin müqayisəsi düzgün olmaya bilər və bununla necə mübarizə aparmaq olar?
sobes.tech Süni İntellekt
AI-dan cavab
Nöqtəli ədədlərin (float) müqayisəsi yaddaşda onların təmsil olunma xüsusiyyətlərinə görə düzgün olmaya bilər. Nöqtəli ədədlər IEEE 754 formatında saxlanılır, bu isə hər zaman ondalık kəsrləri dəqiq şəkildə təmsil edə bilməz, bu da yuvarlama xətalarına səbəb olur.
Məsələn, ifadə 0.1 + 0.2 == 0.3 kiçik dəqiqlik fərqləri səbəbindən false qaytara bilər.
Bu problemi həll etmək üçün adətən ədədləri kiçik bir delta (epsilon) nəzərə alaraq müqayisə edirlər:
const epsilon = 1e-9
func floatEquals(a, b float64) bool {
return math.Abs(a - b) < epsilon
}
Beləliklə, birbaşa a == b müqayisəsi yerinə, ədədlər arasındakı fərqin kifayət qədər kiçik olub-olmadığını yoxlayırıq. Bu, ədədlərin qeyri-dəqiq təmsilindən və hesablamalarda yığılmış xətalardan qaçmağa kömək edir.