long timeValue = timeInMillis();
int rand = timeValue%100 + 1;
Run Code Online (Sandbox Code Playgroud)
如果我们在循环中执行上述代码N次,它将生成1到100之间的N个随机数.我知道随机数的生成是一个棘手的问题.只是想知道这是一个很好的随机数生成算法吗?还是伪随机数发生器?
为什么我认为这会产生对随机行为的良好估计?1)1到100之间的所有不均匀分布.没有偏见.2)timeInMillis将显示一些随机行为,因为我们永远无法猜测CPU将执行此功能的时间.在CPU中运行有很多不同的任务.因此,在下一次循环迭代中,timeInMillis()指令的执行的准确时间是不可预测的.
不.首先,在大多数处理器上,这将在1毫秒内循环多次(可能是完整的100),这将导致100个相同的数字.
即使使用计时器滴答对随机数生成器进行播种也是危险的 - 计时器滴答很少像您预期的那样"随机".
| 归档时间: |
|
| 查看次数: |
321 次 |
| 最近记录: |