Форум сайта python.su
0
Приветствую!
Есть два больших числа:
x = 131158418633125768138423674409070931693027476165633955142034418510136533205342942908180626591619491740423366691461424787672338239349695041293541585461382577849020116487088500553236655324444570419972596873736037440690801359396690700348429938020953538258568079532966610461079245006824764025401619034266887281579
y = 11298074779406867643323870100097334800590034823281809866918264946896423935183110944876200664016379108784946126702256387422951005442469553642837132067306523
Делю одно на другое, получаю z :
z = x / y = 11608917554005726684452334020617237473283411851303072689503025461262759023091778202358129976438625668446844450363938567929777894863497608779625981397696512
Для проверки делаю обратное действие:
x2 = z * y = 131158418633125764258290336896419271315810615504953084257241366171595458346863922512002768375620070655683057713555016494080114169772079683717393186400442419673218035020880829350843878811330017577362887584534586079793721938971354462324377338779914548261934233231194477363426851579583393796436835901625233047552
И вижу, что числа разные. Совпадают только первые 17 знаков. Вопрос: почему?
Офлайн
0
В этом нет ничего страшного. Не обращайте внимания ) бывает и хуже ситуации
Офлайн
857
NeskazhuiСкорее всего, числа дробные, а дробные числа имеют ограниченную точность.
Совпадают только первые 17 знаков. Вопрос: почему?
>>> n1 131158418633125768138423674409070931693027476165633955142034418510136533205342942908180626591619491740423366691461424787672338239349695041293541585461382577849020116487088500553236655324444570419972596873736037440690801359396690700348429938020953538258568079532966610461079245006824764025401619034266887281579 >>> n2 11298074779406867643323870100097334800590034823281809866918264946896423935183110944876200664016379108784946126702256387422951005442469553642837132067306523 >>> n3 = divmod(n1, n2)[0] >>> n3 11608917554005727050577194426734082860989444014788750284473538256838699740238485532550251743043271566166570820746019480868564692112726936259914035638269873 >>> n3 * n2 == n1 True >>>
Офлайн
0
Наверное зависит от типа данных int, float и тд. они же ограничены в размере
Офлайн
0
Числа целые, проверял с помощью x.is_integer().
Офлайн
0
py.user.nextВаш вариант сработал. Удивительно. Спасибо!
Офлайн
857
NeskazhuiДеление по умолчанию даёт вещественный результат. (Во втором питоне целочисленный, в третьем питоне вещественный.)
Числа целые, проверял с помощью x.is_integer().
>>> n1 = 131158418633125768138423674409070931693027476165633955142034418510136533205342942908180626591619491740423366691461424787672338239349695041293541585461382577849020116487088500553236655324444570419972596873736037440690801359396690700348429938020953538258568079532966610461079245006824764025401619034266887281579 >>> n2 = 11298074779406867643323870100097334800590034823281809866918264946896423935183110944876200664016379108784946126702256387422951005442469553642837132067306523 >>> n3 = n1 // n2 >>> n3 11608917554005727050577194426734082860989444014788750284473538256838699740238485532550251743043271566166570820746019480868564692112726936259914035638269873 >>> n3 * n2 == n1 True >>>
Отредактировано py.user.next (Апрель 19, 2019 16:32:42)
Офлайн