Heim > Backend-Entwicklung > C++ > Hauptteil

Wie berechnet man Integer Log2 in C effizient und ohne Gleitkommafehler?

Susan Sarandon
Freigeben: 2024-11-22 10:23:10
Original
704 Leute haben es durchsucht

How to Efficiently Calculate Integer Log2 in C   Without Floating-Point Errors?

Ganzzahlige Log2-Berechnung in C

Erweitert die gegebene Frage, die nach einer Methode sucht, um eine ganzzahlige Log2-Operation in C durchzuführen, ohne auf Floating zu stoßen Bei Problemen mit der Punktnäherung suchen wir nach einer Lösung. Die C-Standardbibliotheken bieten keine ganzzahlige Implementierung von log, was die Berechnung der Indexebene in einem Binärbaum mithilfe von log(index) / log(2) erschwert.

Um dieses Problem zu beheben, wird die Inline-ASM-Funktion bereitgestellt nutzt die bsr-Anweisung auf x86- oder x86-64-Plattformen. Diese Anweisung liefert die Position des höchsten gesetzten Bits in einer vorzeichenlosen Ganzzahl, was log2() entspricht. Die Implementierung nutzt die Inline-ASM-Funktionalität.

#include <stdint.h>
static inline uint32_t log2(const uint32_t x) {
  uint32_t y;
  asm ( "\tbsr %1, %0\n"
      : "=r"(y)
      : "r" (x)
  );
  return y;
}
Nach dem Login kopieren

Durch die Nutzung dieser Methode können Sie die Indexebene im Binärbaum genau bestimmen, selbst für Kantenelemente, bei denen der Wert = 2^n ist.

Das obige ist der detaillierte Inhalt vonWie berechnet man Integer Log2 in C effizient und ohne Gleitkommafehler?. 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