fsergey 0 28 января, 2014 Опубликовано 28 января, 2014 · Жалоба Проще говоря нужна функция rand_value(int seed, int index). Все ГПСЧ, что я видел, при генерации нового значения используют в качестве зерна предыдущее, либо модифицируют собственные задающие значения. Поэтому получение n+1 числа в последовательности невозможно без расчёта предыдущих n чисел. Мне же нужно получить произвольное число в последовательности без расчёта предыдущих. Есть ли такие генераторы? Если нет, то что можно придумать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 28 января, 2014 Опубликовано 28 января, 2014 · Жалоба Есть ли такие генераторы? Если нет, то что можно придумать? Не видал, но есть простой метод решения. Берете какой-нибудь алгоритм шифрования (например DES), и шифруете ключем seed открытый текст index. На выходе получаете случайные числа. Либо берете хэш-функцию (например, MD5) от композиции seed и index. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fsergey 0 28 января, 2014 Опубликовано 28 января, 2014 · Жалоба Не видал, но есть простой метод решения. Берете какой-нибудь алгоритм шифрования (например DES), и шифруете ключем seed открытый текст index. На выходе получаете случайные числа. Либо берете хэш-функцию (например, MD5) от композиции seed и index. Отличный вариант! Если не найду нужный ГПСЧ, то так и сделаю. Спасибо! )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость TSerg 28 января, 2014 Опубликовано 28 января, 2014 · Жалоба Что мешает заполнить таблицу нужного размера от ГСЧ, а затем по индексу извлекать? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fsergey 0 28 января, 2014 Опубликовано 28 января, 2014 · Жалоба Что мешает заполнить таблицу нужного размера от ГСЧ, а затем по индексу извлекать? :) Даже если всю память контроллера займу таблицей, периодичность повторения ПСП будет для меня очень маленькой ( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость TSerg 28 января, 2014 Опубликовано 28 января, 2014 · Жалоба Ну, хорошо. А открытый текст где держать? На большом брате и передавать по Wi-Fi? :) Вы задачу поточнее изложите, а то фантазий много возникает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
FatRobot 0 28 января, 2014 Опубликовано 28 января, 2014 · Жалоба Выдумывайте функцию rng = f(seed, index) и проверяйте с помощью diehard test battery последовательность получившихся значений rng для index, который инкрементируется. В основу f( a, b ) удобно положить, как уже написал Rst7, какой-нибудь готовый шифратор или кодер от простой комбинации битов seed и index. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fsergey 0 28 января, 2014 Опубликовано 28 января, 2014 · Жалоба Ну, хорошо. А открытый текст где держать? На большом брате и передавать по Wi-Fi? :) Вы задачу поточнее изложите, а то фантазий много возникает. Время (индекс значения в последовательности) и ключ/полином, по условиям задачи, синхронизируются один раз в "безопасной среде". Одинаковые значения должны синхронно формироваться на обоих устройствах для поддержания связи между собой. Задача получения n-го значения последовательности выплывает из-за необходимости периодического восстановления синхронизма. Это если вкратце. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tarbal 4 28 января, 2014 Опубликовано 28 января, 2014 · Жалоба Аналоговый генератор шума + АЦП. Хотя дополнительное железо мне не нравится, но для полноты картины... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость TSerg 28 января, 2014 Опубликовано 28 января, 2014 · Жалоба Аналоговый генератор шума + АЦП. Хотя дополнительное железо мне не нравится, но для полноты картины... В этом случае никакой синхронизации не будет в принципе, а она ТС нужна. P.S. Если возникает рассинхронизация, то использовать передачу slave-девайсу нового значения seed и начинать синхронную генерацию ПСП (reset с новым seed). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fsergey 0 28 января, 2014 Опубликовано 28 января, 2014 · Жалоба Вопрос, может уже не в эту тему... Последовал совету вычислять md5 от комбинации времени и индекса. Время вычисления md5 на целевом камне - 15.17 мкс. Зато алгоритм хэша "MurmurHash2" - 0.59 мкс. Предел 1 мкс. Кто-нибудь слышал про MurmurHash2? И есть ли альтернативная и быстрая хэш функция? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
FatRobot 0 28 января, 2014 Опубликовано 28 января, 2014 · Жалоба Альтернативная обязательно есть: любая функция с выходом фиксированной разрядности, зависящим от входа. А мурмур-то почему не подходит? xxhash посмотрите, но не думаю, что там кардинальные отличия по части быстродействия И есть ли альтернативная и быстрая хэш функция? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fsergey 0 28 января, 2014 Опубликовано 28 января, 2014 · Жалоба Альтернативная обязательно есть: любая функция с выходом фиксированной разрядности, зависящим от входа. А мурмур-то почему не подходит? xxhash посмотрите, но не думаю, что там кардинальные отличия по части быстродействия мурмур как раз подходит! Тест на равномерность распределения, применительно к задаче, дал отличный результат. За совет спасибо, xxhash тоже думаю потестировать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
FatRobot 0 28 января, 2014 Опубликовано 28 января, 2014 · Жалоба Тест на равномерность распределения не стоит и ломаного сентаво. пример: rng = 0,1,2,3, 0,1,2,3, 0,1,2,3, ... имеет равномерное распределение в диапазоне [0; 3] Я писал вам, чем проверяются RNG. С другой стороны, если у вас все хорошо, то пусть так и будет. равномерно хорошо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fsergey 0 28 января, 2014 Опубликовано 28 января, 2014 · Жалоба Тест на равномерность распределения не стоит и ломаного сентаво. пример: rng = 0,1,2,3, 0,1,2,3, 0,1,2,3, ... имеет равномерное распределение в диапазоне [0; 3] Я писал вам, чем проверяются RNG. С другой стороны, если у вас все хорошо, то пусть так и будет. равномерно хорошо. Тест последовательностей по дайхарду (Runs Test): 49.76 - 49.82-% восходящих последовательностей для разных сидов. Покатит. Тест Birthday Spacings ещё кажется интересным. Идею понял. Благодарю! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться