Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Генерирование случайны чисел в С++

Ответить
Настройки темы
Генерирование случайны чисел в С++
Belka007


Сообщения: n/a

Профиль | Цитировать


Существуют ли стандартные функции для генерации случайных чисел типа double в диапазоне от 0 до 1.

Отправлено: 15:29, 12-11-2003

 

Аватара для Guest

Guest


Профиль | Цитировать


Header File

stdlib.h

Category

Math Routines

Prototype

int random(int num);

Description

Random number generator.

random returns a random number between 0 and (num-1). random(num) is a macro defined in stdlib.h. Both num and the random number returned are integers.

Return Value

random returns a number between 0 and (num-1).
//=========================================

/* random example */
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

/* prints a random number in the range 0 to 99 */
int main(void)
{
   randomize();
   printf("Random number in the 0-99 range: %d\n", random (100));
   return 0;
}

Отправлено: 18:11, 12-11-2003 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 135
Благодарности: 0

Профиль | Отправить PM | Цитировать


И все-же хотелось бы услышать ответ.
Цитата:
Существуют ли стандартные функции для генерации случайных чисел типа double в диапазоне от 0 до 1.

Отправлено: 02:10, 17-11-2003 | #3


Аватара для shurikan

Старожил


Сообщения: 240
Благодарности: 1

Профиль | Отправить PM | Цитировать


bilytur
Код: Выделить весь код
 
double R = double(random(0x3FFFFFFF)) / 0x3FFFFFFF;

-------
UNIX, UNAS и др. Myself I'll like 'em


Отправлено: 04:27, 18-11-2003 | #4


Пользователь


Сообщения: 135
Благодарности: 0

Профиль | Отправить PM | Цитировать


shurikan

Твой способ генерит случайные числа из ограниченного множества не превышающего 0x3FFFFFFF, в то время как всех возможных чисел типа double гораздо больше.

Как я понял стандартных функций для генерации случайных чисел типа double в С нет

Отправлено: 00:28, 19-11-2003 | #5


Аватара для shurikan

Старожил


Сообщения: 240
Благодарности: 1

Профиль | Отправить PM | Цитировать


bilytur
Воспользуйся типом __int64, значащими будут 63 разряда - диапазон double перекрыт, т.е. значений гораздо больше, чем влезет в double.


[s]Исправлено: shurikan, 4:15 20-11-2003[/s]

-------
UNIX, UNAS и др. Myself I'll like 'em


Отправлено: 03:14, 20-11-2003 | #6


Пользователь


Сообщения: 135
Благодарности: 0

Профиль | Отправить PM | Цитировать


shurikan
Имхо чтоб был смысл в использовании __int64 нужно чтоб была функция:
__int64 random(__int64);

На самом деле дела обстоят еще хуже:
В MSVC 6 (не знаю как в других) никаких функций random(); randomize(); вообще нет!
Искал в MSDN - нет таких. В Инклудах - тоже нет.

Есть  int rand( void );
Функция rand() возвращает случайное число в диапазоне 0..32767 т.е. фактически short int.

Кстати при таком раскладе даже первый твой пример не прокатывает.

Отправлено: 01:32, 21-11-2003 | #7


Аватара для shurikan

Старожил


Сообщения: 240
Благодарности: 1

Профиль | Отправить PM | Цитировать


bilytur
А ты из 4-х с помощью умножений и сложений не можешь сделать __int64???

-------
UNIX, UNAS и др. Myself I'll like 'em


Отправлено: 03:47, 21-11-2003 | #8


Пользователь


Сообщения: 135
Благодарности: 0

Профиль | Отправить PM | Цитировать


Можно конечно и с помощью умножений и сложений...
Можно и вообще свой генератор написать...
Только вопрос был вроде о стандартных функциях.
А их НЕТ.
Точка.

Отправлено: 00:21, 22-11-2003 | #9


Аватара для shurikan

Старожил


Сообщения: 240
Благодарности: 1

Профиль | Отправить PM | Цитировать


bilytur
Ты что-то путаешь. Есть стандартные алгоритмы генераторов случайных чисел. Да, в них используются целочисленные операнды. Любой алгоритм можно представить для чисел различной разрядности. Если ты будешь реализовывать этот алгоритм для чисел длиной 53 бита, то результат можно рассматривать как мантиссу числа с плавающей точкой. Чем не стандартный алгоритм для чисел типа double? Многоточие...


Добавлено:

Да, если говорить о "стандартных" функциях типа rand у Borland-а, то у кого-то их нет. Т.е. эти функции не являются стандартными. Но такие функции всё-таки входят в состав библиотек. Например в GCC в файле stdlib.h (обрати внимание на префикс std - я так думаю, имеется ввиду "стандартная библиотека" есть объявление следующих функций:
Код: Выделить весь код
 
double drand48(void); 
double erand48(unsigned short state[3]); 
unsigned long lrand48(void); 
unsigned long nrand48(unsigned short state[3]); 
long mrand48(void); 
long jrand48(unsigned short state[3]); 
void srand48(long seed); 
unsigned short *seed48(unsigned short state_seed[3]); 
void lcong48(unsigned short param[7]);
И все они - для работы со случайными числами. Выбирай на вкус.

-------
UNIX, UNAS и др. Myself I'll like 'em


Отправлено: 04:20, 22-11-2003 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Генерирование случайны чисел в С++

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Assm - Сложение двух чисел Rebel666 Программирование и базы данных 8 22-04-2012 17:30
C/C++ - Последовательность чисел denver-312 Программирование и базы данных 7 02-01-2008 20:54
VBA - Перевод чисел в текст прописью Goshar Программирование и базы данных 2 22-12-2007 16:00
Генератор случайных чисел Murrey Хочу все знать 3 22-08-2006 13:00
сортировка чисел slaine Вебмастеру 12 18-02-2006 20:17




 
Переход