2013-07-17 3 views
-1

Я использую этот код, чтобы создать случайное число между нулем и 1.как я могу получить меньший масштаб в функции RAND

randnumber = (double)((double)rand()/(double)RAND_MAX); 

Эта строка кода регулярно дают мне номера, как 0.650434, 0.302340 и 0.906789, которые являются большие числа для меня. Проблема в том, что мне нужно меньшее количество номеров, таких как: 0.000200, 0.000100, 0.000400, 0.000600 и т. Д. Как я могу изменить эту строку кода, чтобы получить результат?

+4

Могли бы вы не просто случайным образом из 1 -100, а затем разделите каждое число на 10000? (Или какой бы масштабный коэффициент вам не нужен)? Я не вижу необходимости делать деление внутри случайной функции. – MrHappyAsthma

+4

Используйте ['std :: uniform_real_distribution <>'] (http://en.cppreference.com/w/cpp/numeric/random/uniform_real_distribution). –

+2

Что вы используете, C или C++? –

ответ

3

Вы знаете, какую функцию распределения вероятностей вы ищите? Если вам все еще нужна форма, вы можете просто разделить результат [0,1] на большое число и применить сдвиг так, чтобы он был центрирован вокруг нужного значения.

Если вы хотите что-то нормально распределенное, вы можете использовать что-то вроде обратного преобразования method. Снова вам нужно будет центрировать его и изменить стандартное отклонение. Есть аналогичные преобразования в других дистрибутивах, а также

+0

Не могли бы вы рассказать мне больше о обратная выборка преобразования и способ ее реализации –

+0

Чтобы помочь вам, мне нужно знать, к какому распределению вы пытаетесь добраться.Если вы пытаетесь добраться до нормального распределения, преобразование Box-Muller легко реализовать и не очень медленно (http://en.wikipedia.org/wiki/Box-Muller_transform <- См. Основную форму) – sedavidw

+0

вы знаете, я имеют эту вероятностную функцию: вероятность = ((x -2)/10000) и хотят создать случайное число функцией rand() между нулем и 1. Затем сравните случайное число с вероятностью. Если случайное число меньше вероятности, сделайте что-нибудь. проблема заключается в том, что распределение randnumber не является адаптивным с распределением вероятностной функции. –

1

Это дает случайное число между 1 и 100

int randInt= (rand()%100)+1; 

так разделить его, чтобы получить желаемый диапазон

double yourRange=(double)randInt/100000; 
+1

Это дает неравномерное распределение результатов, а также имеет очень слабую энтропию в некоторых реализациях. –

Смежные вопросы