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, санҷида мешавад, ки фарқ байни рақамҳо хурсангии кофӣ хурд аст, то онҳоро баробар ҳисоб кунанд. Ин кӯмак мекунад, ки хатогиҳои вобаста ба намоиши нодуруст ва ҷамъшавии хатоҳо дар ҳисобҳо пешгирӣ карда шаванд.