Techo rápido de una división de enteros en C/C++

Resuelto andand asked hace 14 años • 11 respuestas

Dados los valores enteros xy y, C y C++ devuelven como cociente q = x/yel 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)=2y 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 floato 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?

andand avatar Apr 30 '10 21:04 andand
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
Sparky avatar Apr 30 '2010 14:04 Sparky

Para números positivos:

q = x/y + (x % y != 0);
Miguel Figueiredo avatar Feb 14 '2013 15:02 Miguel Figueiredo