Есть генератор случайных чисел (Вихрь Мерсена) Все хорошо, но при большом количестве итераций распределение случайных величин слишком идеально. Т.е. Есть процедура gen_rnd32() - собственно сам вихрь менсена Есть надстройка _random(), которая возвращает числа от 0 до 9. Проблема в том, что при миллиарде итераций количество чисел примерно одинаково, т.е. количество нулей примерно равно количеству единиц и т.д. В общем распределение уж слишком хорошее. Нужно генератор как-то подпортить, чтобы распределение было случайное, а не равномерное. Все мои попытки успехом не увенчались, т.к. я смог лишь сместить распределение (т.е. каких-то чисел стало на столько-то процентов больше, а каких-то меньше. При чем чисто статистически, можно заранее предугадать, что и чего будет больше или меньше. Сделать распределение случайным - увы, я не смог, т.к. прихрамывает матчасть) Помогите сделать надстройку над _random() которая почти наверняка испортит распределение и сделает его более неравномерным. Заранее благодарен
Все генераторы псевдослучайных чисел выдают заданное распределение, даже если оно неравномерное (почитать про это можно здесь) А тебе похоже нужно истинно а не псевдо случайное число - его обычно получают с помощью таймеров или счёчика тактов. Имхо rdtsc будет то что тебе нужно - младшая часть этого счётчика меняется достаточно быстро и труднопредсказуемо чтобы выполнять роль случайного числа. Но вообще-то равномерное распределение это "самое случайное из случайных" ).
Ещё истинно случайные числа можно получать от мыши или клавы (но это геморой, требующий присутствия и активности юзера), поэтому лучше взять шумовой сигнал, например с микрофона. Или можешь собрать в прогу кучу псевдослучайных генераторов с разными распределениями и через N чисел переключаться на другой выбирая генератор по rdtsc.
Ничего не прихрамывает. Ты пытаешься придумать меру случайности на основе статистических формул, которые и выдуманы, чтобы найти закономерность в случайности. А генераторы специально проверяются на то, чтобы быть идеальными с точки зрения статистики, в т.ч. в смысле отклонений - дисперсия, например, отнюдь не ноль. Переключение не поможет - статистика вещь упрямая и после триллиона все встанет куда надо. И кстати даже есть поставить "истинный" генератор, на основе радиоактвных материалов или квантовых эффектов - он выдаст еще лучшее равномерное распределение.
А главная ошибка : ты меряешь случайность генератора, после того как отсортировал его реализации на 10 групп. Так это все и было придумано, чтобы из псевдо-случайности получить закономерную случайность. Можно найти такое число групп, когда уже "поломается" твой вихрь
2FED 1. CryptGenRandom в приложениях х32 на Осях х64 не всегда корректно работает. От данной функции пришлось отказаться. 2. Вихрь Мерсена в разы быстрее штатных Вин-средств.
ты хэшируешь (приводишь к меньшему множеству) посмотри в каком районе числа наиболее компактно лезут, вот его и разделяй на десять. как-то так