Здравствуйте, гость ( Вход | Регистрация )
Litkevich Yuriy | Дата 4.3.2009, 5:26 |
Для произвольного диапазона естественно: видимо это самый лучший вариант, т.е. масштабирование результата и его смещение(начальная точка) + (rand() / RAND_MAX)*(конечная точка - начальная точка) |
|
kuler | Дата 3.3.2009, 18:41 |
не будет, ну дык а если приемник будет какой нить int64 |
|
Litkevich Yuriy | Дата 3.3.2009, 18:36 |
таким образом будет преодолен RAND_MAX не будет, т.к. он равен максимальному значению int'а. Уменя диаппазон уже чем 0...RAND_MAX |
|
kuler | Дата 3.3.2009, 17:23 |
будет всегда возвращать одно и тоже число, а уж последовательность srand(RAND_MAX)*srand(RAND_MAX)*srand(RAND_MAX) бессмысленна и не скомпилируется. ну значит просто rand()*rand()*rand(), таким образом будет преодолен RAND_MAX |
|
Kagami | Дата 3.3.2009, 11:23 |
Главное не забыть один небольшой момент - rand() возвращает целое число. соответственно выражение rand()/RAND_MAX вернет _целое_ число (т.е. 0) Так что тут нужно явное преобразование типов: double(rand())/RAND_MAX P.S. По крайней мере у меня так было с gcc 4.2.1, может сейчас что и изменилоcь |
|
Tonal | Дата 3.3.2009, 8:51 |
Народ, вы чего! Идите в help/man/google и читайте про то, что такое rand и srand. rand - генератор псевдослучайной последовательности от 0 до RAND_MAX Это значит, что он на основе некоторого текущего числа вычисляет следующее. При этом вычисленное число становится текущим. srand - явно устанавливает текущее. Т.е. код функция
будет всегда возвращать одно и тоже число, а уж последовательность srand(RAND_MAX)*srand(RAND_MAX)*srand(RAND_MAX) бессмысленна и не скомпилируется. Для получения сколько-нибудь случайной последовательности, srand нужно вызывать 1 раз где-нибудь в начале программы и инициализировать чем-нибудь б/м случайным - текущим временем, например. Ну или использовать более другие генераторы случайности. |
|
kuler | Дата 2.3.2009, 18:26 |
ну во первых диапазон 99% будет ограниченным, а во вторых можно к примеру делать return srand(RAND_MAX)*srand(RAND_MAX)*srand(RAND_MAX) |
|
fsMark | Дата 2.3.2009, 18:21 |
А ты уверен что это будет нормальное распределение?.. мозги пухнут (конец рабочего дня) - немогу понять. | |
Litkevich Yuriy | Дата 2.3.2009, 18:02 |
я вот так сделал:
|
|
fsMark | Дата 2.3.2009, 17:58 |
как задать конечную точку в рантайме? Я делал примерно так: (rand() / RAND_MAX)*(конечная точка) Для произвольного диапазона естественно: (начальная точка) + (rand() / RAND_MAX)*(конечная точка - начальная точка) |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 25.4.2024, 2:55 |