C++ 生成随机数
要取得[a,b)的隨機(jī)整數(shù),使用(rand() % (b-a))+ a;
要取得[a,b]的隨機(jī)整數(shù),使用(rand() % (b-a+1))+ a;
要取得(a,b]的隨機(jī)整數(shù),使用(rand() % (b-a))+ a + 1;
通用公式:a + rand() % n;其中的a是起始值,n是整數(shù)的范圍。
要取得a到b之間的隨機(jī)整數(shù),另一種表示:a + (int)b * rand() / (RAND_MAX + 1)。
要取得0~1之間的浮點(diǎn)數(shù),可以使用rand() / double(RAND_MAX)。
https://blog.csdn.net/hellokandy/article/details/90045187
上面其實(shí)產(chǎn)生的是偽隨機(jī)數(shù),如何產(chǎn)生真隨機(jī)數(shù):
- 產(chǎn)生任意區(qū)間[a,b]內(nèi)均勻分布的隨機(jī)整數(shù)
int MY_Random1(int a, int b,int* r){ int k,l,m,i,p;k=b-a+1; l=2;while (l<k) l=l+l;m=4*l; k=*r; i=1;while (i<=1){ k=k+k+k+k+k;k=k%m; l=k/4+a;if (l<=b) { p=l; i=i+1;}}*r=k;return p;}
- 產(chǎn)生n個(gè)任意區(qū)間[a,b]內(nèi)均勻分布的隨機(jī)序列p[ ]
void MY_Random2(int a, int b, int* r, int p[], int n){ int k,l,m,i;k=b-a+1; l=2;while (l<k) l=l+l;m=4*l; k=*r; i=0;while (i<=n-1){ k=k+k+k+k+k;k=k%m; l=k/4+a;if (l<=b) { p[i]=l; i=i+1;}}*r=k;}
總結(jié)
- 上一篇: 图像的矩,以及利用矩求图像的重心,方向
- 下一篇: Eigen库使用之矩阵的最大/小值及其位