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; }
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!