目次
擬似乱数生成
真の乱数生成
C 11 での乱数生成
結論

C++ での乱数生成

Aug 22, 2023 pm 12:10 PM
アルゴリズム設計 乱数の生成 C++プログラミング

C++ での乱数生成

乱数の生成は、コンピューター プログラミングの重要な部分です。 C プログラミングでも乱数は非常に一般的で、データのシミュレーション、テスト データの生成、ゲーム開発などに使用できます。この記事では、C言語での乱数生成方法をいくつか紹介します。

擬似乱数生成

擬似乱数生成アルゴリズムは、ほとんどのプログラムで使用される乱数生成方法であり、真の乱数ではなく、生成される擬似乱数です。特定の数学的アルゴリズムによる乱数。 C では、 rand 関数を使用して擬似乱数を生成できます。

rand 関数は、stdlib.h ヘッダー ファイルで定義されています。 0 から RAND_MAX の範囲の int 型の乱数を返します。RAND_MAX は stdlib.h ヘッダー ファイルで定義されており、その値は通常 32767 です。

サンプルコード:

#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

int main()
{
    // 设置随机数种子
    srand(time(0));
    
    // 生成10个随机数
    for(int i = 0; i < 10; i++)
    {
        cout << rand() << endl;
    }
    
    return 0;
}
ログイン後にコピー

上記のコードでは、srand関数を使用して乱数シードを設定し、time(0)で現在時刻の秒数を取得できるので、プログラムの実行結果は毎回異なります。次に、for ループを使用して 10 個の乱数を生成し、画面に出力します。

rand 関数は呼び出されるたびに一意の乱数を返しますが、複数回呼び出される場合、乱数間にはある程度の相関関係があることに注意してください。したがって、rand 関数を使用して大量の乱数を生成する場合は、難読化のために他の方法を使用する必要があります。

真の乱数生成

真の乱数とは、物理現象を通じて生成される乱数を指します。たとえば、地震波データや光電特性などは、ハードウェア デバイスを介して収集できますが、これらのハードウェア デバイスは非常に複雑です。高価ですが、ほとんどのアプリケーションでは、擬似乱数生成アルゴリズムを使用するだけで十分です。

ただし、高セキュリティの乱数を必要とする一部のアプリケーション シナリオでは、データのセキュリティと機密性を保護するために、真の乱数を使用する必要があります。この場合、外部デバイスを使用して真の乱数を提供できます。たとえば、真の乱数は、サイコロを振る、コインを投げる、くじ引きなどによって生成できますが、この方法は非効率であるだけでなく、生成される乱数の種類も限られます。

より一般的な方法は、乱数発生器 (RNG) と呼ばれる物理デバイスを通じて真の乱数を生成することです。予測できない物理プロセスや数学的手順を収集することで乱数を生成すると同時に、追加のセキュリティ機能も提供します。ただし、真の乱数生成器を使用するコストは、擬似乱数生成アルゴリズムを使用する場合よりもはるかに高くなります。

C 11 での乱数生成

C 11 は、2 つの部分を含む新しい乱数ライブラリを提供します。1 つは擬似乱数生成器で、より優れたアルゴリズムが複数含まれています。2 つ目は、真の乱数ジェネレータ。システムの特別に生成されたハードウェア機能にアクセスし、真の乱数を返すことができます。

C 11 の乱数生成ライブラリには次のものが含まれます:

  • minstd_rand0: 線形合同ジェネレーター
  • minstd_rand: 改良された線形合同ジェネレーター
  • mt19937: Mersenne Twister 19937 ジェネレーター、より優れたパフォーマンス、より長い実行時間
  • mt19937_64: Mersenne Twister 19937 ジェネレーター、64 ビット整数を返す
  • ranlux24_base: LUX (レベル、均一、優秀) ジェネレーター、高速な実行速度、高品質
  • ranlux48_base: LUX(level、uniform、eXcellent) ジェネレーター、48 ビット整数を返します、高速実行速度、高品質
  • knuth_b : Knuth-B (T、P) ジェネレーター、標準とは異なり、より高品質なランダム シーケンスを生成します。

