Рубрики
Без рубрики

Вы можете знать следующий неожиданный фрагмент кода: .1 + 0,1 + 0.1.3 Распечатать (а) # ЛОЖЬ СЛЕДУЮЩИЕСЯ ПОСЛЕ ПОСЛЕДНЕГО ОБЪЯСНЕНИЯ ИЗ У ОБУЧЕНИЯ ПУТЕЧНОЙ КОМПАНИИ PYTOR PYTOON: получите электронную книгу! Эта головоломка выполняет простое арифметическое вычисление, добавляющее значение поплавка 0,1. Вопрос, похоже, очень прост — но … Penimal: Плавая ловушка Python и как решить это Подробнее »

Вы можете знать следующий неожиданный фрагмент кода: .1 + 0,1 + 0.1.3 Распечатать (а) # ЛОЖЬ СЛЕДУЮЩИЕСЯ ПОСЛЕ ПОСЛЕДНЕГО ОБЪЯСНЕНИЯ ИЗ У ОБУЧЕНИЯ ПУТЕЧНОЙ КОМПАНИИ PYTOR PYTOON: получите электронную книгу! Эта головоломка выполняет простое арифметическое вычисление, добавляющее значение поплавка 0,1. Вопрос, похоже, очень прост — но … Penimal: Плавая ловушка Python и как решить это Подробнее »

Автор оригинала: Chris.

Вы можете знать следующий неожиданный фрагмент кода:

a = 0.1 + 0.1 + 0.1
b = 0.3
print(a == b)
# False

Следующее объяснение находится из учебной книги на основе головоломки Python:

Эта головоломка выполняет простое арифметическое вычисление, добавляющее значение поплавка 0,1.

Вопрос, кажется, очень просто, но, как мы увидимся, вообще не просто.

Ваш внутренний голос не так. И пока не так важно, почему это неправильно, важно, чтобы вы научитесь доверять вашу интуицию, и ваше желание быть ленивым мыслителем. В кодировании, предполагая, что вещи супер-простые – это смертельный грех.

В головоломке вы предположили, что число 0,1 представляет собой десятичное значение 0,1 или 1/10. Это естественно, но неверное предположение. Значение 0.1 не существует на вашем компьютере. Вместо этого ваш компьютер хранит каждый номер в двоичном формате, состоящий только из нулей и них.

Используйте онлайн-преобразователь для преобразования десятичного значения 0,1 в двоичное значение, и вы будете реализовать, что вы получите следующий номер: 0.000110011001100110011 …

Представление с плавающей точкой 0,1 в двоичном количестве имеет бесконечное количество цифр. Таким образом, ваш компьютер делает единственное, что может сделать в данный момент: ограничение количества цифр.

Это имеет следующий эффект. Десятичное число 0,1 представлено ближайшей с плавающей точкой № 0.10000000000000000005551115 … что можно представить в ограниченном пространстве.

Теперь легко понять, почему 0,1 + 0,1 + 0.1.3 Отказ Таким образом, ответ – Ложь Отказ

Как один из моих Премиум-члены , Альбрехт , правильно указал, проблема может быть исправлена с модулем Python Десятичная :

from decimal import Decimal

a = 0.1 + 0.1 + 0.1
b = 0.3
print(a == b)
# False

c = Decimal('0.1') + Decimal('0.1') + Decimal('0.1')
d = Decimal('0.3')
print(c == d)
# True

Вы можете увидеть, что равенство переменных C и D приводит к ожидаемой стоимости Правда Отказ

Куда пойти отсюда?

Понимание этих тонкостей трудно. Тем не менее, это также имеет решающее значение на вашем пути к эффективности убийцы Python.

Простое исправление – это работать через «Work Python Workon Works», пока вы не разработаете Super-Powers с чтением кода Python!

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.