2013-04-11 39 views

Trả lời

8

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.

+2

'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. –

+0

@PeteBecker Bạn nói đúng, nó bao gồm cả hai đầu. Cảm ơn! – dasblinkenlight

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

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

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.

1

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

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

Các vấn đề liên quan