stateful randomness / 状态实验

随机数不是一只黑箱,
而是两台相扣的机器

引擎产生确定的原始序列,分布把原始值变成所需形状。种子只初始化引擎;调用顺序与分布内部状态同样决定结果。

当前 seed2025
引擎调用0
引擎状态000007e9
分布缓存

引擎原始值磁带

每消耗一次原始值,读头向右推进

尚未取样

均匀整数通常消耗一个引擎值;本模拟的正态分布成对生成,并暂存第二个标准正态值。

状态轨迹

最新操作在最上方,最多保留 80 条。

步骤动作输出状态变化
操作一次后,这里会显示引擎与分布各自发生了什么。

A / B 可重放分支

先复制完整状态,再比较相同或不同调用顺序。

分支 A

未复制
引擎状态
引擎调用
等待复制当前状态。

分支 B

未复制
引擎状态
引擎调用
等待复制当前状态。

A / B 尚未建立。复制的是引擎状态、调用计数和分布缓存,而不只是 seed。

RULE 01

种子不是结果

相同 seed 只有在引擎类型、分布参数和调用顺序也相同时才可重放。每次临时重建同种子,只会反复拿到序列第一项。

RULE 02

分布也可能有状态

正态分布可缓存成对生成的第二项。只给引擎重新设种子,而不执行分布的 reset(),下一项未必来自刚重置的引擎。

RULE 03

stddev 是标准差

normal_distribution(mean, stddev) 的第二个参数不是方差。标准差必须为正;方差则是 stddev²