【发布时间】:2010-11-02 02:44:41
【问题描述】:
long timeValue = timeInMillis();
int rand = timeValue%100 + 1;
如果我们在一个循环中执行上述代码 N 次,它将生成 N 个 1 到 100 之间的随机数。我知道随机数的生成是一个棘手的问题。只是想知道这是一个好的随机数生成算法吗?还是它是伪随机数生成器?
为什么我认为这会产生对随机行为的良好估计? 1) 1 到 100 的所有 no 都将均匀分布。没有偏见。 2) timeInMillis 会表现出一些随机行为,因为我们永远无法真正猜测 CPU 将在什么时间执行此函数。 CPU中运行着许多不同的任务。所以 timeInMillis() 指令的确切执行时间在循环的下一次迭代中是不可预测的。
【问题讨论】:
-
"这是一个好的数字随机生成算法吗?" - 没有。
-
最近又发现了一个问题。只是想指出。如果指令的执行有些随机,则不会均匀分布。因此,如果 2) 为真,则 1) 无效。如果 1) 有效 2) 无效。所以看来我的推理是错误的。
标签: random