任意精度整数算术:上限?

我需要将天花板功能应用于任意尺寸的(长)整数.
但是,部门会自动返回其操作数的类型,以便
例如:Math.ceil(7/4)返回1.我可以使用float,如:
Math.Ceil(7/float(4)),除了非常大的整数浮点数导致
无法接受的精度丧失.
寻找任意大小的商的天花板的最佳方法是什么
整数?
谢谢,
alasdair

# 回答1


alasdair 天花板(A/B)=(A+B-1)// B
# 回答2


Alasdair写道:
使用DivMod()同时获得商和剩余时间.将1添加到
if和只有其余的大于0的商.
在[11]中:def qceil(x,y):
....:"""找到商x/y的天花板.
....::
....:这对于非常大的Python长整数特别有用.
....::""""
....:q,r = divmod(x,y)
....:如果r 0:
....:q += 1
....:返回Q
....::
在[13]中:QCEIL(7,4)
出去[13]:2
在[14]中:QCEIL(8,4)
出去[14]:2
在[15]中:QCEIL(9,4)
出去[15]:3
在[16]中:QCEIL(10000000000000000000000000003,10)
OUT [16]:10000000000000000000000001L
- -
罗伯特·克恩(Robert Kern)
"我已经相信整个世界都是一个谜,无害的谜
这是我们自己疯狂地尝试解释它的可怕的
一个基本的真理."
-Umberto Eco
# 回答3


在3月8日,6:26*下午,Paul Rubin 天花板(A/B)=(A+B-1)// B
我更喜欢:
天花板(a/b)= - ( - a)// b
如果A和B是其他的,它也有效
比整数(例如有理数).
标记
# 回答4


马克·迪金森(Mark Dickinson)在星期六,2008年3月8日17:09:11 -0800写道:天花板(a/b)=(a+b -1)// b

我更喜欢:
天花板(a/b)= - ( - a)// b
如果A和B是整数以外的东西(例如,
有理数).

不幸的是,它没有给出正确的答案.
10.0
-11.0
看起来您已经混淆了天花板()和floor().
(这些错误可能会轻易发生,这就是为什么这样的基本
功能应该在标准库中,无论它们多么容易
实施.)
- -
史蒂文

# 回答5


在3月8日,8:48*PM,Steven d'Aprano cybersource.com.auwrote:
不幸的是,它没有给出正确的答案.
10.0
-11.0
看起来您已经混淆了天花板()和floor().
哎呀,你是对的.不,我没有混淆天花板和地板;
我放错了括号.我的意思是打字:
天花板(a/b)= - ( - a // b)
标记
# 回答6


保罗·鲁宾(Paul Rubin)在2008年3月8日星期六15:26:35 -0800写道:
天花板(A/B)=(A+B-1)// B

不幸的是,这无法可靠.
-3002399751580333.5
-3002399751580332.0
我没有声称这是最有效的方法,但是
应该管用:
DEF SplitFloat(F):
"""返回浮子的整数和分数."""
FP = ABS(F)%1.0
IP = ABS(F) - FP
如果f <0:
IP,fp = -ip,-fp
返回(IP,FP)
DEF CEIL(F):
IP,fp = splitfloat(f)
如果fp == 0:
返回IP
elif f <0:
返回IP
Els E:
返回IP + 1
-3002399751580333.0
3002399751580334.0
如果您的平台支持,它甚至适用于无限态度:
0.0
(免责声明:如果您认为1.0/inf是零的一点,则
因此,您希望ceil(1.0/inf)给出1.0,然后您会不同意
与我一起.)
- -
史蒂文

# 回答7


" Steven d'Aprano" 新闻:13 *************@corp.supernews.com ...
|马克·迪金森(Mark Dickinson)在2008年3月8日星期六17:09:11 -0800写道:
|
|在3月8日,下午6:26,保罗·鲁宾(Paul Rubin) | > alasdair |寻找任意商的天花板的最佳方法是什么
|大小的整数?
| >>
| >天花板(a/b)=(a+b-1)// b
| >
|我更喜欢:
| >
|天花板(a/b)= - ( - a)// b
明显的错字: - ( - a)// b == a // b
这应该是 - ( - a // b)== - (( - a)// b)
|不幸的是,它没有给出正确的答案.
|看起来您已经混淆了天花板()和floor().
|
| (这些错误可能会轻易发生,这就是为什么这样的基本
|功能应该在标准库中,无论它们多么容易
|实施.)
我让保罗说是否是错字,原因是回答太快还是
逻辑错误,但我怀疑前者. *任何*表达都可以误入歧途.
tjr
# 回答8


在3月8日,9:19*下午," Terry Reedy" 是:感谢您的更正!
我向我的教训即使是多余的...
这使我想起了以下括号的宝石
(请参阅最后一行):
def isqrt(n):
"""找到最接近sqrt(n)的整数,n呈正
整数."""
a,b = n,1
而a!= b:
a,b = a - n // a> 1,a
返回
标记
# 回答9


在阳光下,2008年3月9日01:48:21 +0000,史蒂文·d'Aprano写道:
当然,这是.
Math.ceil()和Math.floor()
我知道. *咳嗽*
- -
史蒂文
# 回答10


Alasdair在Sun,2008年3月9日10:11:53 +1100写道:
def quot_ceil(a,b):
"""返回长纹的商的整数上限.
q,r = divmod(a,b)
如果R:返回Q+1
else:返回Q
- -
史蒂文
# 回答11


在阳光下,2008年3月9日02:16:39 +0000,Steven D'Aprano写道:天花板(A/B)=(A +B-1)// B

不幸的是,这无法可靠.
但是,当然,您不打算与浮子一起工作,对吗?
叹.
我很高兴我对那些认为漂浮只是的人没有大声疾呼
像真实的时候没有.
- -
史蒂文

# 回答12


Steven d'Aprano -3002399751580333.5
-3002399751580332.0
我应该提到(A+B-1)// B期望A和B是积极的
整数.
# 回答13


保罗·鲁宾(Paul Rubin)在2008年3月8日星期六21:32:04 -0800写道:
哦,我认为这不会有任何区别.我想我看到了
今天到处都有漂浮,包括从墙壁上浮出水面.
- -
史蒂文
# 回答14


谢谢,所有 - 您最有帮助.顺便说一句,//做什么?我
尚未在手册中删除其定义.
-一个.
# 回答15


在s 联合国,2008年3月9日20:57:15 +1100,Alasdair写道: //是整数部门. 2 2 在Python 2.5及以上, /表示整数部门,除非您这样做 来自__future__进口部 在这种情况下 /是真实的部门,也就是说: 2 2.5 在python 3.x中, /将永远是真实的划分,您不需要 进口. - - 史蒂文

标签: python

添加新评论