-
- Любая попытка превратить равномерное распределение [0..n-1] в
равномерное же распределение [0..m-1] чистой функцией обречена на
провал, если n%m != 0. Если у нас на входе всего 32768 разных
значений X, которые мы хотим превратить в 1000 значений Y, нужно
смириться с тем, что на некоторые Y отобразится 32 значения X, а на
некоторые 33, и это ещё в лучшем случае. По ссылке как раз
предлагается простой вариант: для m==1000 значения rand() в
диапазоне [32000..32767] считать йцyкeн(79 знак., 17.11.2020 12:48)
- Ёлы-палы, нет задачи изобрести вечную иглу для примуса. Более того, это вредно. Один раз изобрёл, а потом кто зряплату платить будет? - SciFi(17.11.2020 13:09)
- Да речь не о равномерности, а о том, что выражения rand()%max
следует избегать т.к. в rand() младшие биты якобы "плохие" (о чём
RxTx писал). Соответственно идея в том, чтоб откинуть часть младших
бит. Вариант с зацикливнием меня пугает для случая, когда за rand()
стоит настоящий ГПСЧ. В линуксе программы висящие на чтении
/dev/random потому, что "не хватает энтропии" все наверное видели,
особенно после загрузки, и особенно ssh... - fk0(17.11.2020 13:08)
- Через хеш прогони, чтобы битики перемешались, раз уж паранойя спать не даёт. SciFi(1 знак., 17.11.2020 13:13, картинка)
- Мне с генераторами с.ч. пришлось разобраться еще на спектруме,
начиная с тех времен когда попадался какой-то интересный код или
когда я пытался нарисовать звезды на экране, а получались столбцы.
Во-первых я выписал ряд кодов гсч (все они были самопальщиной, за
исключением генератора Elite), во-вторых, благодаря вовремя
попавшей в руки брошюрке разобрался как работает линейный
конгруэнтный генератор. Слов во всяких википедиях тонны, но на деле
все просто. Есть текущее RxTx(4109 знак., 17.11.2020 05:15, ссылка)
- Я ночью хотел спать и сильно тупил. Пытался думать, но забил, мог только излагать информацию. А сейчас проспался. И все-таки я склоняюсь что modulo при операции с 16-битными регистрами конечно же не 65535 это я какую-то дикую ересь написал (могу поправить) а mod 65536. И остаток от деления на 65536. - RxTx(17.11.2020 13:04)
- В жизни я так думаю никто не будет пользоваться библиотечными. Есть
возможность взять шум с ацп и тп. - Tpoeшник(17.11.2020 10:54)
- У STM32 есть Random Generator на аналоговом шуме. Например Reference Manual RM0090 Rev 18 (STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439 advanced Arm®-based 32-bit MCUs) страница 767 или пункт/закладка 24. RxTx(224 знак., 17.11.2020 13:55, картинка)
- Возможность-то есть, но реализовать её вменяемым образом — это ведь ещё попыхтеть надо. Проще rand() вставить. - SciFi(17.11.2020 10:58)
- Любая попытка превратить равномерное распределение [0..n-1] в
равномерное же распределение [0..m-1] чистой функцией обречена на
провал, если n%m != 0. Если у нас на входе всего 32768 разных
значений X, которые мы хотим превратить в 1000 значений Y, нужно
смириться с тем, что на некоторые Y отобразится 32 значения X, а на
некоторые 33, и это ещё в лучшем случае. По ссылке как раз
предлагается простой вариант: для m==1000 значения rand() в
диапазоне [32000..32767] считать йцyкeн(79 знак., 17.11.2020 12:48)