Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Действительные числа и random


Автор: Metalex 5.12.2009, 19:53
Может ли random возвращать действительные числа? Если нет, то можно ли как-то их сгенерировать?

Автор: Abyx 5.12.2009, 20:35
1/rand()

число в интервале [0;1)

Автор: Metalex 5.12.2009, 21:02
Abyx, хорошая идея! smile

Добавлено через 9 минут и 7 секунд
Хотя теперь числа неслучайными стали.............

Автор: Abyx 5.12.2009, 21:30
Metalex, они остались случайными.
или дай свое определение случайного числа

Автор: Metalex 5.12.2009, 21:34
Я код оставил такой же, только изменил как ты сказал, теперь все числа максимум на 1-2 друг от друга отличаются. А до того все было в порядке.

Автор: Pitlord 5.12.2009, 22:49
Цитата(Abyx @  5.12.2009,  20:35 Найти цитируемый пост)
1/rand()

В знаменателе ещё единичку бы прибавить

Автор: bsa 5.12.2009, 22:50
Чтобы получить равномерное распределение в пределах [0;1) (для тех, кто забыл, это значит значение 0.0 может присутствовать, а значение 1.0, нет), делать надо так:
Код
double rnd = rand() / (RAND_MAX + 1.0);
Если необходим интервал [0;1], то код надо заменить на:
Код
double rnd = rand() / (double)RAND_MAX;


Добавлено через 1 минуту и 6 секунд
Цитата(Abyx @  5.12.2009,  20:35 Найти цитируемый пост)
1/rand()
Код в принципе неверный, так как результатом rand() может быть 0. А делить на 0 нельзя.

Автор: Abyx 5.12.2009, 23:08
bsa, это концепция, а детали реализации ТС пусть додумывает сам

Автор: bsa 5.12.2009, 23:11
Abyx, согласись, что деление расстояния на время более правильное действие для вычисления скорости, чем деление времени на расстояние.

Автор: Abyx 5.12.2009, 23:12
для полноты картины стоит заметить, что в msvc в вин32 rand() выдает 16 бит, что весьма мало для 32-разрядного float и чем более для 64-разрядного double
впрочем ТС не писал сколько бит ему надо, может и 16 достаточно

Добавлено через 9 минут и 9 секунд
bsa, согласен, у 1/x не равномерное распределение, тут я был неправ

Автор: Metalex 6.12.2009, 01:58
RAND_MAX нужно обьявлять? или оно само вычисляется. Генерато случайных чисел у меня работает так:
Код
srand(time(NULL));
for (i=0; i<n; i++)
for (j=0; j<n; j++)
    mass[i][j]=rand()%100-50;

Автор: bsa 6.12.2009, 15:41
Metalex
генератор случайных чисел - находится внутри rand().
Использование операции % не дает равномерного распределения (т.е. вероятность каких-то значений выше, чем других).
RAND_MAX определен в <stdlib.h>
Почему не читаем документацию?

Автор: Metalex 6.12.2009, 21:18
bsa, читаем..

Автор: bsa 6.12.2009, 21:29
Цитата(Metalex @  6.12.2009,  21:18 Найти цитируемый пост)
bsa, читаем..
незаметно.

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