C 11 で乱数生成ライブラリを使用する場合、ヘッダー ファイル Random をインクルードする必要があります。また、uniform_int_distribution を使用できます。乱数の範囲と種類を制御するuniform_real_distribution関数。

サンプルコード:

#include <iostream>
#include <random>

using namespace std;

int main()
{
    // 以当前时间作为种子
    default_random_engine engine(time(nullptr));
    
    // uniform_int_distribution:以等概率生成min到max范围内的整数
    uniform_int_distribution<int> distribution(0, 100);
    cout << distribution(engine) << endl;
    
    // uniform_real_distribution:以等概率生成min到max范围内的浮点数
    uniform_real_distribution<double> r_distribution(0, 100);
    cout << r_distribution(engine) << endl;

    return 0;
}
ログイン後にコピー

上記のコードでは、default_random_engine を使用して乱数シードを生成し、生成される整数乱数と浮動小数点乱数の範囲をそれぞれuniform_int_distributionとuniform_real_distributionで指定します。最後に、エンジン関数を呼び出して乱数を生成します。

結論

上記は、C での一般的な乱数生成方法のいくつかです。アプリケーション シナリオが異なれば、異なる乱数生成方法が必要になるため、実際の状況に応じて適切な方法を選択する必要があります。実際のプログラミングでは、疑似乱数と真の乱数の利点を組み合わせ、いくつかの高度な乱数生成方法を使用して、プログラムの効率とセキュリティを向上させることができます。

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

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Golangで指定された範囲内でランダムな整数を生成するにはどうすればよいですか? Golangで指定された範囲内でランダムな整数を生成するにはどうすればよいですか? Jun 04, 2024 am 09:19 AM

Golang では、rand パッケージの Intn 関数を使用して、指定された範囲内のランダムな整数を生成します。構文は funcIntn(nint)int です。n は排他的ランダム整数の上限です。乱数シードを設定し、Intn(100)+1 を使用すると、1 ~ 100 (両端を含む) の範囲のランダムな整数を生成できます。ただし、Intn によって生成されるランダムな整数は擬似ランダムであり、特定の確率分布を持つランダムな整数を生成できないことに注意してください。

C++ でロボット制御とロボット ナビゲーションを実装するにはどうすればよいですか? C++ でロボット制御とロボット ナビゲーションを実装するにはどうすればよいですか? Aug 25, 2023 pm 09:12 PM

C++ でロボット制御とロボット ナビゲーションを実装するにはどうすればよいですか?ロボットの制御とナビゲーションはロボット技術の非常に重要な部分です。 C++ プログラミング言語では、さまざまなライブラリとフレームワークを使用してロボットの制御とナビゲーションを実装できます。この記事では、C++ を使用してロボットを制御し、ナビゲーション機能を実装するためのコード例を作成する方法を紹介します。 1. ロボット制御 C++ではシリアル通信やネットワーク通信を利用してロボット制御を実現できます。以下は、シリアル通信を使用してロボットの動作を制御するサンプルコードです。

C++ 開発ノート: C++ コードでの Null ポインター例外の回避 C++ 開発ノート: C++ コードでの Null ポインター例外の回避 Nov 22, 2023 pm 02:38 PM

C++ 開発では、null ポインター例外は一般的なエラーであり、ポインターが初期化されていないか、解放された後も使用され続けている場合によく発生します。 Null ポインター例外はプログラムのクラッシュを引き起こすだけでなく、セキュリティ上の脆弱性も引き起こす可能性があるため、特別な注意が必要です。この記事では、C++ コードでの null ポインター例外を回避する方法について説明します。ポインター変数の初期化 C++ のポインターは、使用する前に初期化する必要があります。初期化されていない場合、ポインタはランダムなメモリ アドレスを指すことになり、Null Pointer Exception が発生する可能性があります。ポインタを初期化するには、ポインタを

C++ で簡単なファイル暗号化プログラムを作成するにはどうすればよいですか? C++ で簡単なファイル暗号化プログラムを作成するにはどうすればよいですか? Nov 03, 2023 pm 03:40 PM

