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

时间:2015-01-03 19:22:24

标签: python math floating-point

如果x2.3,则math.floor(x)会返回2.0,这是小于或等于x的最大整数(作为浮动。)

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

我想出的最好的是:

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

有更好的方法吗?

请注意,如果x2.0,则math.floor(x)会返回2.0,但我需要的最大整数小于2.0,即1 }。

3 个答案:

答案 0 :(得分:3)

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

如果x位于 Z (整数集)中,则math.ceil(x) = x。因此math.ceil(x)-1 = x-1是小于x的最大整数。

否则我们在 R \ Z 中有x,而math.ceil(x)y的最小整数x }≤y。但是y-1是一个小于最小整数的整数,xy,因此x> y-1和构造y-1是最大的小于x的整数。

这很简单,我不会为那些if - else而烦恼。但为了避免使用浮点数计算错误,我会在-1转换之外执行int

int(math.ceil(x))-1

答案 1 :(得分: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,因为已删除。这正确地找到小于int float的最大x。这会将x向上舍入,将其转换为整数,并减去1,从而使最大的Python int在数值上小于x

答案 2 :(得分:-2)

怎么样:

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