乱数は、シミュレーション、暗号化、統計的サンプリングなどのさまざまな分野で重要な役割を果たします。この記事では、JavaScript と Python という 2 つの人気のあるプログラミング言語に焦点を当てて、乱数がどのように生成されるかを詳しく説明します。
ほとんどのプログラミング言語は、擬似乱数生成器 (PRNG) を使用して乱数を生成します。 PRNG は数学的アルゴリズムを使用して、ランダムに見える一連の数値を生成します。これらの数値はシードと呼ばれる初期値によって決定されるため、真のランダムではありません。ただし、多くのアプリケーションには十分です。
JavaScript の Math.random() 関数は、乱数を生成するためによく使用されます。 Math.random() で使用される正確なアルゴリズムは JavaScript エンジンによって異なりますが、広く使用されているアルゴリズムはメルセンヌ ツイスターです。
メルセンヌ ツイスターは、その長期間と高品質なランダム性で知られています。以下は、メルセンヌ ツイスター アルゴリズムを 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);
このコードは、乱数の生成に使用されるメルセンヌ ツイスター アルゴリズムの簡易バージョンを示します。
JavaScript では、Math.random():
を使用して、0 (両端を含む) と 1 (両端を含まない) の間の乱数を生成できます。
const randomNumber = Math.random(); console.log(randomNumber);
Python は、乱数を生成するさまざまな関数を含む Random モジュールを提供します。 Python のランダム モジュールで使用されるデフォルトの PRNG アルゴリズムもメルセンヌ ツイスターです。
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 サイトの他の関連記事を参照してください。