【问题标题】:Algorithm to generate a random number? Don't use System.Random生成随机数的算法?不要使用 System.Random
【发布时间】:2010-08-27 06:58:06
【问题描述】:

如果没有 System.Random 类,您将如何生成随机数?

是否有任何已知的算法或者你们曾经设计过一种算法?

【问题讨论】:

标签: c# java .net random


【解决方案1】:

真正的随机数只能在计算机“外部”使用放射性计数等方法生成。一些威盛处理器有硬件可以做到这一点。

Don Knuth 的计算机编程艺术第二卷花了很多时间从数学背景中详尽地讨论了各种伪随机数的实现。推荐阅读。

【讨论】:

  • +1 你无法通过任何编程语言获得真正的随机数。
  • 通过任何确定性编程语言。但事实上,很多都不是。例如。创建两个线程,让它们竞争互斥体。这样你得到的熵不到一点,但它确实是随机的。
【解决方案2】:

我们目前的确定性计算机无法真正生成真正的随机数。然而,有许多不同的方法可以生成伪随机数。有关算法的一些信息,请参阅维基百科上的 pseudorandom number generator

【讨论】:

    【解决方案3】:

    看看Mersenne Twister。我相信这与 System.Random 实现的算法相同,它是非常常见的非加密安全 PRNG,具有良好的随机分布。

    【讨论】:

      【解决方案4】:

      就像其他答案所说,用计算机生成真正的随机数是不可能的,但至于伪随机,我之前使用过的一种算法是Linear Congruential Generator,它简单快速,但我'我相信还有更好的选择。

      编辑:语法

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-24
        • 2019-12-04
        • 1970-01-01
        • 2012-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多