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ên | Thấp | Cao (Mersenne Twister) |
| Phân phối | Không đều | Đều, cấu hình được |
| Tốc độ | Nhanh | Chậm hơn một chút |