Найти - Пользователи
Полная версия: Произведение множителей не совпадает с исходным числом
Начало » Python для новичков » Произведение множителей не совпадает с исходным числом
1
Neskazhui
Приветствую!

Есть два больших числа:
x = 131158418633125768138423674409070931693027476165633955142034418510136533205342942908180626591619491740423366691461424787672338239349695041293541585461382577849020116487088500553236655324444570419972596873736037440690801359396690700348429938020953538258568079532966610461079245006824764025401619034266887281579
y = 11298074779406867643323870100097334800590034823281809866918264946896423935183110944876200664016379108784946126702256387422951005442469553642837132067306523

Делю одно на другое, получаю z :
z = x / y = 11608917554005726684452334020617237473283411851303072689503025461262759023091778202358129976438625668446844450363938567929777894863497608779625981397696512

Для проверки делаю обратное действие:
x2 = z * y = 131158418633125764258290336896419271315810615504953084257241366171595458346863922512002768375620070655683057713555016494080114169772079683717393186400442419673218035020880829350843878811330017577362887584534586079793721938971354462324377338779914548261934233231194477363426851579583393796436835901625233047552

И вижу, что числа разные. Совпадают только первые 17 знаков. Вопрос: почему?
first-step
В этом нет ничего страшного. Не обращайте внимания ) бывает и хуже ситуации
py.user.next
Neskazhui
Совпадают только первые 17 знаков. Вопрос: почему?
Скорее всего, числа дробные, а дробные числа имеют ограниченную точность.

  
>>> n1
131158418633125768138423674409070931693027476165633955142034418510136533205342942908180626591619491740423366691461424787672338239349695041293541585461382577849020116487088500553236655324444570419972596873736037440690801359396690700348429938020953538258568079532966610461079245006824764025401619034266887281579
>>> n2
11298074779406867643323870100097334800590034823281809866918264946896423935183110944876200664016379108784946126702256387422951005442469553642837132067306523
>>> n3 = divmod(n1, n2)[0]
>>> n3
11608917554005727050577194426734082860989444014788750284473538256838699740238485532550251743043271566166570820746019480868564692112726936259914035638269873
>>> n3 * n2 == n1
True
>>>
lefmails
Наверное зависит от типа данных int, float и тд. они же ограничены в размере
Neskazhui
Числа целые, проверял с помощью x.is_integer().
Neskazhui
py.user.next
Ваш вариант сработал. Удивительно. Спасибо!
py.user.next
Neskazhui
Числа целые, проверял с помощью x.is_integer().
Деление по умолчанию даёт вещественный результат. (Во втором питоне целочисленный, в третьем питоне вещественный.)

Кстати, если точно знаешь, что оно делится нацело, то можешь целочисленное деление использовать:
  
>>> n1 = 131158418633125768138423674409070931693027476165633955142034418510136533205342942908180626591619491740423366691461424787672338239349695041293541585461382577849020116487088500553236655324444570419972596873736037440690801359396690700348429938020953538258568079532966610461079245006824764025401619034266887281579
>>> n2 = 11298074779406867643323870100097334800590034823281809866918264946896423935183110944876200664016379108784946126702256387422951005442469553642837132067306523
>>> n3 = n1 // n2
>>> n3
11608917554005727050577194426734082860989444014788750284473538256838699740238485532550251743043271566166570820746019480868564692112726936259914035638269873
>>> n3 * n2 == n1
True
>>>
Если же не знаешь точно, делится или нет нацело, то надо divmod() и проверять остаток от деления (правое число результата).
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB