Десятичный Генерировать случайное число в диапазоне, включая отрицательные значения?

У меня есть функция ниже для генерации случайного числа в диапазоне 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
}

Я хочу включить С++ создать случайное десятичное число между 0,1 и 10 или/и создать случайное десятичное число между двумя другими числами в вышеуказанную функцию без исключения отрицательных значений. Итак, я хочу получить десятичное число между «любым» диапазоном: [negative, negative], [negative, positive] и [positive, positive]


person Khalil Khalaf    schedule 21.04.2016    source источник
comment
Не могли бы вы включить информацию в ссылках в сам пост?   -  person kaveish    schedule 22.04.2016
comment
Привет @kaveish, функциональность описана в названии этих ссылок. Оба находятся в положительном диапазоне. Я хотел, чтобы это было чисто здесь, но я включу его. Спасибо   -  person Khalil Khalaf    schedule 22.04.2016
comment
Метод c++11 здесь работает как для положительных, так и для отрицательных десятичных знаков.   -  person kaveish    schedule 22.04.2016
comment
@kav мой std:: namespace не распознал коды, поэтому я бросил поиск и стал искать следующий. Ты знаешь почему?   -  person Khalil Khalaf    schedule 22.04.2016
comment
Мне нужно больше информации, но убедитесь, что вы компилируете с флагом -std=c++11, если используете gcc.   -  person kaveish    schedule 22.04.2016
comment
Имейте в виду, что компьютеры работают в двоичном, а не десятичном формате. На самом деле вы не можете сгенерировать 0.1, так как это бесконечно длинное двоичное число.   -  person MSalters    schedule 22.04.2016
comment
@ms, так что, если я буду делать это чаще, это будет потреблять много вычислительной мощности?   -  person Khalil Khalaf    schedule 22.04.2016


Ответы (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;
}

РЕАЛЬНАЯ ДЕМО

person Paul R    schedule 21.04.2016
comment
Привет Пол. Но я хочу десятичную, хотя - person Khalil Khalaf; 22.04.2016
comment
Похож на начальника. Спасибо. Мне было трудно понять это!! (без обеда еще может быть?) у.е. - person Khalil Khalaf; 22.04.2016