C++で乱数を生成(rand,srand用法)

1829 ワード

rand()関数は乱数を生成するために使用できることを知っていますが、これは本当の意味での乱数ではなく、擬似乱数であり、1つの数(種子と呼ぶことができます)を基準にある繰返し式で推定された一連の数であり、この一連の数が大きい場合、正規公表に合致し、乱数を生成することに相当します.しかし、これは本当の乱数ではありません.コンピュータが正常に起動した後、このシードの値はシステムを破壊しない限り、決まっています.
1.rand()
機能:乱数発生器
使用法:int rand(void)
所在ヘッダファイル:cstdlib
rand()の内部実装は線形同余法で行われ,真の乱数ではなく,その周期が特に長いため,一定の範囲でランダムと見なすことができる.
rand()は、ランダムな値を0からRAND_まで返すMAX間.RAND_MAXの範囲は少なくとも32767間(int)である.unsigned intで2バイトは65535、4バイトは4294967295の整数範囲です.0~RAND_MAXの各数字が選択される確率は同じです.
ユーザが乱数シードを設定していない場合、システムのデフォルトの乱数シードは1です.
rand()は擬似乱数を生成し、実行するたびに同じである.異なる場合は、関数srand()で初期化します.
2.srand()
機能:乱数発生器の初期化
使用法:void srand(unsigned int seed)
所在ヘッダファイル:cstdlib
srand()はrand()が乱数を生成するときの乱数シードを設定するために使用されます.パラメータseedは整数でなければなりません.seedのたびに同じ値を設定すると、rand()によって生成されるランダムな数値は毎回同じになります.
3.乱数シードとして現在のクロックを使用
rand()で生成された乱数は,実行するたびに前回と同じである.異なる場合は、関数srand()で初期化します.プログラムを実行するたびに時間が異なるため、srand(unsigned int)(time(NULL))法を用いて、異なる乱数シードを生成することができる.
4.乱数を生成する使い方
1)srand()にunsigned intタイプのシードを提供する.
2)srand()が呼び出され、srand()に供給されるシード値に基づいて乱数(0からRAND_MAXの間)が返される.
3)必要に応じてrand()を複数回呼び出し、新しい乱数を間欠的に得る.
4)いつでもsrand()に新しいシードを提供し,rand()の出力結果をさらに「ランダム化」することができる.
0~RAND_MAX間の乱数距離
#include 
#include 
#include 
using namespace std;
int main()
{
srand((unsigned)time(NULL));
for(int i = 0; i < 10;i++ )
cout << rand() << '\t';
cout << endl;
return 0;
}

5.一定範囲の乱数を生成する汎用表現
[a,b)のランダム整数を取得するには、(rand()%(b-a))+aを使用します.
[a,b]のランダム整数を取得するには、(rand()%(b-a+1)+aを使用します.
(a,b)のランダム整数を取得するには、(rand()%(b-a)+a+1を使用します.
汎用式:a+rand()%n;ここで、aは開始値であり、nは整数の範囲である.
aからbの間のランダムな整数を取得するには、a+(int)b*rand()/(RAND_MAX+1)を表す.
0~1の浮動小数点数を取得するにはrand()/double(RAND_MAX)を使用します.