我写了一个函数A,在这个函数里面有一个代码片段。
rnd.Next(1,3);
如果我运行我的A功能一百次,并打印出结果,结果是不现实的,例如它总是赢或总是输。所以随机函数是有问题的。我需要一个真实的真实随机函数。
如何实现?
答案 0 :(得分:2)
我猜你用Random
做了一个典型的错误,你每次都重新创建,例如:
Random rnd = new Random();
int toss = rnd.Next(1,3);
如果你这样做,rnd很可能每次从相同的种子开始,这就是为什么结果严重偏斜。解决方案可以是这样的:
// Let it be thread-safe
private static ThreadLocal<Random> s_Gen = new ThreadLocal<Random>(
() => new Random());
// Thread-safe non-skewed generator
public static Random Generator {
get {
return s_Gen.Value;
}
}
...
int toss = Generator.Next(1,3);
答案 1 :(得分:1)
使用此
int i = rnd.Next(int.MaxValue) % 2;
然后检查i = 0
或i = 1
。
编辑是的,因为提到的Dmitry Bychenko每次都不会实例化新的Random
对象。