c言語ランダム関数
1264 ワード
c言語ランダム関数
#include
rand()
srand()
標準Cライブラリにおける関数rand()は0~RAND_を生成できるMAX
RAND_MAXはstdlibである.hで定義された整数で、システムに関連しています.
rand()関数はパラメータを入力せず、式rand()で直接参照します.たとえば、次の文で2つの乱数を印刷できます.
printf("Random numbers are: %i %i",rand(),rand());
rand()関数は指定された順序で整数を生成するので、上記の文を実行するたびに同じ2つの値が印刷されるので、C言語のランダムは本当の意味でのランダムではありません.
プログラムが実行されるたびに新しいシーケンスのランダム値を生成できるように、通常、乱数ジェネレータに新しいランダムシードを提供します.関数srand()(stdlib.hから)は、乱数ジェネレータにシードを拡散することができる.シードが異なるrand()関数であれば、異なる乱数シーケンスが生成されます.srand()は乱数生成器の初期化器と呼ばれる.
提供されるシードが同じである場合、乱数シーケンスも同じである.また、シードが1の場合、srand()関数を使用しない場合と同様、すなわちrand()関数のデフォルトでは初期化シード値は1である.
stdlib.hの2つの関数のプロトタイプは:
int rand();
void srand (unsigned int);
srand(time(0)); i=rand(); このようにiは本当の意味での乱数である.
rand()は擬似乱数を生成し、srand関数はシードを提供し、シードによって生成される乱数のシーケンスも異なるため、通常はsrand関数time(0)を呼び出してシステムの時間(1970.1.1真夜中から)を返し、単位:秒、シードによって当然生成されるランダム数の同じ確率は小さい.
#include
rand()
srand()
標準Cライブラリにおける関数rand()は0~RAND_を生成できるMAX
RAND_MAXはstdlibである.hで定義された整数で、システムに関連しています.
rand()関数はパラメータを入力せず、式rand()で直接参照します.たとえば、次の文で2つの乱数を印刷できます.
printf("Random numbers are: %i %i",rand(),rand());
rand()関数は指定された順序で整数を生成するので、上記の文を実行するたびに同じ2つの値が印刷されるので、C言語のランダムは本当の意味でのランダムではありません.
プログラムが実行されるたびに新しいシーケンスのランダム値を生成できるように、通常、乱数ジェネレータに新しいランダムシードを提供します.関数srand()(stdlib.hから)は、乱数ジェネレータにシードを拡散することができる.シードが異なるrand()関数であれば、異なる乱数シーケンスが生成されます.srand()は乱数生成器の初期化器と呼ばれる.
提供されるシードが同じである場合、乱数シーケンスも同じである.また、シードが1の場合、srand()関数を使用しない場合と同様、すなわちrand()関数のデフォルトでは初期化シード値は1である.
stdlib.hの2つの関数のプロトタイプは:
int rand();
void srand (unsigned int);
srand(time(0)); i=rand(); このようにiは本当の意味での乱数である.
rand()は擬似乱数を生成し、srand関数はシードを提供し、シードによって生成される乱数のシーケンスも異なるため、通常はsrand関数time(0)を呼び出してシステムの時間(1970.1.1真夜中から)を返し、単位:秒、シードによって当然生成されるランダム数の同じ確率は小さい.
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
/* 0 - N 。*/
#define N 100
int main()
{
int i,j;
srand((int)time(0));
for(i=0;i<10;i++)
{
//j=(int)(N*rand()/(RAND_MAX+1.0));
j = rand() % N;
printf("%d ",j);
}
}