@brsubota

Почему идет неверное деление в python?

Есть число:
115792089237316195423570985008687907852837564279074904382605163141518161494336


Его необходимо разделить на 200 в одной функции, а потом восстановить в другой. В случае если деление будет с остатком, его необходимо просто округлить до целых числел.

Пробуем разделить:
int(115792089237316195423570985008687907852837564279074904382605163141518161494336 / 200)

#Результат
578960446186580989169890256985866605831065615886922339113810373410511912960


В другой функции пробуем восстановить число:
int(578960446186580989169890256985866605831065615886922339113810373410511912960 * 200)

#Результат
115792089237316197833978051397173321166213123177384467822762074682102382592000


Итого у нас получилось 2 разных числа. Оно понятно, потому что мы округляли через int() в меньшую сторону.
Но вот вопрос:
115792089237316195423570985008687907852837564279074904382605163141518161494336 - первое исходное число
115792089237316197833978051397173321166213123177384467822762074682102382592000 - второе число, которое мы округлил в меньшую строну
Обратите внимание на числа, которые я выделил жирным в предыдущих двух строках.
Почему второе стало больше, да тем более в таком объеме?
  • Вопрос задан
  • 528 просмотров
Решения вопроса 1
tumbler
@tumbler Куратор тега Python
бекенд-разработчик на python
115792089237316195423570985008687907852837564279074904382605163141518161494336 / 200


Вот это - число с плавающей точкой, самая главная причина потери точности
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы