ホームページ >バックエンド開発 >C++ >浮動小数点エラーを発生させずに C で整数 Log2 を効率的に計算するにはどうすればよいですか?

浮動小数点エラーを発生させずに C で整数 Log2 を効率的に計算するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-22 10:23:10773ブラウズ

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

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。