2016-04-21 6 views
0

У меня есть ниже функцию, чтобы сгенерировать случайное число в пределах диапазона: min, maxДесятичный генератор случайного числа в пределах диапазона, включая отрицательные?

#include <stdlib.h>  /* srand, rand */ 
#include <time.h>  /* time */ 

//.. 

int GenerateRandom(int min, int max) //range : [min, max) 
{ 
    static bool first = true; 
    if (first) 
    { 
     srand(time(NULL)); //seeding for the first time only! 
     first = false; 
    } 

    return min + rand() % (max - min); // returns a random int between the specified range 
} 

Я хочу включить c++ create a random decimal between 0.1 and 10 функциональность или/и create a random decimal number between two other numbers функциональность в указанной выше функции без за исключением негативов. Поэтому я хочу, чтобы получить десятичные между «любым» диапазоном: [negative, negative], [negative, positive] и [positive, positive]

+1

Не могли бы вы включить информацию в связи в сам пост? – kaveish

+0

Эй, @kaveish, функциональность суммируется по названию этих ссылок. Оба они находятся в положительном диапазоне. Я хотел сохранить его здесь, но я включу его. Спасибо –

+1

Метод 'C++ 11' [здесь] (http://stackoverflow.com/a/19652723/1885037) работает как для положительных, так и для отрицательных десятичных знаков. – kaveish

ответ

1

Вам просто нужно, чтобы убедиться, что min, max упорядочены правильно, и использовать с плавающей точкой, а не целых чисел, например

double GenerateRandom(double min, double max) 
{ 
    static bool first = true; 
    if (first) 
    { 
     srand(time(NULL)); 
     first = false; 
    } 
    if (min > max) 
    { 
     std::swap(min, max); 
    } 
    return min + (double)rand() * (max - min)/(double)RAND_MAX; 
} 

LIVE DEMO

+0

Эй, Пол. Но я хочу десятичное число, но –

+0

@FirstStep: ОК, ответ обновлен для плавающей запятой. –

+0

Не работает, вход всегда целое –