共有: 乱数を生成する C++ コード

 

この記事は、C++ で乱数を生成するための実装コードを詳細に分析して紹介したものです。必要な友人は参照してください。

C++ で乱数を生成する方法: ここでは rand() 関数と srand() 関数が使用されますが、C++ には組み込みの乱数 (int 数値) 関数がありません。


(1) 範囲を設定せずに乱数を生成したいだけの場合は、 rand() を使用するだけです。 rand() は 0 から RAND_MAX までの範囲のランダムな値を返します。RAND_MAX 値は少なくとも 32767 です。
例えば:

コードは以下のように表示されます。

#include<stdio.h>
#include <iostream>
 
コードは以下のように表示されます。

int _tmain(int argc, _TCHAR* argv[])
{        for(int i=0;i<10;i++)              cout << rand() << endl; }



(2) 特定の範囲内の数値をランダムに生成したい場合、
例: 0 から 99 までの 10 個の数値をランダムに生成します。
コードは以下のように表示されます。

#include<stdio.h>
#include <iostream>
 
コードは以下のように表示されます。

int _tmain(int argc, _TCHAR* argv[])
{      for(int x=0;x<10;x++)            cout << rand()%100 << " "); }



つまり、a~b の範囲で乱数を生成するには、  a+rand()%(b-a+1) を使用できます。


(3)ただし、上記 2 つの例を複数回実行すると、出力結果は初回と同じになります。この利点はデバッグが容易になることですが、乱数の意味が失われます。実行ごとに異なる乱数を生成したい場合は、srand() 関数を使用します。srand() は、 rand() が乱数を生成するときに乱数シードを設定するために使用されます。rand() 関数を呼び出して乱数を生成する前に、まず srand() を使用して乱数シード (シード) を設定する必要があります。乱数シードが設定されていない場合、rand() は乱数シードを自動的に 1 に設定します。いわゆる。上記の 2 つの例は、乱数シードが設定されていないためであり、乱数シードは毎回自動的に同じ値 1 に設定され、その結果、 rand() によって生成される乱数値は同じになります。


srand() 関数定義: void srand (unsigned int seed);
通常、geypid() または time(0) の戻り値をシードとして使用できます。time(0) を
使用する場合は、ヘッダー ファイル #include< を追加する必要がありますtime.h >
たとえば:

コードは以下のように表示されます。

#include<stdio.h>
#include<time.h>                               
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{  srand((unsigned)time(NULL)); //srand((unsigned)time(0)) srand((int)time(0) 均可for(int i=0;i<10;i++) cout << rand() << endl; }




このように、実行するたびに結果が異なります。

転載元:マイクロリーディング  https://www.weidianyuedu.com

おすすめ

転載: blog.csdn.net/weixin_45707610/article/details/131767548