
Баг: Сравнение чисел через `==` без учёта погрешности
Что делают:if 0.1 + 0.2 == 0.3 { fmt.Println("ok") } и удивляются, что условие ложно.
Почему ошибка:
В двоичной системе 0.1 и 0.2 не представляются точно, их сумма даёт 0.30000000000000004. Прямое сравнение float редко бывает верным.
Как правильно:
Сравнивать разницу с допустимой погрешностью (эпсилон):
if math.Abs(a+b - 0.3) < 1e-9 {
fmt.Println("равны с точностью до 1e-9")
}Загрузка...