Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 30, 2020 15:22:08

nodochy
Зарегистрирован: 2019-11-15
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Генерация случайных чисел.

Как я понял Python использует генерацию псевдослучайных чисел. Можно ли узнать конкретную формулу?
Т.е есть какой - то случайный базовый x он берется, если не ошибаюсь на основе системного времени по умолчанию, затем используется мат формула, дающая хаос. И на основе этого мы будем получать каждый раз новый абсолютно случайный x. Если не ошибаюсь стартовый х должен принадлежать множеству Мандельборта. Меня из всего этого интересует мат формула и алгоритм, который преобразует время в этот самый стартовый х. Гуглил, но не нашел…

Отредактировано nodochy (Окт. 30, 2020 15:47:00)

Офлайн

#2 Окт. 30, 2020 16:27:01

Rafik
Зарегистрирован: 2018-09-04
Сообщения: 231
Репутация: +  27  -
Профиль   Отправить e-mail  

Генерация случайных чисел.

Попробуй начать копать с исходника модуля random. Насколько знаю, в линукс, в папке с библиотеками питона есть файлик random.py
Посмотри что у него внутри и копай далее.

Офлайн

#3 Окт. 30, 2020 18:57:58

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Генерация случайных чисел.

nodochy
Можно ли узнать конкретную формулу?
Питон использует разные формулы. В том числе он может запрашивать случайные числа у операционной системы, которая их генерирует по-своему.

nodochy
Т.е есть какой - то случайный базовый x он берется, если не ошибаюсь на основе системного времени по умолчанию, затем используется мат формула, дающая хаос.
Да хрень там используется. Но суть в том, что следующее число генерируется на основе предыдущего. Поэтому последовательность и называется псевдослучайной - по предыдущим числам можно угадать следующие.

nodochy
Если не ошибаюсь стартовый х должен принадлежать множеству Мандельборта.
Не факт. И у этого мужика фамилия Мандельброт, а не Мандельборт.

Пример одной из сишных реализаций
man 3 rand
EXAMPLE
POSIX.1-2001 gives the following example of an implementation of rand() and
srand(), possibly useful when one needs the same sequence on two different
machines.

static unsigned long next = 1;

/* RAND_MAX assumed to be 32767 */
int myrand(void) {
next = next * 1103515245 + 12345;
return((unsigned)(next/65536) % 32768);
}

void mysrand(unsigned int seed) {
next = seed;
}



Отредактировано py.user.next (Окт. 30, 2020 18:58:27)

Офлайн

#4 Окт. 30, 2020 20:00:47

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Генерация случайных чисел.

я правильно понимаю
в mysrand() мы присваеваем глобальную next
а в myrand() и происходит вся магия
тока чет не соображу как получается что то хотя бы минимально случайнопдобное?
лучше бы дергали бы из памяти мусор (ну там переполнение итд) оно как бы более хаотично что ли



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Окт. 30, 2020 20:01:45)

Офлайн

#5 Окт. 30, 2020 20:28:21

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Генерация случайных чисел.

AD0DE412
лучше бы дергали бы из памяти мусор (ну там переполнение итд) оно как бы более хаотично что ли
Вот у меня 32 гига памяти, занято максимум 3. Я запускаю свою программу. Операционная система ей выделяет страницы памяти, которые с момента включения компьютера никакой другой программе еще не аллоцировались. Откуда программа возьмет мусор?



Офлайн

#6 Окт. 30, 2020 20:49:10

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Генерация случайных чисел.

ну вроде бы в линуксе (при запуске) чето генерится и windows чет вроде того
деталей не знаю так краем уха выцеплялось т.е. там есть какая то область памяти занятая ‘мусором’



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Окт. 30, 2020 20:51:54)

Офлайн

#7 Окт. 30, 2020 21:01:14

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Генерация случайных чисел.

AD0DE412
тока чет не соображу как получается что то хотя бы минимально случайнопдобное?
лучше бы дергали бы из памяти мусор (ну там переполнение итд) оно как бы более хаотично что ли
тут главное что служит источником ентропии, в линуксе это счётчик тактов процессора, в МС это текущее время, размер жёсткого диска, размер свободной памяти, и чего то еще там, я не помню всего , а у интеловского RDRAND шумы токов..



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#8 Окт. 30, 2020 21:07:05

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Генерация случайных чисел.

а дошло в seed идет значение ну всего этого. спсб



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Офлайн

#9 Окт. 30, 2020 22:28:28

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Генерация случайных чисел.

AD0DE412
ну вроде бы в линуксе (при запуске) чето генерится и windows чет вроде того деталей не знаю так краем уха выцеплялось т.е. там есть какая то область памяти занятая ‘мусором’

Область памяти, безусловно, есть, только эта область памяти лежит за пределами адресного пространства программы, то есть из питончика ты эту пямять не прочитаешь, для этого надо просить операционную систему. А если уж просить о чем-то операционную систему, то наверное лучше попросить дать случайное число, а не хеш-сумму какой-то области памяти



Офлайн

#10 Окт. 30, 2020 23:31:06

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2679
Репутация: +  182  -
Профиль   Отправить e-mail  

Генерация случайных чисел.

> тока чет не соображу как получается что то хотя бы минимально случайнопдобное?

Есть много псевдослучайных алгоритмов. Например LCG, его реализацию как раз и привёл py.user.next. Вот его реализация на python-е

 a, b, m = 22695477, 1, 4294967296
def lcg():
	if lcg.x > 0:
		lcg.x = (lcg.x*a+b)%m
	return lcg.x
lcg.x = 3
r = lcg()
while r > 0:
	print(lcg())

> лучше бы дергали бы из памяти мусор (ну там переполнение итд) оно как бы более хаотично что ли

Так только в спектрумах делали. В современных ОС для этих целей есть специальные псевдоустройства.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Окт. 30, 2020 23:38:12)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version