[英]How do I find the largest integer less than x?
如果x
是2.3
,则math.floor(x)
返回2.0
,小于或等于x
的最大整数(作为float。)
我将如何得到i
的最大整数严格小于x
(作为一个整数)?
我想出的最好的是:
i = int(math.ceil(x)-1)
有没有更好的办法?
注意,如果x
是2.0
那么math.floor(x)
返回2.0
但我需要一个小于2.0
的最大整数,即1
。
math.ceil(x)-1
是正确的,这是证明。
如果x
在Z (整数集)中,则math.ceil(x)
= x
。 因此math.ceil(x)-1
= x-1
,小于x
的最大整数。
否则我们有x
中的R \\ Z和math.ceil(x)
是最小的整数y
使得x
≤ y
。 但随后y-1
是整数比的最小整数,使得较小的x
≤ y
,因此x
> y-1
并通过施工y-1
是最大的此类整数小于x
。
这很简单,我不会与那些懒得if
- else
。 但是为了避免使用浮点数计算错误,我会在int
转换之外执行-1
。
int(math.ceil(x))-1
以下C代码在某种意义上有效 - 它为您提供了可表示为浮点数的下一个最负的整数:
double flooor(double x) {
return floor(nextafter(x, -1.0/0.0));
}
以下Python代码是直接音译,但它依赖于NumPy:
def flooor(x):
return math.floor(numpy.nextafter(x, -numpy.inf))
的nextafter
函数从第一个参数移动一个double
接近其第二个参数。 它有一个特例; 如果z < 0
且你要求nextafter(0.0, z)
,它将返回最小的负的次正规数。
从你的规范来看,目前还不清楚应该用正无穷大和最负的有限数来做什么。 此代码将正无穷大发送到最正的有限数,对自身发送负无穷大,将负有限数发送到负无穷大。
Martijn Pieters在他的回答中给了咒语int(math.ceil(x)) - 1
,因为删除了。 这正确地找到小于float
x
的最大int
。 这会向上舍入x
,将其转换为整数,并减去1,从而得到数字上小于x
的最大Python int
。
关于什么:
i = int(math.floor(x) - 1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.