在python中处理长整数除法[重复]

Posted

技术标签:

【中文标题】在python中处理长整数除法[重复]【英文标题】:Handling long integer-divisions in python [duplicate] 【发布时间】:2019-02-11 20:32:19 【问题描述】:

我观察到 python 整数除法中的数据丢失。 下面是一个示例:

In [37]: 1881676377427221798261593926550420634004875213170503083 * 123456789789456123Out[37]: 232305724979817822068561403710502859128427941904411569030164388864727209

In [38]: int(232305724979817822068561403710502859128427941904411569030164388864727209 / 123456789789456123)Out[38]: 1881676377427221679799422390196630516487239698149801984

In [39]: 232305724979817822068561403710502859128427941904411569030164388864727209 / 123456789789456123Out[39]: 1.8816763774272217e+54

观察:在多次尝试使用随机长整数后,我观察到数字似乎在尾数指数格式中丢失精度的位置附近有所不同。

谁能帮我知道我在哪里失踪? (或者这真的是一个限制!)

【问题讨论】:

使用// 而不是/?对于任何整数a,b(即使有数百位数字)a*b//b 将始终等于a。如果您遇到整数除法不足的情况,请使用fractionsdecimal 模块。 / 进行浮点除法,您会遇到浮点限制。使用// 您正在使用真正的除法。这总是会产生一个具有固定大小的float 对象。如果您有 int 对象,并且不希望损失精度,请使用整数除法运算符:// int Python 中的对象是任意大小的。只要你有内存/地址空间,你就可以做到。 【参考方案1】:

在 Python 3 中,整数除法不再是默认设置。如果您想在 Python 3 中使用整数除法,您需要使用 // 运算符而不是 /

>>> 232305724979817822068561403710502859128427941904411569030164388864727209 / 123456789789456123
1.8816763774272217e+54

>>> 232305724979817822068561403710502859128427941904411569030164388864727209 // 123456789789456123
1881676377427221798261593926550420634004875213170503083

【讨论】:

以上是关于在python中处理长整数除法[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python hash() 不能处理长整数?

Python-如何确定我的系统可以处理的最大/最小 int/long/float/复数 [重复]

在 x86 汇编中使用整数除法处理百分比

在处理整数除法时,有没有办法收集同类项?

python基础2 - 运算符

在python中用floordiv除负数[重复]