如何在C++中產生隨機數



C++中沒有自帶的random函數,要實現隨機數的生成就需要使用rand()和srand()。不過,由於rand()的內部實現是用線性同余法做的,所以生成的並不是真正的隨機數,而是在一定范圍內可看為隨機的偽隨機數。


Rand

單純的rand()會返回一個0至RAND_MAX之間的隨機數值,而RAND_MAX的值與int位數有關,最小是32767。不過rand()是一次性的,因為系統默認的隨機數種子為1,只要隨機數種子不變,其生成的隨機數序列就不會改變。

其實,對於rand()的范圍,我們是可以進行人為設定的,只需要在宏定義中定義一個random(int x)函數,就可以生成范圍為0至x的隨機數值。當然,也可以定義為random(a,b),使其生成范圍為a至b的隨機數值。具體定義方法在通式部分。


Srand

srand()可用來設置rand()產生隨機數時的隨機數種子。通過設置不同的種子,我們可以獲取不同的隨機數序列。可以利用srand((unsigned int)(time(NULL))的方法,利用系統時鍾,產生不同的隨機數種子。不過要調用time(),需要加入頭文件< ctime >。

示例如下:

#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main()
{
	srand((unsigned)time(NULL));
	for(int i=0;i<10;i++)
	cout<<rand()<<' ';
	return 0;
}

通式

產生一定范圍隨機數的通用表示公式是:

  • 取得[0,x)的隨機整數:rand()%x;
  • 取得[a,b)的隨機整數:rand()%(b-a)+a;
  • 取得[a,b]的隨機整數:rand()%(b-a+1)+a;
  • 取得(a,b]的隨機整數:rand()%(b-a)+a+1;
  • 取得0-1之間的浮點數:rand()/double(RAND_MAX)。

示例如下:

#include<iostream>
#include<cstdlib>
#include<ctime>
#define random(a,b) (rand()%(b-a+1)+a)
using namespace std;
int main()
{
	srand((unsigned)time(NULL));
	for(int i=0;i<10;i++)
	cout<<random(1,100)<<' ';
	return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM