Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Sinh số thực ngẫu nhiên (random float) trong C++


C++ không có hàm trực tiếp sinh float ngẫu nhiên. Kỹ thuật phổ biến: sinh số nguyên ngẫu nhiên, chia cho RAND_MAX, nhân với phạm vi mong muốn.

Cách cơ bản (C++98)

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main() {
    srand(time(nullptr));
    float maxVal = 5.0f;
    for (int i = 0; i < 10; i++) {
        float r = (float)rand() / RAND_MAX * maxVal;
        cout << r << " ";
    }
    return 0;
}

Cách hiện đại C++11 (Khuyên dùng)

#include <iostream>
#include <random>
using namespace std;

int main() {
    random_device rd;
    mt19937 gen(rd());
    uniform_real_distribution<float> dist(0.0f, 5.0f);
    for (int i = 0; i < 10; i++)
        cout << dist(gen) << " ";
    return 0;
}

Đầu ra mẫu

2.076 4.311 1.311 2.225 2.173 1.484 1.911 0.565 2.243 4.445

So sánh

Tiêu chírand()/RAND_MAX<random> C++11
Chất lượng ngẫu nhiênThấpCao (Mersenne Twister)
Phân phốiKhông đềuĐều, cấu hình được
Tốc độNhanhChậm hơn một chút