1. 程式人生 > >C/C++——生成隨機數

C/C++——生成隨機數

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;
}