簡體   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