Arrondir la division entière vers le haut dans C/C
Lors de la division de deux entiers x et y dans C/C, le résultat q = x/ y donne le plancher de l'équivalent en virgule flottante. Cependant, il existe des scénarios dans lesquels il peut être souhaitable d'obtenir le plafond à la place, comme ceil(10/5) = 2 ou ceil(11/5) = 3.
Approche inefficace de la division du plafond
Une approche courante pour la division du plafond consiste à comparer et à augmenter la valeur du plancher :
q = x / y; if (q * y < x) ++q;
Bien qu'efficace, cette méthode implique une comparaison et une multiplication supplémentaires, qui peuvent avoir un impact sur les performances.
Algorithme de division de plafond efficace
Pour contourner les limites de l'approche inefficace, considérons l'algorithme suivant pour nombres positifs où q est le plafond de x divisé par y :
unsigned int x, y, q; // Round up using (x + y - 1) / y q = (x + y - 1) / y;
Alternative Overflow-Evoidant Algorithme
Alternativement, pour éviter un débordement potentiel en x y, utilisez la formule suivante :
// Round up using 1 + ((x - 1) / y) if x != 0 q = 1 + ((x - 1) / y);
En employant ces algorithmes efficaces, vous pouvez éviter les pièges des comparaisons, multiplications, et le moulage en virgule flottante, ce qui permet des opérations de division de plafond plus rapides et plus précises.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!