Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 楼层划分//vs int()四舍五入_Python_Floating Point_Int_Rounding_Floor Division - Fatal编程技术网

Python 楼层划分//vs int()四舍五入

Python 楼层划分//vs int()四舍五入,python,floating-point,int,rounding,floor-division,Python,Floating Point,Int,Rounding,Floor Division,我是Python 3.6.0的新用户。我试着将两个数字相除,得到一个大的输出。然而,使用 return ans1 // ans2 使用时产生55347740058143507128 return int(ans1 / ans2) 生产55347740058143506432 哪个更准确?为什么如此?从这个意义上讲,地板整数分割更准确 这种构造int(ans1/ans2)的问题是,结果暂时是一个浮点(显然,在将其转换为整数之前),将舍入引入最近的浮点(舍入量取决于数字的大小)。这甚至可以通过尝

我是Python 3.6.0的新用户。我试着将两个数字相除,得到一个大的输出。然而,使用

return ans1 // ans2
使用时产生55347740058143507128

return int(ans1 / ans2)
生产55347740058143506432


哪个更准确?为什么如此?

从这个意义上讲,地板整数分割更准确

这种构造
int(ans1/ans2)
的问题是,结果暂时是一个浮点(显然,在将其转换为整数之前),将舍入引入最近的浮点(舍入量取决于数字的大小)。这甚至可以通过尝试通过浮点对该值进行往返来看出:

print(int(float(55347740058143507128)))

它打印
55347740058143506432
。因此,因为普通的
/
会产生一个浮点,这限制了它的精度。

第一个更精确,因为它给出了精确的整数结果

第二个将中间结果表示为浮点。浮点的分辨率有限(),而结果需要66位才能准确表示。这会导致精度下降

如果我们查看两个结果的十六进制表示:

>>> hex(55347740058143507128)
'0x3001aac56864d42b8L'
>>> hex(55347740058143506432)
'0x3001aac56864d4000L'
我们可以看到,结果中不符合53位尾数的最低有效位都被设置为零

直接查看舍入的一种方法是,不因除法而带来任何复杂情况:

>>> int(float(55347740058143507128))
55347740058143506432L

您需要指定您正在使用的语言。@zneak-Oh谢谢。我是个笨蛋,是的!没问题。您能否澄清您正在使用的Python版本?最后,能否运行
repr(ans1)
repr(ans2)
并发布结果?@zneak Ok。我使用的是3.6.0。我已将repr(ans1)打印为451590670066711754345182435986161482679531303945971812637081600000000,将repr(ans2)打印为8159152832478973434561126959611589272000000。欢迎使用stackoverflow。请看地图。下次,一定要用语言标记你的问题——大多数人都会用标记来寻找问题,所以大多数听众不会看到这个问题。