@GineTik

Неправильные вычисления и как это пофиксить?

Привет всем, у меня есть пример: 1 - 3.377852191807931e-49 * 0.1 * 1 = 1.0, то есть ответ это число перед знаком -(0.5 - 3.377852191807931e-49 * 0.1 * 1 = 0.5(так быть не должно)) но если 0 - 3.377852191807931e-49 * 0.1 * 1 = -3.377852191807931e-50

Вопросы:
1) что это?
2) как это пофиксить?
  • Вопрос задан
  • 103 просмотра
Решения вопроса 1
1 - 3.377852191807931e-49 * 0.1 * 1 = 1.0
запись 3.3e-49 означает 3.3 умножить на 10 в –49-й степени. Т.е. какое-то очень малое число.
Потом домножают на 0.1, получается вообще в –50-й: 0.(50 нулей)33

Без специальных библиотек вычисления с дробными числами выполняются с небольшими округлениями. Это неизбежно из-за двоичной системы исчисления и «всего лишь» 16-, 32- или 64-битного ограничения на запись числа. Отсюда парадокс:
>>> 0.1 + 0.2
0.30000000000000004

Как видите, ошибка округления 4e-16. А уж числа порядка 1e-50 тем более пропадут и будут считаться за ноль.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы