3.10 随机数

确定性的计算机程序无法生成真正意义上的随机数。对绝大多数用途而言 pseudo-random numbers伪随机数 已经足够。伪随机数序列以确定性方式生成:这些数并非真正随机,但具备模仿随机序列的若干特性。例如,所有可能的取值在伪随机序列中出现的频率大致均等。

伪随机数由 seed value种子值 生成。从任意给定种子出发,random 函数总会生成相同的数值序列。默认情况下,Emacs 会在启动时初始化随机种子,使得每次运行 Emacs 得到的 random 序列(极大概率)互不相同。随机种子通常从系统熵源初始化;但在缺少熵池的旧平台上,种子会取自随机性较弱的易变数据(如当前时间)。

有时你希望随机数序列可复现。例如,调试行为依赖随机序列的程序时,让程序每次运行行为一致会很有帮助。要让序列可复现,执行 (random "")。这会将种子设为当前 Emacs 可执行文件对应的固定值(不同编译版本可能不同)。你也可以使用其他字符串来指定不同的种子。

Function: random &optional limit

该函数返回一个伪随机整数。重复调用会生成一系列伪随机整数。

如果 limit 是正整数:返回非负且小于 limit 的整数。否则:返回值可以是任意定长整数(fixnum),即从 most-negative-fixnummost-positive-fixnum 之间的任意整数(see 整数基础)。

如果 limit 是字符串:根据字符串内容设置新种子,后续 random 调用将返回可复现的结果序列。

如果 limitt:按 Emacs 重启的方式重新选取种子,后续 random 调用将返回不可预测的结果序列。

如果你需要用于密码学场景的随机数(nonce),通常不建议使用 random,原因如下:

emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© 2025 Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike