什么是正确的方式使用rand()函数在C ++?什么是正确的方式使用rand()函数在C ++?(W

2019-06-12 04:58发布

我做了一本书的锻炼,上面写着编写生成psuedorandom数的程序。 我开始用简单。

#include "std_lib_facilities.h"

int randint()
{
    int random = 0;
    random = rand();
    return random;
}

int main()
{
    char input = 0;
    cout << "Press any character and enter to generate a random number." << endl;
    while (cin >> input)
    cout << randint() << endl;
    keep_window_open();
}

我注意到,每个程序运行时,会有相同的“随机”的输出。 所以,我看着随机数生成器,并决定这包括首先在randint尝试播种()。

    srand(5355);

刚刚产生相同数量的一遍又一遍(我现在觉得愚蠢实现它。)

所以我想我会很聪明和实施这样的种子。

srand(rand());

这基本上只是做了作为程序首先没有,但输出的不同组数字(它有道理的,因为由兰特()生成所述第一数总是41)相同的

我能想到的唯一的事情,使这个更随机是:

  1. 让用户输入一个号码,设置为种子(这将是很容易实现,但这也是不得已而为之)OR
  2. 不知何故已经种子被设置为计算机时钟或一些其它不断变化的数量。

我在我头上,我现在应该停下来? 是选择2难以实现? 任何其他的想法?

提前致谢。

Answer 1:

选项2并不难,在这里你去:

srand(time(NULL));

你需要包括stdlib.hsrand()time.htime()



Answer 2:

srand()函数只能使用一次:

int randint()
{
    int random = rand();
    return random;
}

int main()
{
    // To get a unique sequence the random number generator should only be
    // seeded once during the life of the application.
    // As long as you don't try and start the application mulitple times a second
    // you can use time() to get a ever changing seed point that only repeats every
    // 60 or so years (assuming 32 bit clock).
    srand(time(NULL));
    // Comment the above line out if you need to debug with deterministic behavior.

    char input = 0;
    cout << "Press any character and enter to generate a random number." << endl;

    while (cin >> input)
    {
        cout << randint() << endl;
    }
    keep_window_open();
}


Answer 3:

这是常见与当前播种随机数发生器。 尝试:

函数srand(时间(NULL));



Answer 4:

问题是,如果你不播种发生器将种子本身0 (好像srand(0)被称为)。 的PRNG的设计产生相同的种子序列相同(由于这样的事实,PNRGs不是真正随机的,它们是确定性算法,也许有点,因为它是用于测试非常有用)时。

当你想使用一个随机数种子它

srand(rand());

你在做的效果:

srand(0);
x = rand();   // x will always be the same.
srand(x);

如FigBug提到 ,使用播种发电机常用。



Answer 5:

我认为这些文章的观点是,在实现该算法是在兰特()不是如何有效种子它一展身手。

产生的(伪)随机数是不平凡并且是值得研究生成它们的不同的技术。 我不认为单纯使用兰特()是作者的初衷是什么。



文章来源: What's the Right Way to use the rand() Function in C++?
标签: c++ random