2011-03-13 19 views
24

के बीच यादृच्छिक फ्लोट उत्पन्न करें मुझे पता है कि यह एक आसान सवाल है, लेकिन मैं गणित में बहुत अच्छा नहीं हूं।दो फ्लोट्स

मुझे पता है कि 0 और 1 के बीच एक यादृच्छिक नाव उत्पन्न करने के लिए:

float random = ((float) rand())/(float) RAND_MAX; 
  • लेकिन क्या, अगर मैं एक समारोह है कि दो तैरता की एक श्रृंखला दिया चाहते हैं, उस श्रेणी में एक कूट-यादृच्छिक नाव रिटर्न?

उदाहरण:

RandomFloat(0.78, 4.5); //Could return 2.4124, 0.99, 4.1, etc. 
+2

, यदि आप नाव से अधिक डबल पसंद कर सकते हैं। –

+1

[सी ++ यादृच्छिक फ्लोट] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/686353/c-random-float) –

उत्तर

24
float RandomFloat(float a, float b) { 
    float random = ((float) rand())/(float) RAND_MAX; 
    float diff = b - a; 
    float r = random * diff; 
    return a + r; 
} 

यह लौटने a प्लस कुछ, जहां कुछ 0 और b-a के बीच जो a और b के बीच में अंतिम परिणाम झूठ बनाता है काम करता है।

float random_between_two_int(float min, float max)  
{  
    return (min + 1) + (((float) rand())/(float) RAND_MAX) * (max - (min + 1));  
} 

रैंडम 2 पूर्णांक के बीच:

+0

@stefan नहीं, आप नहीं करते हैं। यदि आप 'fabsf' जोड़ते हैं, तो आपको अंतिम पंक्ति को' min (a, b) + r' में बदलना होगा। – Wim

+2

जिस तरह से यह लिखा गया है, यदि 'b Wim

+0

आप सही हैं, यह केवल भ्रमित है कि 1.0 कम मूल्य बनाएगा;) – stefan

4
float RandomFloat(float min, float max) 
{ 
    // this function assumes max > min, you may want 
    // more robust error checking for a non-debug build 
    assert(max > min); 
    float random = ((float) rand())/(float) RAND_MAX; 

    // generate (in your case) a float between 0 and (4.5-.78) 
    // then add .78, giving you a float between .78 and 4.5 
    float range = max - min; 
    return (random*range) + min 
} 
+0

@stefan, हाँ आप सही हैं। मुझे याद आया कि यादृच्छिक गणना कैसे की गई थी और इसे 0-RAND_MAX से नीचे स्केल कर रहा था। ऐसा लगता है कि मुझे इसे वापस स्केल करने की आवश्यकता है। –

0

रैंडम 2 नाव के बीच

int random_between_two_int(float min, float max)  
{  
    return rand() % (max - min) + min + 1;  
} 
+1

'-1' क्योंकि सी ++ मानक लाइब्रेरी पर विचार करना बेहतर छद्म यादृच्छिक पीढ़ी है, यह उत्तर कुछ भी मूल्यवान नहीं जोड़ता है। –

1

मान लीजिए, आप MIN_RAND और MAX_RAND है पर्वतमाला को परिभाषित है, तो आप कर सकते हैं निम्नलिखित:

const float MIN_RAND = 2.0, MAX_RAND = 6.0; 
const float range = MAX_RAND - MIN_RAND; 
float random = range * ((((float) rand())/(float) RAND_MAX)) + MIN_RAND ; 

यह आपको आपकी पसंदीदा सीमा तक बढ़ाए गए नंबर प्रदान करेगा। MIN_RAND, MAX_RAND, किसी भी मूल्य हो सकता है का कहना है की तरह 2.5, 6.6 तो, समारोह के रूप में हो सकता है: इसके अलावा

float RandomFloat(float min, float max) { 
    return (max - min) * ((((float) rand())/(float) RAND_MAX)) + min ; 
} 
+1

इसके बजाय C++ 11 यादृच्छिक जेनरेटर का उपयोग करें। –

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