目次
基本例:範囲でランダム整数を生成します
理解する重要なポイント
?なぜrand()ではないのですか?
?どのように機能するか
?配布オブジェクトは再利用可能です
一般的なユースケース:サイコロロールのシミュレーション
まとめ
ホームページ バックエンド開発 C++ CユニフォームINT分布の例

CユニフォームINT分布の例

Aug 08, 2025 am 10:41 AM

STD :: unifore_int_distributionを使用して、指定された範囲内でランダム整数を生成するには、まずシード用のランダムデバイスRDを作成する必要があります。 2。Mersenne Twister Engine STD :: MT19937 GEN(RD())を初期化します。 3.分布オブジェクトstd :: unired_int_distribution dist> dist(1、10)を定義し、dist(gen)を呼び出して、偏りのない乱数を取得します。この方法は、rand()のモジュロバイアス問題を回避し、均一な分布を提供し、ローリングダイスなどのシナリオに適しており、分布したオブジェクトの再利用をサポートして高品質のランダム性を確保します。発電機の播種、分布の定義、乱数を得るための呼び出しの3つのステップにまとめられています。プロセス全体が効率的で信頼性があります。

CユニフォームINT分布の例

Cでstd::uniform_int_distributionを使用して特定の範囲内でランダムな整数を生成する明確で実用的な例を示します。

CユニフォームINT分布の例

基本例:範囲でランダム整数を生成します

#include <iostream>
#include <random>

int main(){
    //ステップ1:発電機を表示するランダムデバイスを作成する
    std :: random_device rd;

    //ステップ2:乱数ジェネレーターの初期化(Mersenne Twister)
    std :: mt19937 gen(rd());

    //ステップ3:1から10の間の均一な整数分布を定義します
    std :: unifore_int_distribution <int> dist(1、10);

    // 5つの乱数を生成して印刷します
    for(int i = 0; i <5; i){
        int random_number = dist(gen);
        std :: cout << random_number << &#39;&#39;;
    }
    std :: cout << &#39;\ n&#39;;

    0を返します。
}

出力(例):

 7 2 9 1 5

理解する重要なポイント

?なぜrand()ではないのですか?

std::uniform_int_distributionを使用するstd::mt19937のような適切なエンジンを使用して、古いrand()よりもはるかに優れています

CユニフォームINT分布の例
  • Moduloバイアス(不均一な分布)を回避します。
  • 範囲を完全に制御できます。
  • これは、高品質のランダム性のために設計された最新のC <random>ライブラリの一部です。

?どのように機能するか

  • std::random_device rd;非決定的な乱数(例えば、ハードウェアから)を取得しようとします。
  • std::mt19937 gen(rd());発電機をシードします。固定された種子( gen(42)など)を使用する場合、毎回同じシーケンスが取得されます。テストに役立ちます。

?配布オブジェクトは再利用可能です

同じまたは異なるジェネレーターで分布を再利用できます。

 //同じ分布を複数回再利用します
for(int i = 0; i <3; i){
    std :: cout << dist(gen)<< &#39;&#39;; //同じdist、毎回新しい番号
}

一般的なユースケース:サイコロロールのシミュレーション

std :: unifore_int_distribution <int> dice(1、6);
int roll = dice(gen);
std :: cout << "あなたは" << roll << &#39;\ n&#39;;を転がしました

これによりrand() % 6 1とは異なり、1〜6の各数値が等しい確率を確保します。RAND_MAX RAND_MAX応じてバイアスされる可能性があります。

CユニフォームINT分布の例

まとめ

std::uniform_int_distributionを使用するには:

  • std::random_deviceで見られる優れたジェネレーター( std::mt19937 )を使用します。
  • 希望のminとmax(包括的)で分布を定義します。
  • 発電機で分布を呼び出して、公平なランダム整数を取得します。

基本的に、これらの3行だけが重い持ち上げを行います。

 std :: mt19937 gen(std :: random_device {}());
std :: unifore_int_distribution <int> dist(1、100);
int r = dist(gen);

それだけです - きれいで、速く、信頼性があります。

以上がCユニフォームINT分布の例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Stock Market GPT

Stock Market GPT

AIを活用した投資調査により賢明な意思決定を実現

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ホットトピック

Cプログラムをコンパイルして実行する方法 Cプログラムをコンパイルして実行する方法 Sep 16, 2025 am 05:29 AM

