当前位置: 首页 > 知识库问答 >
问题:

C总是生成相同的随机序列吗?

郑曜灿
2023-03-14
  • 在我的计算机上卸载并重新安装C编译器
  • 在我的计算机上安装和使用其他C编译器
  • 使用相同的编译器在他人的计算机上运行该程序?
  • 用不同的编译器(可能还有不同的操作系统)在其他人的计算机上运行程序?

还是仅仅是所有C编译器使用相同的RNG算法,所以伪随机序列(从一开始)对每个人都是一样的问题?

共有1个答案

韩征
2023-03-14

如果不调用srand,C会说:

C99,7.20.2.2p2)“如果在对srand进行任何调用之前调用了rand,则应生成与首次调用srand时相同的序列,种子值为1。”

因此,如果您的rand函数(在C标准中未指定,并将其交给实现)是一个算法PRNG,那么如果不调用srand,您很可能会一次又一次地得到相同的序列。

 类似资料:
  • 本文向大家介绍C#一遍又一遍地生成相同的随机数序列,包括了C#一遍又一遍地生成相同的随机数序列的使用技巧和注意事项,需要的朋友参考一下 示例 当创建Random具有相同种子的实例时,将生成相同的编号。 输出:            

  • 我如何在同一机器架构+映像(x86_64 Linux)上,从给定的种子跨不同的二进制生成一个保证的随机数序列?

  • 问题内容: 我正在尝试Java 7的 ThreadLocalRandom,并发现它在多个线程中生成完全相同的随机数。 这是我的代码,在其中创建5个线程,每个线程打印出5个随机数: 输出: 为什么对于每个线程和程序的每次执行都获得相同的随机数? 问题答案: 似乎有一个关于此问题的公开错误。看这里和这里

  • 我正在尝试实现一个函数int choose_N(void),它生成并返回一个随机的整数列表N(最多四个整数)。我不确定我是否以正确的方式使用了rand(),但这是我目前所拥有的: 这样循环会有用吗?时间是否以正确的方式初始化?

  • 问题内容: 我正在尝试在Java中生成盐,以与用于安全密码存储的哈希算法配合使用。我正在使用以下代码创建随机盐: 这应该生成一个完全安全的,随机生成的盐,以用于我的哈希算法。但是,当我运行代码时,每次都会输出相同的盐…表示生成的盐根本不是随机的。 出于明显的安全性目的,每个用户都需要一个唯一的符号,但是如果我每次创建一个新帐户时都使用此代码,则每个用户都将具有相同的符号,这一开始就破坏了它的用途。

  • stackoverflow社区, 给定数字的数字可以交换。在一个序列中,同一个数字只能使用一次(例如20和02、15和51,它们只能在一个序列中使用一次)好吧,我尝试了几个代码组合,但没有一个成功。。。