【发布时间】:2020-09-24 19:36:58
【问题描述】:
我实现了一个类,它采用两个(随机)uint32_t 值,并生成周期为 2^64 - 1 的伪随机 uint64_t 数字。我生成了 500,000,000 个数字,我可以看到:
- [0; 的每个百分位数; 2^64 - 1] 占所有数字的 1%,精度至少为 10^-8。
- 对于 [2; 101],可被 k 整除的数字的比例为 1/k,精度至少为 10^-4,其中大多数为 10^-5。
- 没有两个数字具有相同的值。
这些标准是否足以说我的发电机是“好”的?
【问题讨论】:
-
你希望它是加密安全的吗?
-
没有两个具有相同值的数字对于一个好的 rng 来说是一件坏事,而不是一件好事。
-
@Aplet123 根据en.wikipedia.org/wiki/Birthday_problem 使用公式
sqrt(2*2^64*ln(2)),您预计在得到重复之前必须生成 50 亿个数字 -
我同意
No two numbers having the same value不应该是 RNG 的目标,但如果您生成的数字集明显小于可能的范围,The same number not being generated more often than the probability would lead you to expect的有效目标会导致相同的结果数字。