2014 dxdy logo

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

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




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

 
 
 
 Re: Рандомные числа(С)
Сообщение28.03.2013, 13:23 
А почему бы просто не домножить на $10$ в нужной степени?

 
 
 
 Re: Рандомные числа(С)
Сообщение28.03.2013, 13:41 
Аватара пользователя
Соберите из двух, rand() * (RAND_MAX + 1) + rand()

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

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

 
 
 
 Re: Рандомные числа(С)
Сообщение28.03.2013, 14:20 
Аватара пользователя
Yuri Gendelman в сообщении #702588 писал(а):
Получить 32-битное ПСЧ можно сгенерировав 2 числа с помощью rand() и скомбинировав их в одно:

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

 
 
 
 Re: Рандомные числа(С)
Сообщение28.03.2013, 14:54 

(Оффтоп)

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

 
 
 
 Re: Рандомные числа(С)
Сообщение28.03.2013, 21:28 
Имеем идеальный генератор случайных натуральных чисел от 1 до 3. Как с его помощью создать генератор случ. нат. чисел от 1 до 5?

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

 
 
 
 Re: Рандомные числа(С)
Сообщение29.03.2013, 09:31 
Аватара пользователя
Shadow в сообщении #702776 писал(а):
Имеем идеальный генератор случайных натуральных чисел от 1 до 3. Как с его помощью создать генератор случ. нат. чисел от 1 до 5?

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

 
 
 
 Re: Рандомные числа(С)
Сообщение29.03.2013, 09:35 
Бросаем 2 раза, повторяем пару бросков пока они совпадают.
Последний бросок будет честным.

 
 
 
 Re: Рандомные числа(С)
Сообщение29.03.2013, 09:58 
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 
Shadow в сообщении #702776 писал(а):
Имеем идеальный генератор случайных натуральных чисел от 1 до 3. Как с его помощью создать генератор случ. нат. чисел от 1 до 5?

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

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

(Оффтоп)

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

 
 
 [ Сообщений: 13 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group