C++は、乱数を発生させる実現コードです。

1656 ワード

C++はどのように乱数を生成しますか?ここで使うのはランド関数、スラッド関数、C++には独自のランドム関数がありません。1)もし乱数が発生して範囲を設定する必要がないなら、ラド()を使えばいいです。ラド()はランダム値を返します。範囲は0からRANDまでです。MAX間RANDMAX値は少なくとも32767です。例えば、

#include<stdio.h>
#include <iostream>

int _tmain(int argc, _TCHAR* argv[])
{
       for(int i=0;i<10;i++)
             cout << rand() << endl;
}
(2)ランダムに1つの一定範囲の数を生成する場合、例えば、10個の0〜99の数を生成する:

#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()は、ランダム数を生成する際のランダムシードを設定します。ランド()関数を呼び出して乱数を生成する前に、先にスラッド()を利用して乱数のシード(seed)を設定しなければなりません。乱数のシードが設定されていない場合、ランド()は呼び出し時に自動的に乱数のシードを1に設定します。上記の2つの例は、ランダムシードが設定されていないため、ランダムシード毎に自動的に同じ値1に設定され、したがって、ランダム値が同じになるからです。srand()関数定義:void srand(unsigned int seed);一般的には、geyped()やtime(0)の戻り値をseedとして利用することができます。time(0)を使うと、ヘッダファイルを入れる必要があります。例えば、

#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;
}
のように運行毎に結果が異なります。