乱数の生成方法

WBOY
リリース: 2024-07-23 21:03:14
オリジナル
441 人が閲覧しました

How Random Numbers are Generated

乱数の生成について

乱数は、シミュレーション、暗号化、統計的サンプリングなどのさまざまな分野で重要な役割を果たします。この記事では、JavaScript と Python という 2 つの人気のあるプログラミング言語に焦点を当てて、乱数がどのように生成されるかを詳しく説明します。

擬似乱数ジェネレーター (PRNG)

ほとんどのプログラミング言語は、擬似乱数生成器 (PRNG) を使用して乱数を生成します。 PRNG は数学的アルゴリズムを使用して、ランダムに見える一連の数値を生成します。これらの数値はシードと呼ばれる初期値によって決定されるため、真のランダムではありません。ただし、多くのアプリケーションには十分です。

PRNGの特徴

  1. 決定的: 同じシードが与えられると、PRNG は常に同じ一連の数値を生成します。
  2. 周期性: PRNG は最終的に、特定の期間後に一連の数値を繰り返します。
  3. 速度: PRNG は一般に高速で効率的です。

JavaScript: Math.random()

JavaScript の Math.random() 関数は、乱数を生成するためによく使用されます。 Math.random() で使用される正確なアルゴリズムは JavaScript エンジンによって異なりますが、広く使用されているアルゴリズムはメルセンヌ ツイスターです。

Math.random() の仕組み

メルセンヌ ツイスターは、その長期間と高品質なランダム性で知られています。以下は、メルセンヌ ツイスター アルゴリズムを JavaScript で実装する方法の簡略化された例です:

class MersenneTwister {
  constructor(seed) {
    if (seed === undefined) {
      seed = new Date().getTime();
    }
    this.mt = new Array(624);
    this.index = 0;
    this.mt[0] = seed;
    for (let i = 1; i < 624; i++) {
      this.mt[i] = (0x6c078965 * (this.mt[i - 1] ^ (this.mt[i - 1] >> 30)) + i) >>> 0;
    }
  }

  generate() {
    if (this.index === 0) {
      this.twist();
    }
    let y = this.mt[this.index];
    y = y ^ (y >> 11);
    y = y ^ ((y << 7) & 0x9d2c5680);
    y = y ^ ((y << 15) & 0xefc60000);
    y = y ^ (y >> 18);
    this.index = (this.index + 1) % 624;
    return y / 0xffffffff;
  }

  twist() {
    for (let i = 0; i < 624; i++) {
      const y = (this.mt[i] & 0x80000000) + (this.mt[(i + 1) % 624] & 0x7fffffff);
      this.mt[i] = this.mt[(i + 397) % 624] ^ (y >> 1);
      if (y % 2 !== 0) {
        this.mt[i] = this.mt[i] ^ 0x9908b0df;
      }
    }
  }
}

// Example usage:
const mt = new MersenneTwister(12345); // Seed value
const randomNumber = mt.generate(); // Get a random number
console.log(randomNumber);
ログイン後にコピー

このコードは、乱数の生成に使用されるメルセンヌ ツイスター アルゴリズムの簡易バージョンを示します。

Math.random() の使用

JavaScript では、Math.random():
を使用して、0 (両端を含む) と 1 (両端を含まない) の間の乱数を生成できます。

const randomNumber = Math.random();
console.log(randomNumber);
ログイン後にコピー

Python: ランダムモジュール

Python は、乱数を生成するさまざまな関数を含む Random モジュールを提供します。 Python のランダム モジュールで使用されるデフォルトの PRNG アルゴリズムもメルセンヌ ツイスターです。

Pythonのrandomモジュールの使い方

Python で乱数を生成する例をいくつか示します:

import random

# Generate a random float between 0.0 and 1.0
random_float = random.random()
print(random_float)

# Generate a random integer between 1 and 100
random_int = random.randint(1, 100)
print(random_int)

# Generate a random number from a normal distribution with mean 0 and standard deviation 1
random_normal = random.gauss(0, 1)
print(random_normal)
ログイン後にコピー

乱数ジェネレーターのシード

再現性を確保するには、Python で乱数ジェネレーターをシードできます。

import random

# Seed the random number generator
random.seed(12345)

# Generate random numbers
print(random.random())
print(random.randint(1, 100))
ログイン後にコピー

同じシード値を使用すると、プログラムを実行するたびに同じ一連の乱数が生成されます。

結論

乱数の生成は、幅広い用途を持つ基本的な概念です。 JavaScript の Math.random() と Python の random モジュールによって生成される数値は真のランダムではありませんが、ほとんどの実用的な目的には十分なランダムです。これらのジェネレーターがどのように機能し、それらを効果的に使用する方法を理解することは、開発者にとっても研究者にとっても同様に重要です。


この記事では、JavaScript と Python で乱数が生成される方法の基本的な概要と、Math.random() と Python のランダム モジュールの使用例を示します。

以上が乱数の生成方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート