Maison > développement back-end > C++ > le corps du texte

Comment arrondir efficacement une division entière en C/C ?

Linda Hamilton
Libérer: 2024-11-24 04:29:10
original
831 Les gens l'ont consulté

How to Efficiently Round Up Integer Division in C/C  ?

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;
Copier après la connexion

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;
Copier après la connexion

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);
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal