Страницы

Поиск по вопросам

пятница, 13 марта 2020 г.

Точность вычислений в языке python

#python


Столкнулся с некой странностью с действительными числами в python.

Например, print(0.3+0.3+0.3) вместо вполне ожидаемых 0.9 выведет 0.8999999999999999.

Знаю про точность вычислений, про хранение в компьютере вещественных чисел, но почему,
print(0.3*3 == 0.9) выдает false?

UPD Можно обойти это, сравнивая вот так print('%.2f'%(0.3*3) == '%.2f'%(0.9))
Но есть ли какой-нибудь другой способ?
    


Ответы

Ответ 1



Потому что 0.3 - это не ровно 0.3, а, как вы сами предположили, немного меньше. Что и дает требуемую погрешность при умножении. Представьте, что по каким-то причинам компьютер сохраняет числа в формате 0.01 + 0.02k. В этом случае 0.3 будет преобразован в 0.299, а 0.9 - в 0.899. Теперь же, если умножить 0.3 на 3, будет получен результат 0.897, а не 0.899. Вышеописанный пример не имеет никакого отношения к реальности, но, надеюсь, показывает, как при умножении минимальная погрешность становится достаточно большой, чтобы результирующее число было округлено в нужную сторону. 0.3 + 0.3 + 0.3 же будет равно 0.3 * 3, хотя гарантировать постоянное соблюдение этого равенства я не берусь.

Комментариев нет:

Отправить комментарий