抛硬币来获得随机位吗? 还是抛出一个模以得到从1到6的随机整数? 或者从洗牌的甲板上拿出一张牌,得到一个从1到52的数字? 。 。 。 或者它能像我们一样思考,或者像我们一样有智慧?
显然,上面的例子不可能是生成随机数据的方法。
那么软件库是如何在给定的范围内生成random数字的呢?,它是比较随机的:人工生成的还是软件生成的?。
发布于 2011-07-06 08:45:24
编译器在要求随机数方面绝对不做任何事情。编译器只是做你的代码,调用一些其他的代码,它返回一个随机数。现在调用随机数的“其他代码”可能是:
在(1)和(2)的情况下,它主要是一种伪随机算法,你得到的数字并不是真正的随机数。如果它是标准库的一部分(如cMath或math.h),那么就不能肯定结果值是伪随机的,因为标准只指定定义,而不指定实现。
编辑:图书馆是stdlib.h,它总是一个psuedo随机数,正如乔伊和phresnel指出的那样。阅读评论,了解关于他们的答案的细节。我为这个错误道歉,我同意我应该更清楚地知道,而不是凭直觉来回答。
可以使用特殊的库来实现其他算法,比如Mersenne Twister算法。而且,它们也不过是能够产生随机数字的硬件驱动程序。硬件随机数生成器返回一些“真”随机数生成器。
标准库中的随机数算法最终映射到操作系统上的系统调用。因此,例如,在linux上,您可能只是从/dev/random或/dev/urandom中阅读(或者您也在自己的代码中做同样的事情)。
还请注意,不需要使用专用硬件或某些专用服务,就可以实现真正的随机性。/dev/random和/dev/urandom提供随机数,对于所有意图和目的,这些数字都可以被认为是正确的。
编辑:一些特殊的库或您自己的代码甚至可能使用一个网络服务的随机数字(其中许多提供真正的随机数字)。
发布于 2011-07-06 08:43:00
由计算机生成的数字并不是“随机”的真正定义所指的“随机”。它们是伪随机的--有一个生成数字的算法。在这里,您可以阅读更多关于这些数字的信息:生成器
发布于 2011-07-06 08:51:09
谷歌随机数生成:生成
如果不是真正的随机,我会选择一台计算机来生成一个随机数,因为人类在任何一天都是垃圾,因为他们的行为是可以预测的。
请参阅:http://www.physorg.com/news186174216.html
https://stackoverflow.com/questions/6593636
复制相似问题