C での整数 Log2 計算
与えられた質問の展開。浮動小数点に遭遇することなく C で整数 log2 演算を実行する方法を求めます。 -点近似の問題については、解決策を詳しく掘り下げます。 C 標準ライブラリでは、log の整数実装が提供されていないため、log(index) / log(2) を使用したバイナリ ツリー内のインデックス レベルの計算が複雑になります。
これに対処するために、インライン ASM 関数が提供されました。 x86 または x86-64 プラットフォームで bsr 命令を利用します。この命令は、符号なし整数内の最も高い設定ビットの位置を提供します。これは、log2() と同等です。この実装では、インライン ASM 機能を利用します。
#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; }
このメソッドを利用すると、値 = 2^n のエッジ要素であっても、バイナリ ツリー内のインデックスのレベルを正確に決定できます。
以上が浮動小数点エラーを発生させずに C で整数 Log2 を効率的に計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。