C++ 生成随机数
要取得[a,b)的隨機整數,使用(rand() % (b-a))+ a;
要取得[a,b]的隨機整數,使用(rand() % (b-a+1))+ a;
要取得(a,b]的隨機整數,使用(rand() % (b-a))+ a + 1;
通用公式:a + rand() % n;其中的a是起始值,n是整數的范圍。
要取得a到b之間的隨機整數,另一種表示:a + (int)b * rand() / (RAND_MAX + 1)。
要取得0~1之間的浮點數,可以使用rand() / double(RAND_MAX)。
https://blog.csdn.net/hellokandy/article/details/90045187
上面其實產生的是偽隨機數,如何產生真隨機數:
- 產生任意區間[a,b]內均勻分布的隨機整數
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;}
- 產生n個任意區間[a,b]內均勻分布的隨機序列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;}
總結
- 上一篇: 图像的矩,以及利用矩求图像的重心,方向
- 下一篇: Eigen库使用之矩阵的最大/小值及其位