Author

Topic: Как получить случайное число из seed? (Read 180 times)

member
Activity: 107
Merit: 10
нет, понятно что обратное преобразование не возможно..
Я имел ввиду что бы по сиду, любой пользователь мог получить то же случайное число и мог проверить. (в 1-2 операции без всяких циклов, т.к. не каждый дружит с кодингом)
Обычно у каждого псевдослучайного алгоритма есть функция init(seed) и далее идёт множество последовательных функций rand(), связанных друг с другом через созданный инстанс. По умолчанию seed - это таймстамп в микросекундах, хотя это считается небезопасным. Если seed будет заранее известен, то первое и последующие псевдослучайные числа будут всегда одними и теми же. Что подразумевается под Range?
Всё верно, нужно инициализировать зерно, и далее все вызовы rand должны возвращать одинаковую последовательность.
В PHP например это функция mt_srand().
Главное чтобы у клиентов был один и тот же алгоритм генерации псевдослучайных чисел.
legendary
Activity: 3486
Merit: 1100

Что такое seed я не знаю, но из sha256, точнее от его последней части, случайное число какого угодно диапазона я получаю таким образом:
https://github.com/neiros/---TTC---/blob/TTC-all-Lyra2REv2/src/miner.cpp#L442
https://github.com/neiros/---TTC---/blob/TTC-all-Lyra2REv2/src/miner.cpp#L447
https://github.com/neiros/---TTC---/blob/TTC-all-Lyra2REv2/src/miner.cpp#L461
legendary
Activity: 2422
Merit: 2166
нет, понятно что обратное преобразование не возможно..
Я имел ввиду что бы по сиду, любой пользователь мог получить то же случайное число и мог проверить. (в 1-2 операции без всяких циклов, т.к. не каждый дружит с кодингом)
Обычно у каждого псевдослучайного алгоритма есть функция init(seed) и далее идёт множество последовательных функций rand(), связанных друг с другом через созданный инстанс. По умолчанию seed - это таймстамп в микросекундах, хотя это считается небезопасным. Если seed будет заранее известен, то первое и последующие псевдослучайные числа будут всегда одними и теми же. Что подразумевается под Range?
full member
Activity: 1022
Merit: 100

Не понял: вы хотите иметь возможность обратного преобразовпния из рэндома в сид??
Боюсь, что взаимнооднозначное преобразование не получится...
Числу из интервала 0..25 соответствует овердофига чисел из интервала 0...2^256

нет, понятно что обратное преобразование не возможно..
Я имел ввиду что бы по сиду, любой пользователь мог получить то же случайное число и мог проверить. (в 1-2 операции без всяких циклов, т.к. не каждый дружит с кодингом)


с делением по модулю вроде получилось нормально.
newbie
Activity: 13
Merit: 0
Да всё просто.
мы раньше умножали предыдущее случайное число на 11 и прибавляли Pi, затем откидывали целую часть и получали случайное число до единицы.
Code:
man 2 rand
Code:
#include 
...
srand(hash & 0xFFFFFFFF);
int random_number = rand(25)

kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Всем кодерам привет!

Кто может подсказать идею, как можно сгенерировать случайное число из seed в заданном диапазоне.


К примеру:
Seed=2629bed0307ed45a36a2faabeaedd9eb1c2c91674c243babf13145ff2652b6c8
Range=25

random(Seed, Range).

Есть идеи?


результ = (int)(первые4байта ( сха256(сид)))
вхиле результ больше ранге
результ= (int)(первые4байта ( сха256(результ)))


Идея понятна.

сид у меня и есть результат сха256..

если применим вхиле, то потом не смогу восстановить сид..
т.е. введя сид (первоначальный) результат будет не тот.

может идея, из хэша вырезать все буквы..
получим 26290307453629129167424313145265268
и как-то с делением попробовать?



Не понял: вы хотите иметь возможность обратного преобразовпния из рэндома в сид??
Боюсь, что взаимнооднозначное преобразование не получится...
Числу из интервала 0..25 соответствует овердофига чисел из интервала 0...2^256
full member
Activity: 1022
Merit: 100
Всем кодерам привет!

Кто может подсказать идею, как можно сгенерировать случайное число из seed в заданном диапазоне.


К примеру:
Seed=2629bed0307ed45a36a2faabeaedd9eb1c2c91674c243babf13145ff2652b6c8
Range=25

random(Seed, Range).

Есть идеи?


результ = (int)(первые4байта ( сха256(сид)))
вхиле результ больше ранге
результ= (int)(первые4байта ( сха256(результ)))


Идея понятна.

сид у меня и есть результат сха256..

если применим вхиле, то потом не смогу восстановить сид..
т.е. введя сид (первоначальный) результат будет не тот.

может идея, из хэша вырезать все буквы..
получим 26290307453629129167424313145265268
и как-то с делением попробовать?

kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Всем кодерам привет!

Кто может подсказать идею, как можно сгенерировать случайное число из seed в заданном диапазоне.


К примеру:
Seed=2629bed0307ed45a36a2faabeaedd9eb1c2c91674c243babf13145ff2652b6c8
Range=25

random(Seed, Range).

Есть идеи?


результ = (int)(первые4байта ( сха256(сид)))
вхиле результ больше ранге
результ= (int)(первые4байта ( сха256(результ)))
full member
Activity: 1022
Merit: 100
Всем кодерам привет!

Кто может подсказать идею, как можно сгенерировать случайное число из seed в заданном диапазоне.


К примеру:
Seed=2629bed0307ed45a36a2faabeaedd9eb1c2c91674c243babf13145ff2652b6c8
Range=25

random(Seed, Range).

Есть идеи?
Jump to: