随机数在模拟、密码学、统计采样等各个领域发挥着至关重要的作用。本文深入探讨了随机数是如何生成的,重点关注两种流行的编程语言: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中文网其他相关文章!