C/C++——生成隨機數
阿新 • • 發佈:2019-01-10
1、不指定範圍的隨機數
在C/C++中,產生隨機數需要使用到函式srand()函式和rand()函式。在C語言中,srand()函式和rand()函式都是定義在
2、在指定範圍內生成隨機數
2.1、生成在指定區間start~end之間的隨機整數:
#include <stdio.h> #include <stdlib.h> #include <time.h> int Random(int start, int end){ int dis = end - start; return rand() % dis + start; } int main(){ int a[10]; int i = 0; srand((unsigned)time(NULL)); for (i = 0; i < 10; i++){ a[i] = Random(2, 7); } for (i = 0; i < 10; i++){ printf("%d ", a[i]); } printf("\n"); return 0; }
2.2、生成0~1之間的隨機數
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(){ double a[10]; int i = 0; srand((unsigned)time(NULL)); for (i = 0; i < 10; i++){ a[i] = rand() / (RAND_MAX + 1.0); } for (i = 0; i < 10; i++){ printf("%f ", a[i]); } printf("\n"); return 0; }
2.3、生成指定區間start~end上的隨機浮點數:
#include <stdio.h> #include <stdlib.h> #include <time.h> double Random(int start, int end){ int dis = end - start; printf("dis: %d\n", dis); return start + dis * (rand() / (RAND_MAX + 1.0)); } int main(){ double a[10]; int i = 0; srand((unsigned)time(NULL)); for (i = 0; i < 10; i++){ a[i] = Random(2,4); } for (i = 0; i < 10; i++){ printf("%lf ", a[i]); } printf("\n"); return 0; }
3、不使用內建隨機數函式的生成方法
主要方法:生成一個很大的數,通過截斷的方法生成隨機數
#include <stdio.h>
int main(){
unsigned long long next_random = 1;
for (int i = 0; i < 30; i ++){
next_random = next_random * (unsigned long long)25214903917 + 11;
fprintf(stderr, "%f\n", (((next_random & 0xFFFF) / (float)65536) - 0.5));
}
return 0;
}