数学随机硬币折腾

时间:2014-01-10 09:30:54

标签: c# random

我写了一个函数A,在这个函数里面有一个代码片段。

rnd.Next(1,3);

如果我运行我的A功能一百次,并打印出结果,结果是不现实的,例如它总是赢或总是输。所以随机函数是有问题的。我需要一个真实的真实随机函数。

如何实现?

2 个答案:

答案 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 = 0i = 1

编辑是的,因为提到的Dmitry Bychenko每次都不会实例化新的Random对象。