2013-04-11 7 views
5

रैंड() या qrand() फ़ंक्शन के बीच यादृच्छिक संख्या यादृच्छिक int उत्पन्न करती है।दो रेंज

int a= rand(); 

मैं 0 और 1. मैं इस काम कैसे कर सकते हैं के बीच एक यादृच्छिक संख्या प्राप्त करना चाहते हैं?

उत्तर

8

आप एक यादृच्छिक int एक float में उत्पन्न कर सकते हैं, और फिर RAND_MAX से विभाजित कर देते हैं:

float a = rand(); // you can use qrand here 
a /= RAND_MAX; 

परिणाम रेंज में शून्य से एक करने के लिए समावेशी हो जाएगा।

+2

'आरएND_MAX' जनरेटर वापस आने वाला सबसे बड़ा मूल्य है, इसलिए सीमा एक, समावेशी हो जाती है। –

+0

@PeteBecker आप सही हैं, यह दोनों सिरों पर समावेशी है। धन्यवाद! – 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

चेक this पोस्ट, यह आपके उद्देश्य के लिए qrand उपयोग करने के लिए कैसे जो afaik रैंड के चारों ओर एक threadsafe आवरण() है पता चलता है।

#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

सी ++ 11 का उपयोग करते हुए आप निम्नलिखित कर सकते हैं:

#include<random> 

परिभाषित PRNG और वितरण:

std::default_random_engine generator; 
std::uniform_real_distribution<double> distribution(0.0,1.0); 

जाओ

यादृच्छिक शीर्षक शामिल करें यादृच्छिक संख्या

double number = distribution(generator); 

this page में और this page में आप uniform_real_distribution के बारे में कुछ संदर्भ पा सकते हैं।

1

यादृच्छिक संख्या से एक मॉड्यूल लें जो परिशुद्धता को परिभाषित करेगा। फिर मॉड्यूल द्वारा तैरने और विभाजित करने के लिए एक टाइपकास्ट करें।

float randNum(){ 
    int random = rand() % 1000; 
    float result = ((float) random)/1000; 
    return result; 
} 
+0

सरल, कामकाजी समाधान। सिर्फ एक गोचाचा: यदि मॉड्यूल (इस मामले में 1000) 'RAND_MAX' द्वारा समान रूप से विभाजित नहीं है, तो इसके द्वारा उत्पादित यादृच्छिक संख्या सीमा में बड़े लोगों की तुलना में छोटी संख्या उत्पन्न करने की दिशा में थोड़ी पक्षपातपूर्ण होगी। – Jakob

संबंधित मुद्दे