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
Freigeben: 2024-11-24 04:29:10
Original
891 Leute haben es durchsucht

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;
Nach dem Login kopieren

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;
Nach dem Login kopieren

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);
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage