Результаты странного разделения (1023456789876543201 / 9 )

#python #integer-division

Вопрос:

У меня есть следующий фрагмент кода с довольно странным результатом.

Код Я:

 print("{:.2f}".format(1023456789876543201/9))
 

Результат:

 113717421097393696.00
 

Кодекс II:

 print("{:20d}".format(1023456789876543201//9))
 

Результат:

 113717421097393689
 

Почему Python возвращает неверный результат в первом примере кода? Я знаю об арифметике с плавающей запятой, но мне кажется, что это не так.

Комментарии:

1. «Я знаю об арифметике с плавающей запятой, но мне кажется, что это не так». На самом деле так оно и есть. Поплавки могут точно представлять только целые числа до 2^53. Если вам нужна точность, попробуйте использовать дробные или десятичные модули.

2. Может быть, попробовать использовать x//y .

3. В результате деления 1.137174210973937e 17 я предполагаю , что формат использует это значение, которое потеряло точность.

4. Печать только разделяемого значения (т. Е. без учета /9 ) может прояснить ситуацию.

5. @СуперСтормер. Ладно, кажется, теперь я все понял. Таким образом, все плавающие числа хранятся в Python как «обычные десятичные», как и в других языках, таких как C#, Java, с ограниченной точностью, верно? И Python использует «специальный» формат чисел ( rushter.com/blog/python-integer-implementation ) только для «истинных» целых чисел, верно?