installac compilerlikegを使用して、packagemanagordedordementtoolsdependingontheos.2.writeac andsaveitwitha.cppextension.3.compiletheprogramusingg hello.cpp-ohellotogenerateanexecutable.4.runtheexecutable

Cカスタムアロケーターの例 Cカスタムアロケーターの例 Sep 17, 2025 am 08:45 AM

カスタムアロケーターを使用して、Cコンテナのメモリ割り当て挙動を制御できます。 1.例のログインガロカーターは、オーバーロードをオーバーロードすることにより、メモリ操作を実装します。 2。アロケーターは、STLコンテナタイプの変換要件を満たすために、value_typeを定義し、テンプレートを再構築する必要があります。 3.アロケーターは、建設とコピー中にログ出力をトリガーします。これは、ライフサイクルの追跡に便利です。 4.実際のアプリケーションには、メモリプール、共有メモリ、デバッグツール、組み込みシステムが含まれます。 5。c 17以来、コンストラクトと破壊はdefaultでstd :: allocator_traitsによって処理できます

cでシステムコマンドを実行する方法 cでシステムコマンドを実行する方法 Sep 21, 2025 am 04:35 AM

std :: system()関数を使用してシステムコマンドを実行します。システムコマンドは、ヘッダーファイルを含めてstd :: system( "ls-l")などのcスタイルの文字列コマンドに渡す必要があり、リターン値は-1です。つまり、コマンドプロセッサは使用できません。

CmakeでCプロジェクトをセットアップする方法は? CmakeでCプロジェクトをセットアップする方法は? Sep 18, 2025 am 01:04 AM

cmakelists.txt、src/を含むプロジェクトディレクトリ構造を作成します。 2。CMAKELISTS.TXTを書き込み、CMAKEバージョン、プロジェクト名、C標準を指定し、実行可能ファイルを追加します。 3. mkdirbuildを使用してディレクトリを入力し、cmake ..およびcmake - buildを実行します。編集用; 4. add_executableを介して複数のソースファイルを追加し、ターゲット_include_directoriesを使用してヘッダーファイルパスを含めます。 5。Find_Packageを使用して外部ライブラリを見つけ、ターゲット_link_librariesにリンクします。 6。

c抽象クラスの例 c抽象クラスの例 Sep 15, 2025 am 05:55 AM

抽象クラスは、少なくとも1つの純粋な仮想関数を含むクラスです。インスタンス化することはできず、基本クラスとして継承する必要があります。派生クラスは、そのすべての純粋な仮想関数を実装する必要があります。そうしないと、抽象クラスになります。 1。純粋な仮想関数は、仮想リターンタイプfunction name()= 0によって宣言されます。インターフェイス仕様を定義するには。 2。抽象クラスは、領域()、draw()などの統一されたインターフェイス設計によく使用され、多型呼び出しを実装します。 3。抽象クラス(仮想〜shape()= default;などなど、派生クラスオブジェクトが基本クラスのポインターを通じて正しくリリースされるようにするために、仮想デストラクタを提供する必要があります。 4。導出されたクラスが継承した後、それぞれの領域を計算するために領域()を実装する長方形や円などの純粋な仮想関数を書き直す必要があります。 5。

cでスタックを使用する方法 cでスタックを使用する方法 Sep 21, 2025 am 05:16 AM

Cのスタックは、STLのコンテナアダプターです。バックインファーストアウトの原則に従い、ヘッダーファイルを含める必要があります。プッシュで要素を追加し、ポップが上部要素を削除し、上部がスタックの上部にアクセスします。操作の前に、それが空であるかどうかを確認します。これは、表現評価やバックトラッキングなどのシナリオでよく使用されます。

現代の自動を使用する方法c 現代の自動を使用する方法c Sep 24, 2025 am 04:59 AM

theautokeywordletsthecompilredededucevariabletypesfrominitializers、還元versを抑制し、誘惑性を促進します

cにカスタムイテレータを実装する方法 cにカスタムイテレータを実装する方法 Sep 20, 2025 am 01:13 AM

答えは、必要なタイプのエイリアスと操作を含むクラスを定義することです。まず、value_type、参照、ポインター、Difference_Type、およびIterator_categoryを設定し、その後、控除、増分、および比較操作を実装します。最後に、容器内のbegin()およびend()メソッドをiteratorインスタンスを返すように提供し、stlアルゴリズムとループの範囲と互換性があります。

See all articles