隨機數在模擬、密碼學、統計採樣等各領域中發揮著至關重要的作用。本文深入探討了隨機數是如何產生的,並著重於兩種流行的程式語言:JavaScript 和 Python。
大多數程式語言使用偽隨機數產生器(PRNG)來產生隨機數。 PRNG 使用數學演算法產生隨機出現的數字序列。這些數字並不是真正隨機的,因為它們是由稱為種子的初始值決定的。然而,它們對於許多應用來說已經足夠了。
JavaScript 的 Math.random() 函數通常用於產生隨機數。 Math.random() 使用的確切演算法可能因不同的 JavaScript 引擎而異,但廣泛使用的演算法是 Mersenne Twister。
梅森龍捲風以其長週期和高品質的隨機性而聞名。以下是如何在 JavaScript 中實作 Mersenne Twister 演算法的簡化範例:
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);
此程式碼示範了用於產生隨機數的 Mersenne Twister 演算法的簡化版本。
在 JavaScript 中,您可以使用 Math.random() 產生 0(含)和 1(不包括)之間的隨機數:
const randomNumber = Math.random(); console.log(randomNumber);
Python提供了random模組,其中包含各種產生隨機數的函數。 Python 的 random 模組預設使用的 PRNG 演算法也是 Mersenne Twister。
以下是在 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 的 random 模組的實際範例。
以上是隨機數字是如何產生的的詳細內容。更多資訊請關注PHP中文網其他相關文章!