2010-11-30 16 views
10

मैं रैंड() का उपयोग करके, विशेष रूप से -50.0 और 50.0 के भीतर एक यादृच्छिक फ्लोट बनाने की कोशिश कर रहा हूं। मैंने हर जगह जवाब के लिए देखा है लेकिन यह स्याही और% ऑपरेटर से संबंधित है।नकारात्मक से सकारात्मक सीमा तक यादृच्छिक फ्लोट का निर्माण?

+0

के संभावित डुप्लिकेट [सी ++ यादृच्छिक नाव] (http://stackoverflow.com/questions/686353/c-random-float: इस तरह, आप my_rand() सिर्फ अच्छे ol 'रैंड() की तरह उपयोग कर सकते हैं) –

उत्तर

11

इस प्रयास करें:

float RandomNumber(float Min, float Max) 
{ 
    return ((float(rand())/float(RAND_MAX)) * (Max - Min)) + Min; 
} 
5

इस प्रयास करें:

  1. rand() तुम इतनी RAND_MAX से विभाजित के बीच 0 और 1
  2. आप के लिए -50 से 100 की एक श्रृंखला की इच्छा एक नंबर पाने के लिए 0 और RAND_MAX
  3. बीच की एक संख्या देता है 50, तो 100.0
  4. द्वारा अंततः गुणा करें 50.0
घटाकर केंद्र को 50 (0 और 100 प्रति बिंदु 3) के बीच शून्य में स्थानांतरित करें।
4

सच में, सभी उपस्थित जवाब की व्याख्या नहीं करते उनके समाधान में वितरण में बदलाव (मुझे लगता है कि रैंड (यह मानते हुए हूँ) है कि वहाँ समान वितरण इस प्रकार है! अगर मैं गलत हूं तो मुझे सही करें)। एक पुस्तकालय का उपयोग करें, और मेरी सिफारिश C++ 0x में नई सुविधाओं का उपयोग कर रहा है:

#include <random> 
#include <functional> 

int main() 
{ 
    std::mt19937 generator; 
    std::uniform_real_distribution<float> uniform_distribution(-50.0, 50.0); 
    auto my_rand = std::bind(uniform_distribution, generator); 
} 

आप नहीं कर सकते हैं, तो बूस्ट एक सही विकल्प है।

std::vector<float> random_numbers(1000); 
std::generate(random_numbers.begin(), random_numbers.end(), my_rand); 
+0

सवाल यह है कि उन्हें विशेष रूप से 'रैंड' का उपयोग करने की आवश्यकता है। लेकिन हाँ, मैं सहमत हूं; यदि वितरण वास्तव में महत्वपूर्ण है तो बढ़ावा एक अच्छा विकल्प की तरह लगता है। – Maxpm

+1

@ मैक्स: अधिक सटीक, सवाल कहता है "कोशिश कर रहा है ... रैंड()" का उपयोग कर; ओपी ने कभी नहीं कहा कि यह एक * आवश्यकता * थी। – Cascabel

+0

@ जेफ्रोमी अच्छा बिंदु। मुझे सामान्य से अधिक नींद-वंचित होना चाहिए। : पी – Maxpm

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