Heim >Backend-Entwicklung >C++ >Wie kann man die Ganzzahldivision in C/C effizient aufrunden?

Wie kann man die Ganzzahldivision in C/C effizient aufrunden?

Linda Hamilton
Linda HamiltonOriginal
2024-11-24 04:29:10890Durchsuche

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

Integerdivision in C/C aufwärts runden

Beim Dividieren zweier Ganzzahlen x und y in C/C ergibt sich das Ergebnis q = x/ y ergibt die Untergrenze des Gleitkommaäquivalents. Es gibt jedoch Szenarien, in denen es wünschenswert sein kann, stattdessen die Obergrenze zu ermitteln, z. B. Decke(10/5) = 2 oder Decke(11/5) = 3.

Ineffizienter Ansatz zur Deckenteilung

Ein gängiger Ansatz für die Deckenteilung besteht darin, den Bodenwert zu vergleichen und zu erhöhen:

q = x / y;
if (q * y < x) ++q;

Während Effektiv erfordert diese Methode einen zusätzlichen Vergleich und eine Multiplikation, die sich auf die Leistung auswirken kann.

Effizienter Deckenteilungsalgorithmus

Um die Einschränkungen des ineffizienten Ansatzes zu umgehen, beachten Sie Folgendes Algorithmus für positive Zahlen, wobei q die Obergrenze von x dividiert durch y ist:

unsigned int x, y, q;

// Round up using (x + y - 1) / y
q = (x + y - 1) / y;

Alternative Überlaufvermeidender Algorithmus

Alternativ können Sie die folgende Formel verwenden, um einen möglichen Überlauf in xy zu verhindern:

// Round up using 1 + ((x - 1) / y) if x != 0
q = 1 + ((x - 1) / y);

Durch den Einsatz dieser effizienten Algorithmen können Sie die Fallstricke zusätzlicher Vergleiche vermeiden , Multiplikationen und Gleitkomma-Umwandlung, was zu schnelleren und präziseren Deckenteilungsoperationen führt.

Das obige ist der detaillierte Inhalt vonWie kann man die Ganzzahldivision in C/C effizient aufrunden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn