C / C ++中整数除法的快速上限
给定整数值x
和y
,C和C ++都将商返回q =
x/y浮点等效项的下限。我对返回上限的方法感兴趣。例如ceil(10/5)=2
和ceil(11/5)=3
。
显而易见的方法包括:
q = x / y;if (q * y < x) ++q;
这需要额外的比较和乘法。我见过的(实际上使用过的)其他方法都涉及将其转换为a
float
或double
。有没有更直接的方法来避免额外的乘法(或第二除法)和分支,并且还避免将其转换为浮点数?
回答:
对于正数
unsigned int x, y, q;
舍入…
q = (x + y - 1) / y;
或(避免x + y中的溢出)
q = 1 + ((x - 1) / y); // if x != 0
以上是 C / C ++中整数除法的快速上限 的全部内容, 来源链接: utcz.com/qa/397583.html