C++隨機數的產生
阿新 • • 發佈:2018-12-03
C++中我們經常會用到隨機數,而隨機數的生成我們通常會用到rand()和srand()函式,由於rand()的內部實現是用線性同餘法來做的,所以並不能生成真正的隨機數,而是在一定範圍內可看為隨機數的偽隨機數。
Rand()函式
但有rand()函式只會返回一個0到RAND_MAX之間的數字,RAND_MAX的值與int的位數有關。不過rand()是一次性的,因為系統預設的隨機種子為1,如果隨機種子不變的話,那麼產生的隨機數也會是同一個,這就需要用到我們的srand()函數了。
Srand()函式
srand()函式可以設定rand()函式產生隨機數時的隨機種子數,通過設定不同的種子,我們可以產生不同的隨機數,一般情況下,我們通常會用系用時間作為種子,一般寫作:srand((unsigned int)time(NULL)),因為這裡用到了time,所以要引入<ctime>的標頭檔案
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main()
{
srand((unsigned int)time(NULL));
for(int i=0; i<5; i++)
{
cout<<rand()<<endl;
}
return 0;
}
下面總結幾個常用的公式:
求[0,x)之間的整數:rand()%x;
求[a,b)之間的整數:rand()%(b-a) + a;
求[a,b]之間的整數:rand()%(b-a) + a + 1;
求(0,1)之間的浮點數:rand()/double(RAND_MAX);
示例:
求[0,10)之間的整數
#include<iostream> #include<cstdlib> #include<ctime> using namespace std; int main() { int x = 10; srand((unsigned int)time(NULL)); for(int i=0; i<5; i++) { cout<<rand()%x<<endl; } return 0; }
求[5,15]之間的整數
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main()
{
int a = 5,b = 15;
srand((unsigned int)time(NULL));
for(int i=0; i<5; i++)
{
cout<<rand()%(b - a) + a + 1<<endl;
}
return 0;
}
求(0,1)之間的浮點數
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main()
{
srand((unsigned int)time(NULL));
for(int i=0; i<5; i++)
{
cout<<rand()/double(RAND_MAX)<<endl;
}
return 0;
}