【C言語】0から1の間の乱数を生成する方法を解説

この記事では、C言語を使って0から1の間の乱数を生成する方法について解説します。

目次から探す

0から1の間の乱数生成

乱数はプログラミングにおいて非常に重要な要素です。

特に、0から1の間の乱数を生成する方法は、さまざまなアプリケーションで利用されます。

この記事では、C言語を使用して0から1の間の乱数を生成する方法について解説します。

乱数の範囲の制限と正規化

C言語では、標準ライブラリのrand()関数を使用して乱数を生成することができます。

しかし、rand()関数は0からRAND_MAXまでの範囲の乱数を生成します。

RAND_MAXは環境によって異なる値を持つため、必ずしも0から1の間の乱数を生成するわけではありません。

そこで、0から1の間の乱数を生成するためには、以下の手順を経て乱数の範囲を制限し、正規化する必要があります。

  1. rand()関数を使用して0からRAND_MAXまでの範囲の乱数を生成します。
  2. 生成された乱数をRAND_MAXで割ることで、0から1の間の小数を得ることができます。

以下に、具体的なコード例を示します。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
    // 乱数の種を設定
    srand(time(NULL));
    // 0から1の間の乱数を生成
    double random = (double)rand() / RAND_MAX;
    // 乱数の値を表示
    printf("乱数: %f\n", random);
    return 0;
}

srand(time(NULL))は、乱数の種を現在の時刻に設定するためのコードです。

これにより、実行するたびに異なる乱数が生成されます。

0から1の間の乱数生成のアルゴリズム

上記の方法では、0から1の間の乱数を生成することができますが、乱数の分布が均等ではありません。

もし、より均等な分布の乱数を生成したい場合は、以下のアルゴリズムを使用することができます。

  1. rand()関数を使用して0からRAND_MAXまでの範囲の乱数を生成します。
  2. 生成された乱数をRAND_MAXで割り、0から1の間の小数を得ます。
  3. 得られた小数を再度RAND_MAXで割り、0から1の間の小数を得ます。

以下に、具体的なコード例を示します。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
    // 乱数の種を設定
    srand(time(NULL));
    // 0から1の間の乱数を生成
    double random = (double)rand() / RAND_MAX;
    random = (double)rand() / RAND_MAX;
    // 乱数の値を表示
    printf("乱数: %f\n", random);
    return 0;
}

このアルゴリズムを使用することで、より均等な分布の0から1の間の乱数を生成することができます。

実行するたびに異なる乱数が生成されることに注意してください。

目次から探す