Сайт работает в тестовом режиме - все замечания, предложения и информацию о найденных ошибках направляйте, пожалуйста, в Telegram-группу
Курс в процессе наполнения. Полный курс доступен на Степике

Баг: Сравнение чисел через `==` без учёта погрешности

Что делают:
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")
}

Загрузка...