【问题标题】:Truly random numbers真正的随机数
【发布时间】:2016-04-24 04:10:33
【问题描述】:

我有两个问题:

  1. 请解释一下真正随机数的含义。我看了很多文章,但我无法理解其中的含义。

  2. 请用任何语言解释一下 Rand() 函数背后的代码,最好是 c++

【问题讨论】:

    标签: random programming-languages


    【解决方案1】:
    1. 真正的随机数是由物理随机事件(自然界中不可预测的事件)确定的。例如(原子的放射性衰变、大气噪声等)。之所以会这样,是因为计算机本身并没有真正随机的能力,然而,自然是。因此,如果计算机在本质上测量某个随机值,则该数字是“真正随机的”,但伪是计算机生成种子的地方(C++ 使用 time 生成种子)并且随机数似乎是随机,但可以预测。

    “计算机使用函数来计算随机数。这意味着:拥有相同的种子,我们每次都会得到相同的随机数行。因此是伪随机数。” ——拉尔夫·M·里肯巴赫

    1. C++ 使用时间,即自 1970 年 1 月 1 日午夜以来的秒数。因此,当您告诉计算机生成一个随机数时,它需要自 1970 年 1 月 1 日以来的秒数(一个非常大的数字,种子),发送通过算法,然后将其相应地切碎以满足您指定的范围。

    这会导致计算机读取其时钟以自动获取种子的值。 函数 time 返回自 1970 年 1 月 1 日午夜以来经过的秒数。该值被转换为无符号整数并用作随机数生成器的种子。

    这当然是简化了,更多可以在线阅读。以下是参考资料。

    参考资料:

    Truly random

    c++ docs

    【讨论】:

    • 当您在同一时间发布答案,但对方的更好。好帖子!
    • 很高兴!感谢您的帖子,它也帮助了我:)
    • 根据您的说法,伪随机数和真随机数相同吗?.. 此外,您对真随机数的定义是维基百科所述的伪随机数。
    • @HiteshSikka 我从来没有提到它们是相同的,它们是通过不同的过程生成的
    • 我要补充一点,在生成种子后,计算机使用一个函数来计算随机数。这意味着:拥有相同的种子,我们每次都会得到相同的随机数行。因此是伪随机数。
    【解决方案2】:

    简短的总结:

    真正的随机数是在任何情况下都无法计算出的数字,它是由某个事件生成的,而由Rand() 函数计算出的随机数是计算出来的。

    有多种方法可以计算出这样一个数字,有些方法比其他方法更复杂。

    请参阅this question 了解有关它在(目标 - 在本例中)C 中如何工作的更多详细信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      • 2015-05-10
      相关资源
      最近更新 更多