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

Баг: Вычитание близких чисел (катастрофическая потеря точности)

Что делают:
Вычитают 1.0000000000000002 - 1.0000000000000001 и ожидают 0.0000000000000001, но получают 1.1102230246251565e-16 – "мусор".

Почему ошибка:
При вычитании почти равных чисел старшие разряды уничтожаются, и остаётся только шум округления, который был в младших битах.

Как правильно:

  • По возможности переписывать формулу, чтобы избежать вычитания близких чисел.

  • Использовать math-функции, которые реализуют устойчивые алгоритмы (например, math.Hypot вместо sqrt(a*a + b*b)).

Загрузка...