Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

random

Привет Всем !!!
Такая проблема, как в VS C++ получить случайную величину из заданного
промежутка, т.е. надо поучить случайный X из промежутка Xmin и Xmax.
Какие функции использовать?

Ответить   Fri, 9 Apr 2004 00:09:17 +0700 (#121650)

 

Ответы:

Win32)

Доброго времени суток!

On Fri, 9 Apr 2004 00:09:17 +0700 you wrote:

value = rand() % Xmax + Xmin;

Ответить   Fri, 9 Apr 2004 12:10:15 +0400 (#121772)

 

врёте немного.
остаток от rand()%xmax может стать равным xmax-1 или xmax-2. а xmin
может быть больше 1 или 2.
да и % действует только на целочисленные значения.

как известно из курса теории вероятности, любую случайную величину
(читай последовательность) можно получить из rnd[0...1]. что и
реализовано в данном шаблоне:

template <class T>
T my_rand(T xmin, T xmax){
return xmin+(xmax-xmin)*(double(rand())/RAND_MAX);
}

в 7-ой VC всё работает. насчет 6-ой не помню.. вроде там были косяки с
шаблонами, но могу ошибаться.

или можно сразу указать тип:

int my_rand(int xmin, int xmax){
return xmin+(xmax-xmin)*(double(rand())/RAND_MAX);
}

либо

double my_rand(double xmin, double xmax){
return xmin+(xmax-xmin)*(double(rand())/RAND_MAX);
}

any questions?

Ответить   Ivan Mikheikin Fri, 9 Apr 2004 23:32:49 +0400 (#122377)

 

Win32)

Доброго времени суток!

On Fri, 9 Apr 2004 23:32:49 +0400 you wrote:

Ну и что?

В вопросе не уточнялось насчет типа случайной величины.

Ответить   Sat, 10 Apr 2004 09:30:11 +0400 (#122573)

 

Hello Pavel,

Saturday, April 10, 2004, 9:30:11 AM, you wrote:

так ведь надо было получить числа от xmin до xmax.
а так получаются числа от xmin до xmin+xmax-1

может имелось в виду rand()%(xmax-xmin+1) + xmin ?

именно поэтому лучше общее решение.

Ответить   Ivan Mikheikin Sat, 10 Apr 2004 18:04:48 +0400 (#122861)

 

Win32)

Доброго времени суток!

On Sat, 10 Apr 2004 18:04:48 +0400 you wrote:

Согласен, ошибся.

Человеку надо узнать как генерировать случайные числа, а Вы начинаете
объяснять ему принципы теории вероятностей. Это все равно, что если я
спрошу как включить телевизор, а Вы мне начнете объяснять что такое
электричество.

Все, закрываем эту тему.

Ответить   Sat, 10 Apr 2004 18:36:12 +0400 (#122871)

 

Hello Pavel,

Saturday, April 10, 2004, 6:36:12 PM, you wrote:

Очень преувеличено. Досконально объяснять матчасть я не пытался. Просто написал
из чего следует предложенный кусок кода.

Оке.

Оффтоп. Бывает забавно ответить на простой вопрос развернутым
ответом, а на нормально заданный (с предысторией проблемы, с догадками)
как можно лаконичнее. Попробуйте :)

Ответить   Ivan Mikheikin Sat, 10 Apr 2004 19:45:24 +0400 (#122921)

 

Привет Всем !!!

Большое спасибо Pavel aka crazy и Ivan Mikheikin все заработало, тема
закрыта.

Ответить   Sun, 11 Apr 2004 01:16:55 +0700 (#122996)