C++ で簡単なファイル暗号化プログラムを作成するにはどうすればよいですか?はじめに: インターネットの発展とスマート デバイスの普及に伴い、個人データや機密情報を保護する重要性がますます高まっています。ファイルのセキュリティを確保するために、多くの場合、ファイルを暗号化する必要があります。この記事では、C++ を使用して、ファイルを不正アクセスから保護する簡単なファイル暗号化プログラムを作成する方法を紹介します。要件の分析: ファイル暗号化プログラムの作成を開始する前に、プログラムの基本的な機能と要件を明確にする必要があります。この単純なプログラムでは対称性を使用します。

C++ でフィボナッチ数列アルゴリズムを使用する方法 C++ でフィボナッチ数列アルゴリズムを使用する方法 Sep 19, 2023 am 10:15 AM

C++ でフィボナッチ数列アルゴリズムを使用する方法 フィボナッチ数列は非常に古典的な数列であり、その定義は、各数値が前の 2 つの数値の合計であるということです。コンピューター サイエンスでは、C++ プログラミング言語を使用してフィボナッチ数列アルゴリズムを実装することは、基本的かつ重要なスキルです。この記事では、C++ を使用してフィボナッチ数列アルゴリズムを作成する方法を紹介し、具体的なコード例を示します。 1. 再帰的手法 再帰的手法は、フィボナッチ数列アルゴリズムの一般的な手法です。 C++ では、フィボナッチ数列アルゴリズムは再帰を使用して簡潔に実装できます。下

C++ で簡単な音楽レコメンデーション システムを作成するにはどうすればよいですか? C++ で簡単な音楽レコメンデーション システムを作成するにはどうすればよいですか? Nov 03, 2023 pm 06:45 PM

C++ で簡単な音楽レコメンデーション システムを作成するにはどうすればよいですか?はじめに: 音楽推薦システムは、現代の情報技術における研究のホットスポットであり、ユーザーの音楽の好みや行動習慣に基づいて曲を推薦できます。この記事では、C++ を使用して簡単な音楽レコメンデーション システムを作成する方法を紹介します。 1. ユーザーデータを収集する まず、ユーザーの音楽嗜好データを収集する必要があります。さまざまな種類の音楽に対するユーザーの好みは、オンライン調査やアンケートなどを通じて取得できます。データをテキスト ファイルまたはデータベースに保存する

MySQL の RAND 関数を使用して乱数を生成する MySQL の RAND 関数を使用して乱数を生成する Jul 25, 2023 pm 04:15 PM

MySQL の RAND 関数を使用して乱数を生成します。乱数はコンピュータ サイエンスにおいて幅広い用途があります。ゲーム開発から暗号化まで、乱数の生成は重要かつ興味深い問題です。 MySQL データベースでは、RAND 関数を使用して乱数を生成できます。この記事では、MySQL の RAND 関数を使用して乱数を生成する方法について説明し、いくつかのコード例を示します。 MySQL の RAND 関数は乱数を生成する関数で、0 から 1 までのランダムな浮動小数点数を生成できます。この機能を使って、

C++ プログラミング スキルを効果的に活用して、堅牢な組み込みシステム機能を構築する C++ プログラミング スキルを効果的に活用して、堅牢な組み込みシステム機能を構築する Aug 27, 2023 am 08:07 AM

C++ プログラミング スキルを効率的に活用して、堅牢な組み込みシステム機能を構築する技術の継続的な発展に伴い、組み込みシステムは私たちの生活においてますます重要な役割を果たしています。 C++ は高級プログラミング言語として、柔軟性と拡張性に優れており、組み込みシステム開発で広く使用されています。この記事では、開発者が C++ を効率的に使用して堅牢な組み込みシステム関数を構築できるようにするための C++ プログラミング テクニックをいくつか紹介します。 1. オブジェクト指向設計を使用する オブジェクト指向設計は、C++ 言語の中核機能の 1 つです。組み込みシステムでは

See all articles