|
1 / 1 / 0
Регистрация: 05.05.2020
Сообщений: 186
|
|
Рандомайзер07.12.2021, 22:22. Показов 4636. Ответов 49
Метки нет (Все метки)
Как можно реализовать максимально рандомный рандомайзер от 0 до 32767 через rand()
Пробовал через библиотеку <time.h> Но там числа буквально на единицу отличаются друг от друга А других вариантов особо и не нашёл, везде описана дефолтная работа функции
0
|
|
| 07.12.2021, 22:22 | |
|
Ответы с готовыми решениями:
49
Рандомайзер Рандомайзер не работает Рандомайзер слов на C++ |
|
Любитель чаепитий
|
|||
| 08.12.2021, 20:03 | |||
|
или нет? а за примерами далеко ходить не надо: https://xakep.ru/2021/07/07/ka... nager-bug/ и тут ещё не rand() использовался(скорее всего). всё сводится к одному: угадал сид - сбрутил пароли.
0
|
|||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||
| 08.12.2021, 20:27 | ||||
|
а на деле запароленный rar ломануть не могут. сможешь написать софтинку, которая реально сможет ломануть пароль, если ей на вход подать время его создания?
0
|
||||
|
Любитель чаепитий
|
|||
| 08.12.2021, 21:11 | |||
![]() CVE, я так полагаю, тоже завели тоже чисто по-приколу, а чо б и нет. маркетинговый ход в пользу Касперского.
0
|
|||
|
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,340
|
||
| 08.12.2021, 21:43 | ||
|
Для шифрования как раз используются псевдо-случайные числа - потому что эту последовательность можно повторить, если знать пароль. Случайные числа невозможно получить математически, только аппаратно. Например, количество милисекунд, прошедших с момента включения компьютера - вряд-ли сможешь 2 раза получить одинаковое число. Или какая-нить специальная микросхема, которая физически генерирует случайные числа.
0
|
||
|
|
||
| 08.12.2021, 21:55 | ||
|
0
|
||
|
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,340
|
||
| 08.12.2021, 22:11 | ||
|
1. Нафига доверять сторонней программе создавать за тебя пароли, если лучший ГСЧ у тебя в голове?
2. Если уж совсем нет рэндомной фантазии - напиши программу, которая будет быстро-быстро перебирать буквы, цифры и символы. И по нажатию кнопки добавляй в строку ту, на которую в данный момент показывает счётчик. Закрой глаза и жми на кнопку с заведомо нерегулярными паузами - получишь случайный пароль. Добавлено через 8 минут
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
| 08.12.2021, 23:17 | ||||||
|
на которую ссылается статья по твоей предыдущей ссылке. ты заявил: в ней нет информации ни об одном реальном взломе "слабого пароля". и как по мне, сами данные тоже сомнительные. я не великий математик, и могу ошибаться. но у меня очень большие сомнения насчет этого заявления:
тобишь, это не более, чем домыслы теоретика. вот когда ты предоставишь факты, которые будут свидетельствовать, что любые ключи/пароли, основанные на гпсч, научились вскрывать за адекватное время, вот только тогда можно будет сказать, что их использование в криптографии не приемлимо. а покамест, как я и писал выше: а в каких то - вполне себе приемлимо.
0
|
||||||
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
|||||||||||||||||
| 12.12.2021, 07:09 | |||||||||||||||||
|
Я всегда считал, что если генератор rand() равномерно генерит числа от нуля до X, то если брать rand() % (X-N), то значения до N будут встречаться чаще в результате такой операции. Это и породит неравномерное распределение независимо от самого качества функции rand().
Кликните здесь для просмотра всего текста
Первые шесть значений очевидно будут встречаться в два раза чаще.
Для rand() % X с большим RAND_MAX показать, конечно, сложнее гораздо. Но суть та же. Ограничение диапазона приведёт к неравномерному распределению. Добавлено через 3 минуты Добавлено через 9 минут
0
|
|||||||||||||||||
|
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,340
|
|||||||
| 12.12.2021, 09:06 | |||||||
0
|
|||||||
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
|||
| 12.12.2021, 14:21 | |||
![]() Процитирую уважаемого hoggy, "ты сможешь на практике продемонстрировать неравномерность?" Ваш myrnd() даёт значения в диапазоне от 0 до 32771. Равномерно? Допустим. Но если отсекать myrnd() % 30000 -- он не будет давать равномерное распределение. И числа от нуля до 2771 будут встречаться чуть чаще. Почему? Просто потому, что число 1 и число 30001 в равномерном распределении должны встречаться одинаково часто. То есть, что 1 что 30001 должно встречаться с одинаковой вероятностью 1/32771. А 1 % 30000 и 1 % 30001 для обоих случаев дают в результате 1. То есть единица начнет встречаться банально чаще, с вероятностью 1/32771 + 1/32771. То же самое для всех остальных значений от 0 до 2771.
0
|
|||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||||||||||||||||
| 12.12.2021, 14:21 | |||||||||||||||||||||||||
|
причем, у тебя ошибка не в математике, а в логике. что бы осознать эту ошибку, не нужно владеть тервером. итак, по порядку: 1. ты привел не_корректную формулу диапазона. математически корректная формула: rnd() % (maxVal - minVal + 1) + minVal;где: rnd() - псч на всем диапазонеспециально ещё раз повторю: rnd() - псч на всем диапазонеэто - очень важный момент. 2. момент важный, но не критичный. я привел этот пункт исключительно для справки. запомни: неправильно: rand() % (X-N)правильно: rnd() % (maxVal - minVal + 1) + minVal;формула корректна с точки зрения математики. но не_корректна с точки зрения с++. однако мы не будем сейчас заострять на это внимание
на максимальном диапазоне там будет краш (следствие UB) стандартные инструменты, такие как std::uniform_int_distribution<int> distribution(a, b); используют более сложный алгоритм, который учитывает особенность арифметики с++, и связанные с ним UB. но поскольку проблема сугуба техническая, а не математическая, то мы проигнорируем этот факт. 3. для иллюстрации момента, возьмем мой экспериментальный дайс из #9 он удобен в том плане, что наглядно видна вся подноготная. https://rextester.com/IXAEB69731
4. а что сделал ты в своём примере? ты взял уже готовое число из заданного диапазона, и ещё раз его обрезал. вот здесь у тебя уже дайс выдаёт в нужном диапазоне: 5. в итоге, что на самом деле показывает твой неудачный пример? он показывает частоту отстатков от деления от чисел в диапазоне от 0 дол 15 вот что ты сделал:
ты сослася на документацию, заявляя, что якобы там где-то что-то обрезается. ну так вот, из документации никак не следует, что где-то что-то будет обрезаться. а из тезиса о том, что под капотом rand может быть какой угодно алгоритм, вообще ровным счетом ничего не следует, кроме того, что под капотом может быть какой угодно алгоритм. на основании такой информации нельзя делать выводов о поведнии rand
0
|
|||||||||||||||||||||||||
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
|||||||||
| 12.12.2021, 14:38 | |||||||||
|
Но когда мы берём остаток от деления на не кратное максимальному значению, мы изменяем распределение случайных чисел. Добавлено через 15 минут Получаем rand() % (9 - 0 + 1) + 0? Не вижу, как это отличается от rand() % 10. То есть числа 1 и 32001 нам встретятся с одинаковой вероятностью 1/0x7fff? С какой вероятностью будет встречаться число 1, если брать "rnd_() % (32000 - 0 + 1) + 0"?
0
|
|||||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 12.12.2021, 14:49 | |||
|
напоминаю: нет вообще никакой связи между стандартном, и тем, что ты не умеешь правильно обрезать рандом для получения диапазона.
0
|
|||
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
||||
| 12.12.2021, 15:14 | ||||
|
Не по теме: Или, выражаясь вашим языком: Добавлено через 15 минут Я не вижу, как отличаются функция, возвращающая равномерно распределённое случайное число в диапазоне от 0 до 15 от функции, возвращающей равномерно распределённое случайное число в диапазоне от 0 до 0x7fff. Почему не должно быть такого же эффекта неравномерности выпадающих значений только гораздо менее выраженного?
0
|
||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||
| 12.12.2021, 15:17 | |||||
|
ведь иногда люди просто несут чушь. Кликните здесь для просмотра всего текста
сначала они пишут про "обрезание".
и что "оно" как-то там в стандарте называется. а потом выясняется, что "обрезание" и "оно" - фигуранты вообще никак не связанных друг с другом предожений. то ли у людей проблема с логикой. то ли - с русским языком. то ли всё вместе. у нормальных людей повествование представляет собой цепочку предложений, связанных друг с другом общим контекстом. например:
теперь твой вариант: с точки зрения грамматики русского языка, кажется что да, "обрезание". но с точки зрения здравого смысла - это просто чушь.
0
|
|||||
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
||
| 12.12.2021, 15:28 | ||
|
Не по теме: Мне очень тяжело будет поддерживать диалог в таком пафосно-надменном пассивно-агрессивном тоне, но я постараюсь, если вам, уважаемый hoggy, будет так удобнее. Ваше неумение понимать контекст и желание связать всё до состояния каши по прежнему их никак не связывает. Сейчас вы несёте чушь и уходите от темы. Еще раз вопросы: "rand() % (9 - 0 + 1) + 0" даст такие же результаты как "rand() % 10"? Если функция rnd_() даёт равномерно распределённые значения между 0 и 32676, а функция rand() дает равномерно распределённые значения от 0 до 15, то почему "rand() % (9 - 0 + 1) + 0" - "так делать нельзя", а "rnd_() % (29999 - 0 + 1) + 0" - всё окей и равномерно?
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 12.12.2021, 15:45 | |||
|
два никак несвязанных предложения написал ты, а проблемы с пониманием контекста якобы у меня. ну-ну. ты сам признал, что написал два несвязанных друг с другом предложения. у несвязанных предложений нет, и не может быть никакого контекста. а значит местоимение "оно" - это чушь. это - не какое то моё личное мнение. это - русский язык.
0
|
|||
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
|||
| 12.12.2021, 15:59 | |||
|
Ты так и не ответил ни на один из вышеприведённых вопросов. Еще раз вопросы: Так всё же "rand() % (9 - 0 + 1) + 0" даст такие же результаты как "rand() % 10"? Если функция rnd_() даёт равномерно распределённые значения между 0 и 32676, а функция rand() дает равномерно распределённые значения от 0 до 15, то почему "rand() % (9 - 0 + 1) + 0" - "так делать нельзя", а "rnd_() % (29999 - 0 + 1) + 0" - всё окей и равномерно? Не по теме: Так удобнее общаться? Не дотягиваю с пафосом немного, понимаю. Маловато опыта.
0
|
|||
|
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,340
|
|||||||
| 12.12.2021, 16:42 | |||||||
|
Вот формула линейной конгруэнтной функции: x = (x * 379 + 1) % 32771; Понятно, что значение х нельзя менять произвольно, иначе нарушится работа функции. Но можно снять копию с этого числа, и с ней уже делать что заблагорассудится:
0
|
|||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 12.12.2021, 16:53 | ||
|
где RND - возвращает число с нормальным распределением. а X - некоторое произвольное число из диапазона RND. штука в том, что если принять за истину, что RND даст распределение K тогда RND % X даст распределение B, где B хуже чем K таким образом, формулы извлечения псч в нужном диапазоне, которые используют отстаток от деления, дают результат с более худшим распределением, в сравнении с базовым RND
1
|
||
| 12.12.2021, 16:53 | |
|
Почему не работает рандомайзер
Рандомайзер Простой рандомайзер
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|