Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Rand()


Автор: PRF 24.4.2008, 22:20
Люди помогите, как вывести случайно числа из диапазона  [0, 1] естественно они будут вещественными!!! Пожалуйста!!

Автор: MAKCim 24.4.2008, 22:28
Код

(double)1.0 / random();

Автор: PRF 24.4.2008, 22:34
в какой библиотеки находиться random() а то ошибку выдает?

Добавлено через 3 минуты и 1 секунду
извините я ступил, спасибо большое

Автор: Любитель 25.4.2008, 11:33
MAKCim, какой random()?  smile rand() smile

Автор: bsa 25.4.2008, 15:47
Цитата(MAKCim @ 24.4.2008,  22:28)
Код

(double)1.0 / random();

Такой код будет исключениями сыпать smile
лучше так:
Код
double rnd = rand() / (RAND_MAX - 1.0); //1.0 тоже нужно

Автор: vinter 25.4.2008, 19:58
bsa, так получишь целые числа

Автор: MAKCim 25.4.2008, 20:13
Цитата(Любитель @  25.4.2008,  11:33 Найти цитируемый пост)
какой random()?

тот, который в <stdlib.h>
по крайней мере в glibc-2.5

Цитата(bsa @  25.4.2008,  15:47 Найти цитируемый пост)
Такой код будет исключениями сыпать

почему?
проверил, нормально

Автор: bsa 25.4.2008, 20:39
MAKCim, стандарту соответствует rand(). В не линуксах random() нет. smile

Добавлено через 46 секунд
Цитата(MAKCim @ 25.4.2008,  20:13)
Цитата(bsa @  25.4.2008,  15:47 Найти цитируемый пост)
Такой код будет исключениями сыпать

почему?
проверил, нормально

random() может возвращать 0? А что у нас происходит при делении на 0?

Автор: MAKCim 25.4.2008, 21:12
Цитата(bsa @  25.4.2008,  20:39 Найти цитируемый пост)
MAKCim, стандарту соответствует rand(). В не линуксах random() нет.

да?
не знал
всегда полагал, что в <stdlib.h> все стандартное

Цитата(bsa @  25.4.2008,  20:39 Найти цитируемый пост)
andom() может возвращать 0? А что у нас происходит при делении на 0? 

раздели вещественное число на 0
это не приведет к SIGFPE
будет inf
хотя с практической точки зрения это, конечно, неправильно

Автор: Любитель 27.4.2008, 21:59
Цитата(MAKCim @  25.4.2008,  21:12 Найти цитируемый пост)
да?не зналвсегда полагал, что в <stdlib.h> все стандартное

random точно не стандартен smile

Цитата(MAKCim @  25.4.2008,  21:12 Найти цитируемый пост)
раздели вещественное число на 0это не приведет к SIGFPEбудет inf

Обычно компилерозависимо. Точнее так - многие компилеры имеют опции по управлению вещественой арифметики. В том числе вместо всяких "левых" чисел могут сделать что-нить другое smile

Автор: math64 28.4.2008, 09:26
Если хотите получить равномерное распределение, нужно делать как предложил bsa. Но если число значащих цифр в double больше чем в int, нужно вызывать rand() два раза:
Код

double rnd = (double)rand()*RAND_MAX+rand();
rnd /= ((double)RAND_MAX*RAND_MAX-1);

Автор: MAKCim 28.4.2008, 10:05
Цитата(Любитель @  27.4.2008,  21:59 Найти цитируемый пост)
Обычно компилерозависимо

вот уж кто, а компилятор тут точно не причем  smile 
Цитата(Любитель @  27.4.2008,  21:59 Найти цитируемый пост)
В том числе вместо всяких "левых" чисел могут сделать что-нить другое

что?

где в примере 
(double)1.0 / random() 
что-то "левое"?

и вообще, стандарт представления вещественых чисел (IEEE 754) вводит понятие знаковой бесконечности со своим двоичным представлением
и условия, при которых, результат операции имеет именно такое представление

большинство же устройств вещественной арифметики процессоров в рамках execution core поддерживают этот стандарт

Автор: threef 28.4.2008, 12:44
Ладно,
MAKCim, 
но ты не выполняешь условие задачи - результат в пределах 0, 1 
- а это хуже, чем несоблюдение стандартов smile))

Автор: MAKCim 28.4.2008, 12:46
threef, 
Цитата(threef @  28.4.2008,  12:44 Найти цитируемый пост)
но ты не выполняешь условие задачи - результат в пределах 0, 1 

я об этом писАл
Цитата(MAKCim @  25.4.2008,  21:12 Найти цитируемый пост)
хотя с практической точки зрения это, конечно, неправильно



Автор: Любитель 28.4.2008, 13:30
Цитата(MAKCim @  28.4.2008,  10:05 Найти цитируемый пост)
вот уж кто, а компилятор тут точно не причем

Ладно, давай так - рантайм этого компилера.

Автор: bsa 28.4.2008, 15:46
MAKCim, в любом случае, inf не входит в диапазон [0;1]  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)