[英]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.