如何找到小于 x 的最大整数?

How do I find the largest integer less than x?

x2.3,则math.floor(x)returns2.0,小于等于x的最大整数(如一个浮点数。)

如何获得 i 最大整数 严格地 小于 x (作为整数)?

我想到的最好的是:

i = int(math.ceil(x)-1)

有没有更好的方法?

注意,如果 x2.0 那么 math.floor(x) returns 2.0 但我需要小于 2.0 的最大整数,这是 1.

math.ceil(x)-1 是正确的,这是证明。

如果xZ(整数集)中,则math.ceil(x) = x。因此math.ceil(x)-1=x-1,小于x.

的最大整数

否则我们在R\Z中有x并且math.ceil(x)是最小的整数y 这样 xy。但是 y-1 是一个小于满足 xy 的最小整数的整数,因此 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),它将 return 最小的负次正规数。

根据您的说明,不清楚应该如何处理正无穷大和最负的有限数。此代码将正无穷大发送到最大正有限数,将负无穷大发送到自身,将最负有限数发送到负无穷大。

Martijn Pieters 在他的回答中给出了咒语 int(math.ceil(x)) - 1,因为已删除。这正确地找到了小于 float x 的最大 int。这将 x 向上舍入,将其转换为整数,然后减去 1,得到数值上小于 x.

的最大 Python int

怎么样:

i = int(math.floor(x) - 1)