các chức năng rand() hoặc qrand() tạo ra một int ngẫu nhiên.Số ngẫu nhiên giữa hai phạm vi
int a= rand();
Tôi muốn có số ngẫu nhiên từ 0 đến 1. Tôi có thể làm việc này như thế nào?
các chức năng rand() hoặc qrand() tạo ra một int ngẫu nhiên.Số ngẫu nhiên giữa hai phạm vi
int a= rand();
Tôi muốn có số ngẫu nhiên từ 0 đến 1. Tôi có thể làm việc này như thế nào?
Bạn có thể tạo ra một ngẫu nhiên int
thành một float
, và sau đó chia nó bằng cách RAND_MAX
, như thế này:
float a = rand(); // you can use qrand here
a /= RAND_MAX;
Kết quả sẽ là trong khoảng từ số không đến một, bao gồm.
#include <iostream>
#include <ctime>
using namespace std;
//
// Generate a random number between 0 and 1
// return a uniform number in [0,1].
inline double unifRand()
{
return rand()/double(RAND_MAX);
}
// Reset the random number generator with the system clock.
inline void seed()
{
srand(time(0));
}
int main()
{
seed();
for (int i = 0; i < 20; ++i)
{
cout << unifRand() << endl;
}
return 0;
}
Kiểm tra this bài đăng, nó cho biết cách sử dụng qrand cho mục đích của bạn mà không phải là trình bao bọc chủ đề xung quanh rand().
#include <QGlobal.h>
#include <QTime>
int QMyClass::randInt(int low, int high)
{
// Random number between low and high
return qrand() % ((high + 1) - low) + low;
}
Sử dụng C++ 11 bạn có thể làm như sau:
Bao gồm tiêu đề ngẫu nhiên:
#include<random>
Xác định PRNG và phân phối:
std::default_random_engine generator;
std::uniform_real_distribution<double> distribution(0.0,1.0);
Lấy số ngẫu nhiên
double number = distribution(generator);
Trong this page và trong this page bạn có thể tìm thấy một số tài liệu tham khảo về uniform_real_distribution
.
Lấy mô-đun từ số ngẫu nhiên sẽ xác định độ chính xác. Sau đó thực hiện một typecast để float và chia cho module.
float randNum(){
int random = rand() % 1000;
float result = ((float) random)/1000;
return result;
}
Giải pháp làm việc đơn giản. Chỉ một lưu ý: Nếu mô-đun (1000 trong trường hợp này) không chia hết cho 'RAND_MAX', thì các số ngẫu nhiên được tạo ra bởi điều này sẽ hơi thiên về việc tạo ra các số nhỏ hơn, so với số lớn trong phạm vi. – Jakob
'RAND_MAX' là giá trị lớn nhất mà trình tạo sẽ trả về, vì vậy phạm vi đi đến một, bao gồm. –
@PeteBecker Bạn nói đúng, nó bao gồm cả hai đầu. Cảm ơn! – dasblinkenlight