-
- А как ваш вариант программы борется с тем, чтобы Ксения не играла
против Ксении? :) - Kceния(17.11.2020 11:05)
- Ксения, пересмотрите пожалуйста код. Счастливчики "выпадают" из
"лотереи". Собственно в этом и есть вся "красота" решения.
Случайность генерить функциями это отдельный разговор. fk0
предлагает перетасовывать пары. Но мне не ясно, да и как то
выразительнее тот подход в котором выбирается удачливый и потом на
его место i -тый подставляется. За n итераций все распределились и
судя по всему честно. - Tpoeшник(17.11.2020 13:07)
- Дык мне приятнее сама с собой играть, чем с Генералом :) - Kceния(17.11.2020 13:42)
- Какой ужас! От этого волосы на ладошках вырастают! - Kpoк(17.11.2020 14:00)
- Думаю, что Генерал слабак в теннисе, но это здесь не редкость. У
меня иногда такое впечатление что вы в жизни похожи на гуманоидов с
тонкими ножками и ручками и боооольшой такой головой.. - Tpoeшник(17.11.2020 13:45)
- Голова у меня и правда большая, но ножки не тонкие :) - Kceния(17.11.2020 13:46)
- Дык мне приятнее сама с собой играть, чем с Генералом :) - Kceния(17.11.2020 13:42)
- Ксения, пересмотрите пожалуйста код. Счастливчики "выпадают" из
"лотереи". Собственно в этом и есть вся "красота" решения.
Случайность генерить функциями это отдельный разговор. fk0
предлагает перетасовывать пары. Но мне не ясно, да и как то
выразительнее тот подход в котором выбирается удачливый и потом на
его место i -тый подставляется. За n итераций все распределились и
судя по всему честно. - Tpoeшник(17.11.2020 13:07)
- Запустил 100000 раз программу которая считает на каждые 100 i сумму выпадений 3ки: Tpoeшник(205 знак., 17.11.2020 10:51, картинка)
- Юморка ради C++ RxTx(1 знак., 16.11.2020 22:58, картинка)
- Кстати +1. - fk0(17.11.2020 18:48)
- Дайте текст. Плиз - Tpoeшник(17.11.2020 10:52)
- >>> - RxTx(17.11.2020 13:39, ссылка)
- хм... SciFi(112 знак., 17.11.2020 13:42 - 13:56)
- лол :) Именно пары он не выдает, просто случайно переставит и
распечатает список. Отступы доработаем в следующей версии. :)
Кстати, при запуске именно на stacked_croocked результат
перестановок один и тот же, а в теории должен быть разный. - RxTx(17.11.2020 13:52)
- На coliru.stacked-crooked.com результаты запусков кешируются. Т.е.
второй раз с той же программой и теми же аргументами запуска не
будет, а достанет результат с первого раза. А то постинг ссылки
(когда share жмёшь) где-нибудь на форуме ронял бы сервак. - fk0(17.11.2020 18:50)
- Спасибо, понял. - RxTx(17.11.2020 19:00)
- На coliru.stacked-crooked.com результаты запусков кешируются. Т.е.
второй раз с той же программой и теми же аргументами запуска не
будет, а достанет результат с первого раза. А то постинг ссылки
(когда share жмёшь) где-нибудь на форуме ронял бы сервак. - fk0(17.11.2020 18:50)
- лол :) Именно пары он не выдает, просто случайно переставит и
распечатает список. Отступы доработаем в следующей версии. :)
Кстати, при запуске именно на stacked_croocked результат
перестановок один и тот же, а в теории должен быть разный. - RxTx(17.11.2020 13:52)
- хм... SciFi(112 знак., 17.11.2020 13:42 - 13:56)
- вот это работает >>> - SciFi(17.11.2020 11:01, ссылка)
- >>> - RxTx(17.11.2020 13:39, ссылка)
- Нужно N раз подряд переставить рандомные элементы в списке и
вывести его попарно: fk0(836 знак., 16.11.2020 12:04)
- А может такой алгоритм дать на ввыходе идентичный входным данным результат Tpoeшник(75 знак., 16.11.2020 14:27)
- Откуда сведения, что "(unsigned long)m * rand()" не переполнится? - SciFi(16.11.2020 12:09)
- Небольшое расследование показало, что RAND_MAX бывает равен 0x7fff
или 0x7fffffff. Во втором случае нужно использовать для
произведения 64 бита, а в первом распределение получается не совсем
равномерным. йцyкeн(28 знак., 16.11.2020 18:39, ссылка)
- На мой взгляд, единственный разумный вариант тогда, что-то вроде (m
* rand() >> 15) % m. fk0(68 знак., 17.11.2020 02:55, ссылка)
- Любая попытка превратить равномерное распределение [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)
- Да, тут ещё ошибка: интервал это от нуля, до RAND_MAX включительно. - fk0(17.11.2020 02:46)
- На мой взгляд, единственный разумный вариант тогда, что-то вроде (m
* rand() >> 15) % m. fk0(68 знак., 17.11.2020 02:55, ссылка)
- Небольшое расследование показало, что RAND_MAX бывает равен 0x7fff
или 0x7fffffff. Во втором случае нужно использовать для
произведения 64 бита, а в первом распределение получается не совсем
равномерным. йцyкeн(28 знак., 16.11.2020 18:39, ссылка)
- Генерал, редактор в сахаре -- это всё, пиздец, я уже не могу...
Ссылка: fk0(13 знак., 16.11.2020 12:05, ссылка)
- welcome сделать лучше. Не за спасибо - General(16.11.2020 14:32)
- frand() лучше заменить на random(), т.к. float-числа в языке C
"нечестно" округляются - на самом деле дробная часть усекается.
Там, где функция random() неопределена, ее можно получить так
остаток деления random(n)=lrand()%n; Кроме того randomize()
предварительно надо запустить, иначе "случайный" выбор будет при
запуске этой программы каждый раз повторяться. - Kceния(16.11.2020 00:01)
- frand это имя пользовательской функции. внутри нее rand простой. - Tpoeшник(16.11.2020 00:04)
- Вот и я к тому, что пользовательская функция может быть написана
"несправедливо". Типичная ошибка - последний элемент списка
выбирается реже других. Kceния(514 знак., 16.11.2020 00:17)
- Здесь ошибка в другую сторону: вероятно, идея была в том, что выражение rand()/(RAND_MAX/j) с равной вероятностью принимает значения от 0 до j-1, а других значений не принимает, но верна только первая часть. На самом деле, из-за того что целочисленное деление округляет (RAND_MAX/j) вниз, второе деление может дать значение, большее чем хотелось. - йцyкeн(16.11.2020 11:44)
- Как там стандартно я хз. Но сделал так что среди всех случайно одного, среди оставшихся случайно другого, среди оставшихся случайно третьего и тд. Вопрос как раз в том чтоб супер -пупер случайно получилось. Я не беру последний или первый. Всегда случайно из всех доступных. - Tpoeшник(16.11.2020 00:20)
- Вот и я к тому, что пользовательская функция может быть написана
"несправедливо". Типичная ошибка - последний элемент списка
выбирается реже других. Kceния(514 знак., 16.11.2020 00:17)
- frand это имя пользовательской функции. внутри нее rand простой. - Tpoeшник(16.11.2020 00:04)
- яб заменил % на & ))) - Aleksey_75(15.11.2020 23:52)
- Пост типа "найди 10 ошибок"? - BlackMorda(15.11.2020 23:46)
- Нужно случайным образом вытащить из данных сложные структуры.
Сложные для меня. Это типа упрощенная модель макет. - Tpoeшник(15.11.2020 23:56)
- Переменной "char" присваивать "int", довольно рискованный подход. BlackMorda(270 знак., 16.11.2020 00:03)
- считал что &employees = employees[0] Tpoeшник(26 знак., 16.11.2020 00:08)
- char *employees[] - это указатель на массив. char employees[] - это массив. - BlackMorda(16.11.2020 00:14)
- ща ляпну что то. но char *employees[] - это массив указателей. Но
не суть. Мне нужно кол-во указателей получить. Для єтого я делю на
размер указателя. - Tpoeшник(16.11.2020 00:17)
- Это если считать, что указатели на разные типы имеют одинаковый размер. А вообще для массивов принято так: "sizeof arr / sizeof arr[0]". Работает и с массивами структур, например. - SciFi(16.11.2020 07:54)
- Все, правильно, это я туплю ;-) - BlackMorda(16.11.2020 00:30)
- ща ляпну что то. но char *employees[] - это массив указателей. Но
не суть. Мне нужно кол-во указателей получить. Для єтого я делю на
размер указателя. - Tpoeшник(16.11.2020 00:17)
- char *employees[] - это указатель на массив. char employees[] - это массив. - BlackMorda(16.11.2020 00:14)
- считал что &employees = employees[0] Tpoeшник(26 знак., 16.11.2020 00:08)
- Переменной "char" присваивать "int", довольно рискованный подход. BlackMorda(270 знак., 16.11.2020 00:03)
- Нужно случайным образом вытащить из данных сложные структуры.
Сложные для меня. Это типа упрощенная модель макет. - Tpoeшник(15.11.2020 23:56)
- А как ваш вариант программы борется с тем, чтобы Ксения не играла
против Ксении? :) - Kceния(17.11.2020 11:05)