【问题标题】:How to change srand() at runtime如何在运行时更改 srand()
【发布时间】:2012-09-04 03:20:52
【问题描述】:

我正在使用带有固定种子的srand(),我需要在一次执行中使用一组不同的种子(例如 100、200、300、...、1000)运行测试。这可能吗?问题是srand()是在main开头定义的,所以我不知道如何用变量控制种子。

【问题讨论】:

  • srand() 可以在任何你想要的地方使用。如果您希望特定测试具有特定种子,请在测试之前调用 srand(seed)。
  • 只需将代码放在for循环中,并在每次迭代的开头调用srand aht
  • 你是问如何专门修改种子中的变量,使其输出100、200...1000?还是其他顺序?
  • 不,我只需要修改种子的值...感谢所有答案

标签: c++ runtime srand random-seed


【解决方案1】:

您可以使用 srand(time(NULL)),并包含 time.h 标头。它使用当前系统时间初始化 srand()。希望能帮助到你。 !!

【讨论】:

  • 这对单元测试不是很有用。运行单元测试时,您希望 rand() 返回相同的数字集,因此您在每个测试开始时使用 srand() 和一个常量值,以确保获得一致的结果。
【解决方案2】:

如果单元测试测试使用 rand() 的代码,那么您应该调用 srand(<const>) 作为测试设置的一部分。

这样,测试的行为方式与作为套件的一部分独立运行的天气相同。

【讨论】:

    【解决方案3】:

    对于 srand 调用中使用的每个不同的种子值,伪随机数生成器可以预期在随后的 rand 调用中生成不同的连续结果。 使用相同种子的两个不同初始化指示伪随机生成器在两种情况下为后续调用 rand 生成相同的连续结果。

    这可能说明:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main ()
    {
      printf ("First number: %d\n", rand() % 100);
      srand ( time(NULL) );
    
      printf ("Random number: %d\n", rand() % 100);
      srand ( 1 );
    
      printf ("Again the first number: %d\n", rand() %100);
      srand ( time(NULL) );
    
      printf ("Random number: %d\n", rand() % 100);
    
      printf ("Random number: %d\n", rand() % 100);
    
      printf ("Random number: %d\n", rand() % 100);
    
      printf ("Random number: %d\n", rand() % 100);
    
      return 0;
    }
    

    输出:

    First number: 41
    Random number: 76
    Again the first number: 41
    Random number: 76
    Random number: 14
    Random number: 74
    Random number: 41
    Press any key to continue
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-12
      • 2010-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多