Произвести случайное плавание от отрицательного до положительного диапазона? - PullRequest
10 голосов
/ 30 ноября 2010

Я пытаюсь произвести случайное плавание в диапазоне -50.0 и 50.0 включительно, используя rand (). Я везде искал ответ, но он касается операторов int и%.

Ответы [ 4 ]

11 голосов
/ 30 ноября 2010

Попробуйте это:

float RandomNumber(float Min, float Max)
{
    return ((float(rand()) / float(RAND_MAX)) * (Max - Min)) + Min;
}
5 голосов
/ 30 ноября 2010

Попробуйте это:

  1. rand() дает число от 0 до RAND_MAX
  2. , поэтому разделите на RAND_MAX, чтобы получить число от 0 до 1
  3. Вы хотите диапазон 100 от -50 до 50, поэтому умножьте на 100,0
  4. наконец сместим центр с 50 (между 0 и 100 на точку 3) в ноль, вычтя 50,0
4 голосов
/ 30 ноября 2010

Честно говоря, все имеющиеся ответы не объясняют, что в их решениях произошли изменения в распределении (я предполагаю, что rand () следует за равномерным распределением! Исправьте меня, если я ошибаюсь, пожалуйста). Пожалуйста, используйте библиотеку, и я рекомендую использовать новые возможности в 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);
}

Если вы не можете, Boost - идеальный выбор. Таким образом, вы можете использовать my_rand () так же, как good ol 'rand ():

std::vector<float> random_numbers(1000);
std::generate(random_numbers.begin(), random_numbers.end(), my_rand);
4 голосов
/ 30 ноября 2010
((float)rand())/RAND_MAX * 100.0 - 50.0
...