Разница в делении long int в python 3 [дубликат]


На этот вопрос уже есть ответ здесь:

Я столкнулся с причудливой ситуацией, когда делал какое-то большое деление чисел в python.

int(1012337203685477580 / 2) = 506168601842738816

И

int(1012337203685477580 >> 1) = 506168601842738790 
Почему существует разница между этими двумя подходами? int () представляется по меньшей мере int64, потому что int(2^63-1) и 2^63 - 1 являются же ценность.
1 5

1 ответ:

В Python 3, / является истинным делением, поэтому вы получите результат с плавающей точкой и все проблемы точности, которые влечет за собой. Вместо этого используйте // для целочисленного деления:

>>> 1012337203685477580 / 2
5.061686018427388e+17
>>> 1012337203685477580 // 2
506168601842738790
>>> 1012337203685477580 >> 1
506168601842738790