Techo rápido de una división de enteros en C/C++
Dados los valores enteros x
y y
, C y C++ devuelven como cociente q = x/y
el mínimo del equivalente en coma flotante. En su lugar, estoy interesado en un método para devolver el techo. Por ejemplo, ceil(10/5)=2
y ceil(11/5)=3
.
El enfoque obvio implica algo como:
q = x / y;
if (q * y < x) ++q;
Esto requiere una comparación y multiplicación adicionales; y otros métodos que he visto (usados de hecho) implican la conversión como float
o double
. ¿Existe un método más directo que evite la multiplicación adicional (o una segunda división) y la bifurcación, y que también evite la conversión como un número de punto flotante?
Aceptado
Para números positivos donde desea encontrar el techo (q) de x cuando se divide por y.
unsigned int x, y, q;
Para resumir ...
q = (x + y - 1) / y;
o (evitando el desbordamiento en x+y)
q = 1 + ((x - 1) / y); // if x != 0
Para números positivos:
q = x/y + (x % y != 0);