18新利最新登入像计算机这样完全具有逻辑的机器如何生成随机数?

以0和1表示的数字数据的图像。"width=
计算机编程是一个多样化的话题。Andriy Onufriyenko / Getty Images

计算机可以通过两种方式生成随机数:

你可以创建某种设备来监测一个完全随机的自然事件,并将其结果发送到计算机。例如,你可以在盖革计数器前放置一块放射性物质,并连接盖革电脑的计数器。自放射性衰变是随机的,那么盖革计数器就会产生真正的随机数。这种方法非常罕见,因为没有多少人将盖革计数器连接到他们的机器上。你可以创建一个公式来生成伪随机号码。在设计公式时,我们的想法是让它产生一串数字,对于不知道公式是什么的人来说,这串数字看起来是随机的。一个好的公式的特征包括:

广告

  • 没有重复:序列不会循环并重复自己。良好的数值分布:如果公式产生0到9之间的随机数,那么它产生的0、1、2等的数量在很长一段时间内应该大致相等。缺乏可预测性你没有办法预测下一个数字会是什么,除非你知道公式和公式种子(初始值)。

下面是Kernighan和Ritchie在《C编程语言》一书中给出的一个简单的随机数公式:

Int rand() {random_seed = random_seed * 1103515245 +12345;返回(unsigned int)(随机种子/ 65536)% 32768;}

这个公式假设存在一个变量random_seed,它最初被设置为某个数字。random_seed变量乘以1,103,515,245,然后将12,345添加到乘积中;Random_seed随后被这个新值替换。这实际上是一个很好的伪随机数生成器。它具有良好的分布,并且是非重复的。如果你用它来产生0到9之间的随机数,下面是它产生的前20个值,如果种子是10:

44607423505664567674

如果你让它在0到9之间产生10,000个值,这是分布:

0 - 10151 - 10242 - 10483 - 9964 - 9885 - 10016 - 9967 - 10068 - 9659 - 961

任何伪随机数公式都依赖于种子值启动序列。如果您从相同的种子开始,您将从公式中得到相同的值序列。如果你给出rand ()函数上面显示的种子118新利最新登入0对1电脑看看它产生的数字流,它将与任何运行它的计算机产生的数字流相同,种子为10。在的情况下全球定位系统在美国,这种可重复性被用来为每个卫星提供可预测但不同的GPS接收器可以跟踪的值模式。

创建一个随机的和不可预测的序列,种子必须是一个真正的随机数。为获得种子的真正随机数,大多数程序使用当前日期和时间,转换为整数值(例如,转换为自1970年1月1日以来经过的秒数)。由于每次启动程序时,这是一个不同的数字,因此它是一个很好的种子。

有关计算机和编程的18luck手机登录更多信息,请参阅下一页。

广告

特色

广告

加载……
Baidu