ホームページ > バックエンド開発 > C++ > 整数が指定された範囲内にあるかどうかを確認するより速い方法はありますか?

整数が指定された範囲内にあるかどうかを確認するより速い方法はありますか?

Barbara Streisand
リリース: 2024-12-10 03:28:21
オリジナル
956 人が閲覧しました

Is There a Faster Way to Check if an Integer Falls Within a Given Range?

整数が 2 つの整数の間にあるかどうかを判断する最速の方法 (両端を含む)

整数が他の 2 つの整数の間にあるかどうかを判断するのは一般的です従来のアプローチでは論理積と不等号を使用します。比較:

x >= start && x <= end
ログイン後にコピー

しかし、より高速な代替手段はありますか?

考えられる最適化の 1 つは、単一の比較/分岐を使用することです。このアプローチは、数値と下限と上限を符号なし整数に変換し、その差を比較することで機能します。

if ((unsigned)(number-lower) <= (upper-lower))
    in_range(number);
ログイン後にコピー

なぜこれが機能するのでしょうか?数値が下限を下回る場合、差は負になります。数値が範囲内にある場合、差は正であり、上限と下限の差以下になります。

この方法にはいくつかの利点があります。

  • 分岐命令 (必要な比較は 1 つだけ)。
  • 分岐予測の改善 (数値に対する相対的な位置に関係なく、同じ分岐が行われます)
  • 上限と下限の差を事前に計算することでパフォーマンスが向上します (時間の影響を最小限に抑えます)。

実際には、数値と間隔を原点に変換し、数値が [0, D] (D = 上限 - 下限) 内にあるかどうかをテストすることで、この効率的なアルゴリズムの基礎が提供されます。下限を下回る負の数値は負の値に変換され、上限を超える数値は D より大きい値に変換されます。

以上が整数が指定された範囲内にあるかどうかを確認するより速い方法はありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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