CCalculate.Studio

🎲 随机数生成器

这个生成器在你选定的区间内抽取随机整数,可以选择不重复。它使用种子而不是时钟,这意味着相同的种子总能精确复现同一次抽取——这一特性对教学、可复现研究以及任何需要展示过程的人都很重要。更换种子即可重新抽取。

最后审核: 2026-07-07100% 免费 · 无需注册
在 Google 中设为首选

这个生成器适合与不适合做什么

伪随机生成器在适用场景上差别极大。本生成器速度快、可复现,对日常用途在统计上表现良好,而且绝不是产生机密的来源。

用途是否适合原因
教学、模拟、抽样适合抽取可复现反而是优点
抽奖、掷骰、彩票号码适合,但要换用新种子知道种子的人可以复现这次抽取
密码、密钥、令牌、会话标识不适合可以从输出反推内部状态;请改用密码生成器
受监管的博彩不适合这些场景要求认证硬件或密码学生成器
  • 区间的两个端点都包含在内,因此 1 到 100 的区间包含 100 个可能取值。
  • 无放回时,抽取个数不能超过区间内数值的个数。计算器会直接拒绝,而不是悄悄重复。

什么是伪随机生成器

伪随机数生成器是一种确定性算法,它产生的序列能够通过随机性的统计检验。它并非物理意义上的随机:它是一个固定的递推式,从给定的初始值——种子——出发,总是产生同一个序列。

本生成器是 32 位 xorshift 生成器,由 George Marsaglia 于 2003 年发表在《Journal of Statistical Software》上。它反复把一个数值与自身的移位副本做异或运算,所选的三个移位量能让序列在重复之前遍历所有非零的 32 位状态。

使用种子是刻意为之,而不是一种局限。本站每一个计算器都是其输入的纯函数,正是这一点让结果可复现、可核查。它还带来时钟驱动的生成器无法提供的好处:把种子与你的数字一并注明,任何人都能精确复现你的抽取。

如何使用随机数生成器

  1. 设定最小值和最大值。两个端点都包含在区间内。
  2. 选择要抽取多少个数。
  3. 决定是否允许重复。无放回时任何数值都不会出现两次,因此不能抽取超过区间容量的个数。
  4. 想要不同的抽取结果时就更换种子。相同的种子总是返回相同的数字。

这些数是怎么产生的

x = x XOR (x << 13); x = x XOR (x >> 17); x = x XOR (x << 5)
u = x / 2^32, 满足 0 <= u < 1
数值 = 最小值 + 向下取整(u x (最大值 - 最小值 + 1))
区间内数值个数 = 最大值 - 最小值 + 1

xorshift 递推式在每次抽取时把一个 32 位状态变换三次,然后除以 2^32,得到一个从零到一(不含一)的数值。再乘以区间大小并向下取整,就映射为一个整数。

无放回抽取采用在区间上的部分 Fisher-Yates 洗牌。每次抽取把一个剩余元素换到位,一趟即可选出均匀随机的子集,而不会像「抽取后重试」那样在候选逐渐耗尽时陷入停滞。

常见错误

  • 把伪随机生成器用于任何涉及机密的场合。序列完全由种子决定。
  • 不更换种子却期待得到新的数字。可复现正是目的;种子就是控制开关。
  • 以为上界不包含在内。这里区间的两个端点都包含在内。
  • 要求的不同取值个数超过了区间容量。
  • 把一串相近的数值当成故障。聚集是随机序列的正常性质,它的缺席反而比出现更可疑。

常见问题

为什么相同的种子总是给出相同的数字?

因为伪随机生成器是一个确定性的递推式,而种子就是它的初始状态。这是优点而非缺陷:注明种子后,任何人都能精确复现你的抽取,而这正是可复现研究和课堂演示所需要的。想要不同的抽取,请更换种子。

用它做抽奖够随机吗?

用于非正式抽奖是够的,前提是选择一个参与者无法预测的种子,并在事后公布,使结果可被验证。用于受监管的博彩则不够:那类场景要求经过认证的硬件生成器或密码学安全的算法。

我可以用它生成密码吗?

不可以。xorshift 生成器的内部状态可以从一小段输出中反推出来,因此由它派生的一切都是可预测的。请使用本站的密码生成器,它取自操作系统的密码学安全随机源。

无放回抽取是什么意思?

意思是任何数值都不会出现一次以上,就像摇彩票球一样。由于每次抽取都会从候选中拿走一个数值,你不能抽取超过区间容量的个数:想从 5 个数的区间里抽出 6 个互不相同的数是不可能的。

这些数是均匀分布的吗?

是的,达到底层生成器的精度。区间内每个数值出现的可能性相同,而无放回模式使用部分 Fisher-Yates 洗牌,它以相同概率选出给定大小的每一个子集。

参考文献

  1. Marsaglia G. Xorshift RNGs. Journal of Statistical Software 2003; 8(14): 1-6. doi:10.18637/jss.v008.i14.
  2. Knuth DE. The Art of Computer Programming, Volume 2: Seminumerical Algorithms, 3rd edition. Addison-Wesley, 1997 — random number generation and statistical testing.
  3. Fisher RA, Yates F. Statistical Tables for Biological, Agricultural and Medical Research. Oliver and Boyd, 1938 — the shuffle used for sampling without replacement.
  4. L'Ecuyer P, Simard R. TestU01: A C library for empirical testing of random number generators. ACM Transactions on Mathematical Software 2007; 33(4): 22.

统计学 · 全部计算器

相关计算器