我想實現最大整數函數。 [「最偉大的整數函數」是quitestandard name什麼也被稱爲地板功能。]C++整數下限函數
int x = 5/3;
我的問題是有更大的數字可能會有精度的損失爲5/3會產生一個雙?
編輯:最大整數函數整數小於或等於X 例:
4.5 = 4
4 = 4
3.2 = 3
3 = 3
我想知道的是5/3會產生一個雙?因爲如果是的話,我將在轉換爲int時失去精度。
希望這是有道理的。
我想實現最大整數函數。 [「最偉大的整數函數」是quitestandard name什麼也被稱爲地板功能。]C++整數下限函數
int x = 5/3;
我的問題是有更大的數字可能會有精度的損失爲5/3會產生一個雙?
編輯:最大整數函數整數小於或等於X 例:
4.5 = 4
4 = 4
3.2 = 3
3 = 3
我想知道的是5/3會產生一個雙?因爲如果是的話,我將在轉換爲int時失去精度。
希望這是有道理的。
您將失去商的小數部分。所以是的,數量越多,您的相對精度就越高,如與5000/3000
相比。
但是,5/3
將返回一個整數,而不是double。爲了強制它分成兩倍,請註明股息爲(double)5/3
。
感謝所有我需要知道的。 – Thomas 2010-04-12 13:51:55
5/3總是會產生1(整數),如果你做5.0/3或5/3.0,結果將是雙倍的。
由於在C和C++中,正如其他人所說,/是整數除法,它將返回一個int。特別是,它會返回雙重答案的底線......(C和C++總是截斷)所以,基本上5/3正是你想要的。
它可能會在底片有點怪異作爲-5/3 => -2這可能是也可能不是你想要的...
但是,如果你很聰明,你可以使用底片來實現整數'ceil()'...... – 2010-04-12 13:54:08
這是真的。 – 2010-04-12 15:10:06
整數除法返回地板是**不是**! (經常被忽視的)關鍵點是如何處理* negative *數字。這裏-9/4 == -2但是地板(-9.0/4)== -3.0 – Ichthyo 2011-01-08 19:46:21
整數除法給出整數結果,所以5/3爲1, 5%3是2(其餘操作員)。但是,這不一定適用於負數。在最初的C++標準中,-5/3可以是-1(向零舍入)或-2(樓層),但建議使用-1。在最新的C++ 0B草案中(幾乎可以肯定非常接近最終標準),它是-1,因此找到負數的底板更爲重要。
據我所知,沒有爲此預定義的功能。 可能有必要使用這樣的功能,如果由於某種原因,浮點計算是沒問題的(如int64_t
具有更高的精度比double
可以沒有錯誤代表)
如下,我們可以定義此功能:
#include <cmath>
inline long
floordiv (long num, long den)
{
if (0 < (num^den))
return num/den;
else
{
ldiv_t res = ldiv(num,den);
return (res.rem)? res.quot-1
: res.quot;
}
}
這個想法是使用正常的整數除法,但調整負結果以匹配double floor(double)
函數的行爲。重點是總是朝向下一個較低的整數截斷,而不管零點的位置如何。如果意圖是創建大小均勻的間隔,這可能非常重要。
定時測量結果表明,這裏該功能只創建與內置/
運營商,但當然,基於浮點floor
功能比較小的開銷是顯著快....
什麼是最大整數函數? – Andrey 2010-04-12 13:40:09
請注意,在C和C++中,作用於整數的'/'運算符總是返回一個整數結果。除此之外,我認爲你需要更具體地說明你想要的東西---你的函數是否會返回最大的整數**少於一個給定的數字?這個數字會有什麼類型?如果它是'float'或'double',無論如何你都會失去精度。如果它是一個自制類型,可以模擬**理性**數字,則可以避免精度損失。 – Pillsy 2010-04-12 13:42:28
這是一個返回*最大*整數的函數!我相信最大的一個是1,000,001 – 2010-04-12 13:43:12