繁体   English   中英

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

[英]How do I find the largest integer less than x?

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

我将如何得到i的最大整数严格小于x (作为一个整数)?

我想出的最好的是:

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

有没有更好的办法?

注意,如果x2.0那么math.floor(x)返回2.0但我需要一个小于2.0的最大整数,即1

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

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

否则我们有x中的R \\ Zmath.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) ,它将返回最小的负的次正规数。

从你的规范来看,目前还不清楚应该用正无穷大和最负的有限数来做什么。 此代码将正无穷大发送到最正的有限数,对自身发送负无穷大,将负有限数发送到负无穷大。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM