Вы можете знать следующий неожиданный фрагмент кода:
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 и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.