#python #float
Объясните, из-за чего происходит вот такая штука: >>> 1 - 0.7 0.30000000000000004 и как с этим бороться?
Ответы
Ответ 1
Такова природа чисел с плавающей запятой: они описываются через экспоненту, и их "шаг" может выглядеть довольно странно, однако обычно он достаточно мал, чтобы избежать серьезных ошибок. В документации, насколько понял, рекомендуют использовать round().Ответ 2
Дело в том, что в памяти числа хранятся в двоичном виде, а 0.3 в двоичном виде выглядит как бесконечная периодическая дробь (0.0100110011001...). В память бесконечное число цифр, понятное дело, не запишешь, поэтому реально там хранится число чуть меньше, чем 0.3. При вычитании этого числа из 1 и выводе на экран эта небольшая разница и выплывает наружу. Что с этим делать - смириться с несовершенством мира и при выводе округлять до приемлемого числа знаков. Подробнее о представлении чисел с плавающей запятой тонкостях операций с ними: статья на ХабреОтвет 3
Ещё можно попытаться привести числа с плавающей запятой к целым числам. Например, следующее неравенство: 1 - 0.7 > 0.3 (на которое python мне ответил True) можно заменить на эквивалентное домножив обе части на 10: 10 - 7 > 3 Тут я уже, как и ожидалось, получил False.
Комментариев нет:
Отправить комментарий