实现 rnd():从基础随机数到可控随机
副标题 / 摘要 随机数生成是很多算法的基础。本文用线性同余法实现一个可复现的 rnd()。 目标读者 学习随机算法的开发者 需要理解 PRNG 的工程师 算法与系统基础学习者 背景 / 动机 大多数语言的随机数来自伪随机算法。 理解基础实现有助于评估随机性与可复现性。 核心概念 伪随机数(PRNG):由公式生成的序列 种子(Seed):决定序列起点 可复现性:同样种子产生相同序列 实践指南 / 步骤 选择线性同余参数 用种子初始化状态 每次调用更新状态并输出 将结果归一化到 [0,1) 可运行示例 class LCG: def __init__(self, seed=1): self.mod = 2 ** 31 self.a = 1103515245 self.c = 12345 self.state = seed def rnd(self): self.state = (self.a * self.state + self.c) % self.mod return self.state / self.mod if __name__ == "__main__": rng = LCG(seed=42) for _ in range(3): print(rng.rnd()) 解释与原理 线性同余法是最简单的 PRNG: state = (a * state + c) mod m。 它速度快,但随机性质量有限。 ...