प्रयास करें:
float x = (float)rand()/(float)(RAND_MAX/a);
को समझने के लिए कि यह कैसे काम करता है निम्नलिखित पर विचार करें।
N = a random value in [0..RAND_MAX] inclusively.
उपरोक्त समीकरण (स्पष्टता के लिए डाले को हटाने) हो जाता है:
N/(RAND_MAX/a)
लेकिन एक अंश से विभाजन से गुणा के बराबर कहा अंश के पारस्परिक है, इसलिए इस के बराबर है:
N * (a/RAND_MAX)
जो के रूप में लिखा जा सकता है:
a * (N/RAND_MAX)
N/RAND_MAX
को ध्यान में रखते हुए 0.0 और 1.0 के बीच हमेशा एक फ़्लोटिंग पॉइंट मान होता है, इससे 0.0 और a
के बीच एक मूल्य उत्पन्न होगा।
वैकल्पिक रूप से, आप निम्न का उपयोग कर सकते हैं, जो ऊपर दिखाए गए ब्रेकडाउन को प्रभावी ढंग से करता है। मैं वास्तव में यह केवल पसंद करते हैं क्योंकि यह स्पष्ट क्या वास्तव में हो रहा है है (मेरे लिए, वैसे भी):
float x = ((float)rand()/(float)(RAND_MAX)) * a;
नोट: a
की चल बिन्दु प्रतिनिधित्व सटीक होना चाहिए या इस हिट कभी नहीं होगा अपने पूर्ण बढ़त मामले a
(यह करीब हो जाएगा)। क्यों के बारे में किरदार विवरण के लिए this article देखें।
नमूना
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char *argv[])
{
srand((unsigned int)time(NULL));
float a = 5.0;
for (int i=0;i<20;i++)
printf("%f\n", ((float)rand()/(float)(RAND_MAX)) * a);
return 0;
}
आउटपुट
1.625741
3.832026
4.853078
0.687247
0.568085
2.810053
3.561830
3.674827
2.814782
3.047727
3.154944
0.141873
4.464814
0.124696
0.766487
2.349450
2.201889
2.148071
2.624953
2.578719
जैसे http में एक सीमा [मिनट, अधिकतम] कुछ के साथ उत्पन्न कर सकते हैं: // ग faq.com/lib/randrange.html – Ouadie
और निश्चित रूप से, https://www.google.com/search?q=How+to+generate+random+float+number+in+C – rid
धन्यवाद। यह होना चाहिए: फ्लोट एक्स = (फ्लोट) रैंड()/((फ्लोट) आरएND_MAX/ए) या फ्लोट एक्स = (फ्लोट) रैंड()/((फ्लोट) आरएND_MAX/ए + 1)? – fragon