在python中处理长整数除法[重复]
Posted
技术标签:
【中文标题】在python中处理长整数除法[重复]【英文标题】:Handling long integer-divisions in python [duplicate] 【发布时间】:2019-02-11 20:32:19 【问题描述】:我观察到 python 整数除法中的数据丢失。 下面是一个示例:
In [37]: 1881676377427221798261593926550420634004875213170503083 * 123456789789456123
Out[37]: 232305724979817822068561403710502859128427941904411569030164388864727209
In [38]: int(232305724979817822068561403710502859128427941904411569030164388864727209 / 123456789789456123)
Out[38]: 1881676377427221679799422390196630516487239698149801984
In [39]: 232305724979817822068561403710502859128427941904411569030164388864727209 / 123456789789456123
Out[39]: 1.8816763774272217e+54
观察:在多次尝试使用随机长整数后,我观察到数字似乎在尾数指数格式中丢失精度的位置附近有所不同。
谁能帮我知道我在哪里失踪? (或者这真的是一个限制!)
【问题讨论】:
使用//
而不是/
?对于任何整数a,b
(即使有数百位数字)a*b//b
将始终等于a
。如果您遇到整数除法不足的情况,请使用fractions
或decimal
模块。
/
进行浮点除法,您会遇到浮点限制。使用//
您正在使用真正的除法。这总是会产生一个具有固定大小的float
对象。如果您有 int
对象,并且不希望损失精度,请使用整数除法运算符://
int
Python 中的对象是任意大小的。只要你有内存/地址空间,你就可以做到。
【参考方案1】:
在 Python 3 中,整数除法不再是默认设置。如果您想在 Python 3 中使用整数除法,您需要使用 //
运算符而不是 /
。
>>> 232305724979817822068561403710502859128427941904411569030164388864727209 / 123456789789456123
1.8816763774272217e+54
>>> 232305724979817822068561403710502859128427941904411569030164388864727209 // 123456789789456123
1881676377427221798261593926550420634004875213170503083
【讨论】:
以上是关于在python中处理长整数除法[重复]的主要内容,如果未能解决你的问题,请参考以下文章