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

Susan Sarandon
リリース: 2024-11-22 10:23:10
オリジナル
705 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート