ホームページ > バックエンド開発 > C++ > C 11 は乱数生成をどのように改善しますか?

C 11 は乱数生成をどのように改善しますか?

Patricia Arquette
リリース: 2024-12-06 01:17:09
オリジナル
930 人が閲覧しました

How Does C  11 Improve Random Number Generation?

C 11 の乱数生成: 包括的な説明

背景

C 11 では、柔軟性を高めることを目的として、乱数を生成するための新機能が導入されました。パフォーマンスと一貫性。これらの機能には、rand() などの従来の乱数生成器の制限に対処する乱数エンジンと分散が含まれます。

乱数エンジン

エンジンは乱数生成の中核です。これらは擬似乱数のシーケンスを生成し、分布の均一性を保証します。 C 11 は、次のようないくつかのエンジン オプションを提供します。

  • 線形合同生成器 (LCG): 期間が限定された古典的なアルゴリズム。
  • メルセンヌ ツイスター(MT): 期間が長く、分布が良好な人気の選択肢property.

Distribution

Distribution は、目的の乱数分布を記述します。 C 11 には、以下を生成するための分布が含まれています。

  • 一様な整数: 範囲にわたる一様な分布。
  • 正規/ガウス分布: 指定された平均と標準偏差を持つ分布。

乱数を生成する方法

C で乱数を生成するには11、次の手順に従います:

  1. エンジンをセットアップします: エンジンを選択し、一意のシード値を使用してシードします。
  2. ディストリビューションを作成します: 必要なプロパティに基づいて分布を定義します。
  3. ランダムを生成数値: エンジンを使用して、指定された分布に従って乱数を生成します。

コード例

#include <random>

// Engine
std::mt19937 rng(std::random_device()());

// Distributions
std::uniform_int_distribution<uint32_t> uint_dist;
std::normal_distribution<double> normal_dist(0.5, 0.2);

// Generate random numbers
while (true)
{
  std::cout << uint_dist(rng) << " "
            << normal_dist(rng) << std::endl;
}
ログイン後にコピー

可能性が等しい結果の重要性

均等可能性の高い結果では、指定された範囲内の各数値が同じ確率で生成されることが保証され、乱数生成における偏りは明らかです。 で提供されるような適切な分布は、生成された一様ランダム整数を目的の分布に変換することでこれを実現します。

同時実行性の考慮事項

C 11 の乱数生成は同時実行性をサポートしています。スレッドの安全性を確保するには、各スレッドに独自のエンジンを一意のシードで割り当てるか、エンジン オブジェクトへのアクセスを同期します。

以上がC 11 は乱数生成をどのように改善しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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