首页 > 解决方案 > C++:为什么我第一次调用 rand() 重复相同的数字,而第二次调用不是?

问题描述

在尝试生成0.0和之间的随机数1.0时,我的程序每次都生成几乎相同的“随机”数:

int main(){
    srand(time(NULL));
    double fraction = 1.0 / (RAND_MAX + 1.0);
    int number = rand();
    cout << "Random number: " << number * fraction << endl;

输出始终是0.698...,没有失败。(或者至少在那个地区。)

我决定看看如果我在同一块内再次重复该过程会发生什么:

int main(){
    srand(time(NULL));
    double fraction = 1.0 / (RAND_MAX + 1.0); 

    int number = rand();
    cout << "1st random number: " << number * fraction << endl;

    int number2 = rand();
    cout << "2nd random number: " << number2 * fraction << endl;

    cout << "\n";

这是多次运行第二个块的输出:

MacBook-Air-2:Worksheet2 Olly$ ./exercise5.out
1st random number: 0.700058
2nd random number: 0.870525

MacBook-Air-2:Worksheet2 Olly$ ./exercise5.out
1st random number: 0.700066
2nd random number: 0.00206314

MacBook-Air-2:Worksheet2 Olly$ ./exercise5.out
1st random number: 0.700073
2nd random number: 0.133601

MacBook-Air-2:Worksheet2 Olly$ ./exercise5.out
1st random number: 0.700073
2nd random number: 0.133601

MacBook-Air-2:Worksheet2 Olly$ ./exercise5.out
1st random number: 0.700081
2nd random number: 0.265139

如您所见,第二个表现出似乎是随机的行为,而第一个则每次都保持几乎相同。

我怀疑这与我的计算机如何编译代码有关(可能没有正确安装某些东西),根据这个讨论:http ://www.cplusplus.com/forum/beginner/5131/ 。所链接的讨论实际上从未就如何避免编译器端行为中的这种跨机器差异得出结论。

问题:为什么“第一个随机数”始终表现出比“第二个随机数”少得多的波动?

标签: c++randomcompilation

解决方案


推荐阅读