2010-03-20 51 views

回答

3
#include <math.h> 
ceil(3.0/2); //2.0 

注意,一個操作數應該是雙(或浮動),因爲3/2給你1

+0

你確定'2/3.0' =='2.0'嗎? –

+0

對不起,謝謝你的評論:P – Lombo

2
int x= ceil((float)3/2); 
1

爲了圓不使用的功能,只需添加除數的一半在你分裂之前。 如果除數是一個常量,編譯器會很好地優化代碼。

int number = 3; 
int divisor = 2; 
int result = (number + (divisor+1)/2)/divisor; 
13

如果你只是有興趣除以2,那麼就拿(n + 1)/ 2來保持整數運算。例如,(3 + 1)/ 2給出2.對於較大數x,使用x-1。例如,(3 + 7)/ 8 = 1,3除以8.

對於一般情況,你正在尋找天花板功能 - ceil。 http://www.elook.org/programming/c/ceil.html

1
int i = 3; 
int j = 2; 
int k = (i + j - 1)/j; 
0
int x = 3.0/2 + 0.5; 
+0

OP是要求上限函數,而不是圓函數。我也想到了這一點,直到我意識到他總是希望下一個最大的整數,而不管這個值是多少。 –

+0

啊。這對我來說並不完全清楚。他確實使用了「四捨五入到」這個詞:s – wilhelmtell

1

(如果有資格作爲線程巫術,請通知我會刪除此)

:快速谷歌搜索「數學小區C」在結果的頂部給這個頁面

返回向上舍入商的一種快速方法是將除數加上除數,然後除。

int ceil_div(int dividend, int divisor) { 
    return (dividend + divisor - 1)/divisor; 
} 

或替代,

int ceil_div(int dividend, int divisor) { 
    return (dividend - 1)/divisor + 1; 
} 

必然地,你會從3減1,除以2,加入1

我會試着解釋爲什麼這個工程工作。如果股息除數均爲浮動,則截尾整數當量(股息/除數)的將等於商的天花板如果除數完全分割被除數,或者少一個,如果它並沒有完全劃分股息。通過減1,我們保證新的股息,股息 - 1,除以除數,將始終返回小於浮點商的上限值。

現在剩下的就是給這個商增加1,順便說一下,它是floor((float)dividend /(float)divisor)。

+0

在處理使用地形或歐幾里德算術*進行整數除法的語言中處理正數*時,更容易的方法是否定分紅和結果(即x/y四捨五入是 - (( - x)// y)不幸的是,很多語言實現了不太有用的truncate-to-zero整數除法,這種技術不適用於這些。 – supercat