【发布时间】: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。如果您遇到整数除法不足的情况,请使用fractions或decimal模块。 -
/进行浮点除法,您会遇到浮点限制。使用// -
您正在使用真正的除法。这总是会产生一个具有固定大小的
float对象。如果您有int对象,并且不希望损失精度,请使用整数除法运算符://intPython 中的对象是任意大小的。只要你有内存/地址空间,你就可以做到。
标签: python python-3.x long-integer integer-division