簡體   English   中英

C ++中用於函數rand()的公式

[英]Formula used for function rand() in c++

我想知道使用C ++中的rand()函數生成隨機數的公式是什么。 起初我雖然每次都會返回隨機數,但是不會。

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main()
{
    cout << "Hello world!" << endl;

    srand(9865);
    cout << rand() << "\n";
    return 0;
}

在這里我想,也許是由於給定的種子數量和未知的公式,它會顯示相同的數量。

但是,當我刪除“ srand(9865)”時, 並執行幾次,僅顯示“ 41”作為輸出。 請給我解釋一下這是怎么回事。

來自http://linux.die.net/man/3/rand

“如果未提供種子值,則rand()函數將自動以值1,“和”作為種子。通過調用具有相同種子值的srand(),這些序列是可重復的。

您每次都必須使用非靜態種子為隨機函數播種。 一種簡單但不太准確的解決方案是隨時鍾播種它:

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main()
{
    cout << "Hello world!" << endl;

    srand(time(NULL));
    cout << rand() << "\n";
    return 0;
}

庫規范沒有規定隨機數生成器的公式(取決於實現)。 指定的唯一的東西是東西可以通過控制srand的一致偽隨機生成:

為了生成類似隨機數的值,通常將srand初始化為一些與眾不同的運行時值,例如函數time返回的值(在標頭<ctime>中聲明)。 對於大多數瑣碎的隨機化需求而言,這足夠獨特。

所以:

  1. 如果使用給定的種子初始化srand ,則以下rand調用在各個運行之間將保持一致。

  2. 如果您使用基於時間的種子初始化srand ,則以下rand調用在運行中幾乎肯定會有所不同。

  3. 如果不初始化srand ,則以下對rand調用將使用默認的初始種子。


請注意,在當代C ++中,應避免使用這些古老的函數。 請參閱此問題的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM