👨🏻💻 Пояснение к предыдущему вопросу 👆
В первой строке через сдвиговый регистр записана операция возведения в степень 2^53+1. Важно, что это число точно представимо Python в виде целого (int). При добавлении 1.0 происходит преобразование целочисленного типа данных в тип данных float. Число уже не может быть представлено точно. При этом важно, что по правилам округления в Python оно преобразуется к N-1.
Итак, в левой части для того, чтобы произвести операцию сложения, x преобразуется во float, в результате преобразования и округления оно представляется в виде числа N-1. Сумма с 1.0 дает исходное число N, которое в результате округления полученной float-суммы вновь теряет единицу и, таким образом, слева float-число N-1, а справа int-число, содержащее исходное значение N.
Во втором случае происходит явное приведение числа к типу float, и проблема пропадает.
Python Community
3.8K ·