C言語で疑似乱数の範囲をどうやって制御したら良いでしょうか
C言語の関数rand()で生成される乱数の範囲は、通常0からRAND_MAX(通常は32767)ですが、この範囲を制御するには以下のような方法があります。
- 乱数の範囲を制限するには剰余演算子(%)を使う。たとえば、0 から 9 の間の乱数を生成するには、以下のコードを使用する。
- int randomNumber = (int)Math.floor(Math.random() * 10);
- これは0から9までのランダムな整数を生成します。
- 乱数の範囲を線形変換を使ってマッピングします。例えば、1 から 100 の乱数を生成するには、以下のコードを使用できます。
- int randomNumber = (int)(Math.random() * 100) + 1;
- これは1から100までの間のランダムな整数を生成します。
- rand()関数を用いて0から1の範囲でランダムな小数を生成し、線形変換によって目的の範囲に写像します。例えば、0から1の範囲でランダムな小数を生成するには、以下のコードを使用できます。
- double randomDouble = (double)rand() / RAND_MAX
- a から b までの範囲のランダムな実数を生成する場合、以下のコードを使用できます。
- double randomDouble = RAND_MAX * (b – a) * rand() / RAND_MAX + a;
- これはaとbの間のランダムな小数を生成します。
rand()関数を用いるためには、ヘッダファイルstdlib.hのインクルードが必要です。また、プログラムを実行するたびに生成される乱数の列が異なるようにするためには、プログラム開始時にsrand()関数を呼び出して乱数の種を設定できます。例:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand(time(NULL)); // 设置随机数种子为当前时间
int randomNumber = rand() % 10; // 生成0到9之间的随机整数
printf("%d\n", randomNumber);
return 0;
}
そのようにすることで、プログラムを実行するたびに、生成される乱数の系列は毎回異なるものになります。