我正在读一本C书。在rand()
函数的描述中,他们说:
rand
返回0
到RAND_MAX
范围内的伪随机整数。RAND_MAX
依赖于实现,但至少为32767
。
我不明白;什么是“伪随机整数”?
感谢。
答案 0 :(得分:7)
非正式地,伪随机数是一个不是真正随机的数字,但对于大多数用途而言“足够随机”。
计算机本质上是确定性设备。处理器以特定顺序执行特定命令,程序控制处理器如何执行。因此,程序很难生成随机数,因为没有确定性过程可以创建随机数。因此,许多程序所做的是使用伪随机数生成器,这是一个根据某些确定性公式生成数字的函数,该公式似乎是随机的但实际上并非如此。大多数编程语言提供某种伪随机数生成器用于一般编程使用,当不需要真正的随机性时,它们工作正常。
但是,它们有其局限性。在加密设置中,例如,在许多情况下,需要真正的随机性以防止攻击者猜测系统的工作并使其受损。在这种情况下,可以通过使用可以放大背景噪声或使用量子效应的专用硬件来获得真正的随机数。然而,这种随机性极难产生,因此除非需要绝对的不可预测性,否则它不常用。
答案 1 :(得分:3)
来自wiki条目:Pseudorandom number generator
伪随机数生成器 (PRNG),也称为确定性 随机比特生成器(DRBG),是一个 生成序列的算法 接近数字的数字 随机数的属性。
换句话说,它近似随机(在一定程度上),但在物理来源的随机噪声意义上并非真正随机。
答案 2 :(得分:2)
这意味着这个数字似乎是随机的,但事实是计算机无法生成一个真正的随机数,它根据一个趋于随机的逻辑计算出一个数字。
像观察击键时间差,然后将其用作计算数字的输入。这些东西与其他几个输入相结合往往会给出随机数,但实际上它只是一个算法,它倾向于给出随机数。如果匹配相同的条件,它将给出相同的数字。
答案 3 :(得分:2)
为了向你已经收到的其他正确答案添加一些迂腐,实际上没有“伪随机整数”(或者就此而言,随机整数)。这是John von Neumann在他的名言中所提出的观点(通常误导为缩写为第一句):
“任何考虑算术的人 产生随机数字的方法是, 当然,处于罪恶的状态。对于作为 已多次指出, 没有随机的东西 号码 - 只有方法 产生随机数,严格 算术程序当然不是 这样的方法“
考虑数字7.它是一个随机整数吗?如果是,是伪随机整数还是真随机整数?数字-10怎么样?显然,这些问题没有意义(obligatory link to xkcd 221)。
因此,正如其他人所指出的那样,该书实际上意味着该数字是由伪随机(即确定性)数字生成器生成的,而不是从真正的随机序列获得。有几种不同的伪随机数生成器算法,最好的算法生成的输出statistically与真正的随机序列无法区分。
答案 4 :(得分:0)
在大多数计算机中,随机数被视为伪随机数,因为它不是完全随机的。
伪=假
基本上,当前时间用于生成随机数,因此可以预测最初生成的数字,对于大多数应用程序,这很好。
答案 5 :(得分:0)
这意味着它生成一个数字序列,该序列在分布方面表现出随机数的属性,但在数学上生成并在其输出中确定任何特定的种子值。
您可以通过创建一个使用此类函数生成短序列的程序来查看,并观察每次运行它时它会生成相同的序列。这个选项令人不知所措,但在测试代码时也是一个非常有用的属性。当需要不太可预测的序列时,通常使用种子值初始化PRNG,该值本身是不可预测的,通常是从当前系统时间导出的,因为在程序启动时它通常是不可预测的。
伪随机数生成器通常不适用于数据加密或在线赌博应用等安全应用,因为它们的最终可预测性可能是一个严重的弱点。