1.问题描述
编写一个不溢出的随机数发生器,可以返回一个int型的伪随机数,也可以返回一个double型的范围在(0,1)之间的数。
2.解决办法
用Lehmer建议用的一个31 bit的素数 M=2^31-1=2147483647,并用A=48271作为全周期发生器的值。通过以下式子得到一个在随机时间产生的随机数。
3.随机类的代码
1 | public class NotSpillRandomGenerator { |
4.测试类代码
1 | public class RandomTest { |
5.测试结果
注:
- 所做的分析都是笔者自己的见解,如有不正确还请见谅。
- 另外,如需更多代码请访问我的Github:https://github.com/Zxnaruto