Rand
出典: フリー百科事典『ウィキペディア(Wikipedia)』
randは、C言語の標準ライブラリヘッダー(<stdlib.h>)で宣言されている、0から定数RAND_MAXまでの乱数を整数で返す関数である。呼称はランド、ランダムと呼ばれることが多い。randを使う前にsrandを使うことによって、乱数の発生系列を初期化しなければ毎回同じ数値が返ってきてしまうことに注意。
多くの場合randは線形合同法と呼ばれるアルゴリズムを使っているが、このアルゴリズムは非常に質の悪いことで知られ、メルセンヌ・ツイスタなどの高精度なアルゴリズムを使うことが推奨されている。
目次 |
[編集] 形式
#include <stdlib.h> int rand(void); void srand(unsigned);
[編集] コード例
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int a; srand((unsigned int)time(0)); a = (int)((10.0 * rand() / (RAND_MAX + 1.0)); printf("%d", a); return 0; }
出力結果(0~9のいずれかの値が返る):
8
特定の範囲で乱数を求めたいときにはa = rand() % 10
とする方法も広く知られているが、線形合同法は下位にあるビットほど質が悪い。そのため上記のコード例のような上位にあるビットを利用するコードが推奨されている。
srandの際に現在時刻を使用しているが、同じ数を使用すると毎回同じ乱数列を返すようになる。srandは通常プログラムの最初で1回だけ呼ぶものであり、乱数を取得する毎に呼ぶものでは無い。
[編集] 関連項目
[編集] 外部リンク
- Mersenne Twister
- Boost Random Number Library - 様々な乱数アルゴリズムを使うことが出来るBoostライブラリ
- Boost Random Number Library (cppll) - cppllによる上記の翻訳