2010-08-27 54 views
3

如果没有System.Random类,您将如何生成一个随机数?生成随机数的算法?不要使用System.Random

是否有任何已知的算法或你们有没有设计过?

+0

return 4;十五个字符 – Dimitar 2010-08-27 07:01:26

+0

:-)十五个字符 – Faisal 2010-08-27 07:03:25

+1

@Dimitar:http://stackoverflow.com/questions/462219/xkcd-random-number – Rekin 2010-08-27 07:04:08

回答

7

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

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

+1

+1您无法通过任何编程语言获得真正的随机数。 – 2010-08-27 07:04:06

+4

通过任何_deterministic_编程语言。但其实很多不是。例如。创建两个线程,并让它们竞争一个互斥体。你以这种方式得到的熵不到一点,但它确实是随机的。 – MSalters 2010-08-27 08:41:08

1

我们目前的确定性计算机无法真正产生一个真正的随机数。然而,有许多不同的方法来生成伪随机数。有关算法的一些信息,请参见Wikipedia上的pseudorandom number generator

1

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

1

像其他答案一样,它不可能用电脑生成真随机数,但对于伪随机,我之前使用的一种算法是Linear Congruential Generator,它的简单和快速,但我是肯定有更好的选择。

编辑:语法