|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Ping based random number generator
Реализован генератор случайных чисел, использующий Ping (измерение времени отклика определенного хоста в сети Интернет) в качестве источника энтропии. Итогом разработки стали функции PRandomize() (обеспечивает инициализацию ГСЧ) и PRandom (обеспечивает, собственно, генерацию случайного числа). Функция PRandom имеет две перегружаемые реализации: без параметров (возвращает случайное число типа Extended в интервале от 0 до 1 включительно) и с целочисленными параметрами (минимум и максимум типа Int64), которая возвращает целое (типа Int64) случайное число в указанном диапазоне. Описание, исходные коды и демо доступны на сайте pbrng.16mb.com.
Критика, которая высказывалась ранее на данном форуме по поводу этой идеи, по возможности учтена и алгоритм построен так, чтобы в минимальной степени зависеть от внешних факторов. Частотный тест случайных чисел, полученных таким образом, показывает хорошее (равномерное) распределение (другие виды тестов пока не проводились). |
#2
|
||||
|
||||
Какая-то изначально неверная идея. Почему бы не использовать тогда погодные данные?
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
ну, я не могу ответить на такой вопрос. Использовать-то можно очень много чего (начиная от квантовых флуктуаций или космического излучения, и заканчивая «бульками» в аквариуме или «лавовыми лампами»). Температура чего-нибудь, скорость вращения, и все такое, конечно, тоже в этом списке. Можно и погодные данные, конечно, использовать. Мне, вот, пинг «приглянулся» для этих целей. Почему — не могу сказать. А почему бы и нет?
|
#4
|
||||
|
||||
при отвалившемся интернет или вообще при его отсутствии смысла нет...
Пишу программы за еду. __________________ |
#5
|
|||
|
|||
В описании проекта об этом честно говорится.
Варианты такие: 1) интернет изначально был (и программа успешно инициализировалась), а потом отвалился — приведет к тому, что будут все равно генерироваться истинно случайные числа (только "переинициализироваться" не удастся), так как собственно для генерации СЧ программе интернет не нужен (только для инициализации); 2) интернета изначально не было — приведет к тому, что будут генерироваться только псевдо-случайные числа, но с более ровным распределением, чем у стандартной дельфийской функции Random. Тут надо еще сделать такую ремарку, что в отношении этого проекта главной задачей для меня лично было — получить практический навык описания и документирования проекта (это — мой первый опыт). |
#6
|
|||
|
|||
Маленький апдэйт. Я построил частотный тест (пока что провел 100 тыс. испытаний). Сравнивал мой ГСЧ и System.Random (Delphi). Вот, что получилось:
На иллюстрации сверху — результаты работы моего ГСЧ (PBRNG), а снизу - результаты работы System.Random (Delphi). Первый столбец — это цифра (тест был рассчитан на выпадение цифр от 0 до 9). Второй столбец — это количество выпадений данной цифры (в абсолютном выражении). Третий столбец — это процентное отношение количества выпадений определенной цифры к общему количеству испытаний (внизу можно видеть: Total: 100016). Четвертый столбец — это пометка максимального и минимального числа «выпадений». Пятый столбец — это процентная разница между количеством выпадений данной цифры и количеством выпадений той цифры, которая выпала максимальное число раз. Можно видеть, что в случае PBRNG на 100000 испытаний получается, что разница между максимумом и минимумом немного меньше, чем в случае System.Random. Правда, я должен сознаться, что бывало (на протяжении этих 100 тыс. испытаний) и наоборот. У PBRNG за эти 100 тыс. испытаний чаще всего выпадала четверка (ее количество — 10235, что составляет 10.233% от 100016). Реже всех выпадала тройка (она выпала «всего лишь» 9754 раза, что составляет 9.752% от 100016). Таким образом, разница между «самой популярной» и «наименее популярной» цифрами составляет 0.481%. У System.Random эта разница составляет 0.532%. Разрабатываю генератор случайных чисел на основе пинга (информация — на сайте http://pbrng.16mb.com/) Последний раз редактировалось mxustin, 09.10.2015 в 21:37. |