2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Рандомные числа(С)
Сообщение28.03.2013, 12:47 


22/12/12
54
в общем такой вопрос, как можно получить в С случайные числа размером 1 000 000 и более?
функция rand() выдает не больше 32 000

 Профиль  
                  
 
 Re: Рандомные числа(С)
Сообщение28.03.2013, 13:23 


28/11/11
2884
А почему бы просто не домножить на $10$ в нужной степени?

 Профиль  
                  
 
 Re: Рандомные числа(С)
Сообщение28.03.2013, 13:41 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Соберите из двух, rand() * (RAND_MAX + 1) + rand()

 Профиль  
                  
 
 Re: Рандомные числа(С)
Сообщение28.03.2013, 14:00 
Заслуженный участник


15/05/05
3445
USA
1. Реализуйте свой генератор ПСЧ. Это довольно просто, подробности - во 2-м томе Кнута.
2. Получить 32-битное ПСЧ можно сгенерировав 2 числа с помощью rand() и скомбинировав их в одно:
Код:
long prn = ((long)rand() << 16) | rand();

P.S. :-)
Слишком долго писал ответ. Приоритет остается за Xaositect

 Профиль  
                  
 
 Re: Рандомные числа(С)
Сообщение28.03.2013, 14:20 
Заслуженный участник
Аватара пользователя


06/04/10
3152
Yuri Gendelman в сообщении #702588 писал(а):
Получить 32-битное ПСЧ можно сгенерировав 2 числа с помощью rand() и скомбинировав их в одно:

Генератор выдаёт лишь 15 бит. Видимо, как Эксел - его Rnd я "разбирал".

 Профиль  
                  
 
 Re: Рандомные числа(С)
Сообщение28.03.2013, 14:54 
Заслуженный участник


09/09/10
3729

(Оффтоп)

Не менее 15 бит по стандарту: "The value of the RAND_MAX macro shall be at least 32767." Ну, еще два случайных бита добрать — несложно.

 Профиль  
                  
 
 Re: Рандомные числа(С)
Сообщение28.03.2013, 21:28 


26/08/11
2102
Имеем идеальный генератор случайных натуральных чисел от 1 до 3. Как с его помощью создать генератор случ. нат. чисел от 1 до 5?

 Профиль  
                  
 
 Re: Рандомные числа(С)
Сообщение29.03.2013, 09:09 
Заслуженный участник
Аватара пользователя


01/08/06
3131
Уфа
Shadow писал(а):
Имеем идеальный генератор случайных натуральных чисел от 1 до 3. Как с его помощью создать генератор случ. нат. чисел от 1 до 5?
Наверное, с гарантированным ограничением по времени не получится. С негарантированным легко. Вызываем 2 раза, получаем пару (a, b), вычисляем 3a+b-3, если 6 или больше — повторяем, пока полученное значение не станет меньше 6. Можно оптимизировать, но не принципиально.

 Профиль  
                  
 
 Re: Рандомные числа(С)
Сообщение29.03.2013, 09:31 
Заслуженный участник
Аватара пользователя


06/04/10
3152
Shadow в сообщении #702776 писал(а):
Имеем идеальный генератор случайных натуральных чисел от 1 до 3. Как с его помощью создать генератор случ. нат. чисел от 1 до 5?

В ту же сторону.
Имеем кривую монету. Как её использовать для имитации правильной монеты?

 Профиль  
                  
 
 Re: Рандомные числа(С)
Сообщение29.03.2013, 09:35 
Заслуженный участник


04/05/09
4587
Бросаем 2 раза, повторяем пару бросков пока они совпадают.
Последний бросок будет честным.

 Профиль  
                  
 
 Re: Рандомные числа(С)
Сообщение29.03.2013, 09:58 


26/08/11
2102
worm2 в сообщении #702888 писал(а):
Наверное, с гарантированным ограничением по времени не получится. С негарантированным легко. Вызываем 2 раза, получаем пару (a, b), вычисляем 3a+b-3, если 6 или больше — повторяем, пока полученное значение не станет меньше 6. Можно оптимизировать, но не принципиально.
И правда не получится. Какие хитрые функции не придумывай с $n$ вызовов генератора, все равно будет $3^n$ вариантов, что никак не делится на 5. Так что придется кое-что проигнорировать. Про оптимизацию можно подумать. В вашем варианте почти половину результатов придется игнорировать, так что думаю, не самый лучший. $3^4 \equiv 1 \pmod 5$ Вероятность неудачи $1/81$, но зато 4 вызова кажется много. Думаю, 3 будет лучше всего, но надо вычислить...Минимизировать среднее число вызовов.

-- 29.03.2013, 09:12 --

Да, среднее число вызовов генератора $S=n/p$
В вашем случае, при $n=2, S=3.6$
$\\n=3, S=3.24\\
n=4,S=4.05$
..если ничего не перепутал

 Профиль  
                  
 
 Re: Рандомные числа(С)
Сообщение29.03.2013, 20:31 
Заслуженный участник


09/09/10
3729
Shadow в сообщении #702776 писал(а):
Имеем идеальный генератор случайных натуральных чисел от 1 до 3. Как с его помощью создать генератор случ. нат. чисел от 1 до 5?

Сгенерировать два числа, сложить и вычесть единицу. Пожелания к распределению получившейся с.в. указывайте особо.

 Профиль  
                  
 
 Re: Рандомные числа(С)
Сообщение30.03.2013, 07:41 


26/08/11
2102

(Оффтоп)

Joker_vD в сообщении #703157 писал(а):
Сгенерировать два числа, сложить и вычесть единицу
А еще лучше просто сгенерировать одно число. Ведь никто ничего не говорил о равновероятности исходов, правда?Ну, кто-то поставил большие деньги на четверку и ищет меня, чтобы...поговорить. Но фирма гарантирует анонимность своих сотрудников

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group