为什么编程写不出真随机

fiy 其他 22

回复

共3条回复 我来回复
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    编程写不出真随机的原因主要有以下几点:

    1. 程序是基于算法的:编程语言中的随机数生成函数实际上都是基于某种算法生成的,这些算法是确定性的,即给定相同的输入,就会得到相同的输出。因此,尽管看起来是随机的,但实际上是可以被预测的。

    2. 缺乏真正的随机源:随机数生成函数需要一个初始种子作为输入,以此来生成随机数序列。然而,计算机本身是一个确定性的机器,没有真正的随机源。种子可以是基于时间、硬件状态等因素,但这些因素仍然是可测量和可预测的。

    3. 伪随机性:由于计算机的确定性特性,所以我们一般说的随机数实际上是伪随机数。伪随机数序列是通过确定性算法产生的,但经过一系列复杂的计算使其在统计上具有随机性。然而,伪随机数序列是可以被重现的,只要知道算法和种子,就可以重现相同的序列。

    为了解决编程写不出真随机的问题,可以采取以下方法:

    1. 使用真随机源:通过硬件设备(如热噪声、收音机信号等)来获取真正的随机数,并将其作为种子输入到随机数生成函数中。这样可以增加随机性,并减少可预测性。

    2. 使用外部随机数服务:可以利用互联网上的外部随机数服务来获取真随机数。这些服务通常基于物理过程(如放射性衰变)来生成真随机数,可以提供更高的随机性。

    3. 增加随机性的复杂性:通过引入更多的因素来增加随机性的复杂性。例如,可以结合多个随机数生成函数,或者使用更复杂的算法来生成随机数序列。

    总结来说,编程写不出真随机的主要原因是程序的确定性和缺乏真正的随机源。为了增加随机性,可以使用真随机源或外部随机数服务,并增加随机性的复杂性。

    1年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    编程中的随机性是一个常见的问题。尽管编程语言提供了随机数生成器函数,但生成的随机数并不是真正的随机。以下是一些原因:

    1. 伪随机数生成器:计算机程序使用伪随机数生成器(PRNG)来生成随机数。PRNG是基于一个初始种子值生成随机数序列的算法。这意味着,只要种子值相同,生成的随机数序列也将是相同的。所以,实际上,计算机生成的随机数是可预测的。

    2. 时间种子:PRNG的种子值通常是基于当前时间。这意味着在同一毫秒内生成的随机数序列是相同的。因此,在很短的时间间隔内连续调用随机数生成器,可能会得到相同的随机数。

    3. 有限状态空间:PRNG的种子空间是有限的,通常是32位或64位整数。这意味着随机数生成器的周期是有限的,一旦达到周期的末尾,随机数序列将从头开始重复。

    4. 随机性的定义:真正的随机性是指无法预测下一个值的特性。但是,计算机程序是通过算法和计算生成随机数的,因此生成的随机数是可以预测的。

    5. 外部输入的缺乏:真正的随机性来自于外部环境的噪声,例如大气噪声、放射性衰变等。但是,计算机程序往往缺乏这些外部输入,因此无法生成真正的随机数。

    尽管编程中的随机性不是真正的随机,但在许多应用中,伪随机数已经足够满足需求。如果需要更接近真实随机性的随机数,可以使用外部设备或服务,例如随机数发生器硬件或网络上的真随机数生成器。

    1年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    编程中很难实现真正的随机性,这是因为计算机是一个确定性的机器,它只能按照预定的算法执行指令。虽然计算机可以生成伪随机数,但这些数字实际上是通过算法生成的,而不是真正的随机数。

    在计算机中生成伪随机数的常见方法是使用伪随机数生成器(PRNG)。PRNG是一种算法,它接收一个称为种子(seed)的初始值,并根据这个种子生成一系列看似随机的数字。然而,由于PRNG算法的确定性,相同的种子将产生相同的数字序列,这违背了真正随机的定义。

    为了增加伪随机数的随机性,通常会使用当前时间作为种子。这样可以确保每次程序运行时种子都是不同的,从而产生不同的数字序列。但是,即使使用时间作为种子,生成的伪随机数序列也不是真正随机的。

    另一个常见的方法是使用硬件设备生成随机数,如热噪声、鼠标移动或键盘输入等。这些设备可以提供一些看似随机的数据,但实际上也是由物理过程生成的,所以也不是真正的随机数。

    为了解决这个问题,一些计算机系统使用真随机数发生器(TRNG)。TRNG通过测量物理过程中的不确定性来生成真正的随机数。这些物理过程包括量子效应、放射性衰变等。然而,TRNG的实现相对复杂,并且通常需要特殊的硬件设备。

    总而言之,编程中很难实现真正的随机性,因为计算机是一个确定性的机器。尽管可以使用伪随机数生成器来生成看似随机的数字序列,但这些数字实际上是由算法生成的,而不是真正的随机数。要生成真正的随机数,可能需要使用特殊的硬件设备或物理过程来测量不确定性。

    1年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部