Python整数很长时的整数除法
Python integer division when integers are very long
我有一个 148 位的整数 N:
N = 189880498154874410908471072304455370977803974052993577744714297943955583553239505756289235529074177090189772883747055299991539896681082073700
如果我执行以下操作:
int(N/5)
我明白了
37976099630974880812875385175875453232636859166769727967703624184530129537145373074783104855861950095228086215792238563575229919019266998272
这是绝对错误的!!
相反,如果我对 mpmath 使用任意浮点精度,我会得到正确的结果
from mpmath import mp, mpf as f
mp.dps = 200; mp.pretty = True
f(N)/5
>> 37976099630974882181694214460891074195560794810598715548942859588791116710647901151257847105814835418037954576749411059998307979336216414740.0
那么,为什么第一个结果是错误的呢?我相信 Python 可以处理任意大小的整数
在python 3:
// 用于整数除法,这会给你正确的结果。
print(N//5)
输出:
37976099630974882181694214460891074195560794810598715548942859588791116710647901151257847105814835418037954576749411059998307979336216414740
在哪里
/ 用于浮点除法,因此在四舍五入时可能会出错。
我有一个 148 位的整数 N:
N = 189880498154874410908471072304455370977803974052993577744714297943955583553239505756289235529074177090189772883747055299991539896681082073700
如果我执行以下操作:
int(N/5)
我明白了
37976099630974880812875385175875453232636859166769727967703624184530129537145373074783104855861950095228086215792238563575229919019266998272
这是绝对错误的!!
相反,如果我对 mpmath 使用任意浮点精度,我会得到正确的结果
from mpmath import mp, mpf as f
mp.dps = 200; mp.pretty = True
f(N)/5
>> 37976099630974882181694214460891074195560794810598715548942859588791116710647901151257847105814835418037954576749411059998307979336216414740.0
那么,为什么第一个结果是错误的呢?我相信 Python 可以处理任意大小的整数
在python 3:
// 用于整数除法,这会给你正确的结果。
print(N//5)
输出:
37976099630974882181694214460891074195560794810598715548942859588791116710647901151257847105814835418037954576749411059998307979336216414740
在哪里 / 用于浮点除法,因此在四舍五入时可能会出错。