fk0легенда (17.11.2020 13:08, просмотров: 202) ответил йцyкeн на Любая попытка превратить равномерное распределение [0..n-1] в
равномерное же распределение [0..m-1] чистой функцией обречена на
провал, если n%m != 0. Если у нас на входе всего 32768 разных
значений X, которые мы хотим превратить в 1000 значений Y, нужно
смириться с тем, что на некоторые Y отобразится 32 значения X, а на
некоторые 33, и это ещё в лучшем случае. По ссылке как раз
предлагается простой вариант: для m==1000 значения rand() в
диапазоне [32000..32767] считать
Да речь не о равномерности, а о том, что выражения rand()%max
следует избегать т.к. в rand() младшие биты якобы "плохие" (о чём
RxTx писал). Соответственно идея в том, чтоб откинуть часть младших
бит. Вариант с зацикливнием меня пугает для случая, когда за rand()
стоит настоящий ГПСЧ. В линуксе программы висящие на чтении
/dev/random потому, что "не хватает энтропии" все наверное видели,
особенно после загрузки, и особенно ssh...
[ZX]