如何找到小于 x 的最大整数?
How do I find the largest integer less than x?
若x
为2.3
,则math.floor(x)
returns2.0
,小于等于x
的最大整数(如一个浮点数。)
如何获得 i
最大整数 严格地 小于 x
(作为整数)?
我想到的最好的是:
i = int(math.ceil(x)-1)
有没有更好的方法?
注意,如果 x
是 2.0
那么 math.floor(x)
returns 2.0
但我需要小于 2.0
的最大整数,这是 1
.
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
是一个小于满足 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)
,它将 return 最小的负次正规数。
根据您的说明,不清楚应该如何处理正无穷大和最负的有限数。此代码将正无穷大发送到最大正有限数,将负无穷大发送到自身,将最负有限数发送到负无穷大。
Martijn Pieters 在他的回答中给出了咒语 int(math.ceil(x)) - 1
,因为已删除。这正确地找到了小于 float
x
的最大 int
。这将 x
向上舍入,将其转换为整数,然后减去 1,得到数值上小于 x
.
的最大 Python int
怎么样:
i = int(math.floor(x) - 1)
若x
为2.3
,则math.floor(x)
returns2.0
,小于等于x
的最大整数(如一个浮点数。)
如何获得 i
最大整数 严格地 小于 x
(作为整数)?
我想到的最好的是:
i = int(math.ceil(x)-1)
有没有更好的方法?
注意,如果 x
是 2.0
那么 math.floor(x)
returns 2.0
但我需要小于 2.0
的最大整数,这是 1
.
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
是一个小于满足 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)
,它将 return 最小的负次正规数。
根据您的说明,不清楚应该如何处理正无穷大和最负的有限数。此代码将正无穷大发送到最大正有限数,将负无穷大发送到自身,将最负有限数发送到负无穷大。
Martijn Pieters 在他的回答中给出了咒语 int(math.ceil(x)) - 1
,因为已删除。这正确地找到了小于 float
x
的最大 int
。这将 x
向上舍入,将其转换为整数,然后减去 1,得到数值上小于 x
.
int
怎么样:
i = int(math.floor(x) - 1)