#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, хотя гарантировать постоянное соблюдение этого равенства я не берусь.
Комментариев нет:
Отправить комментарий