Если ГСЧ "имени ParuSnow" будет возвращать 90% единиц и 10% нулей, то у вас повернётся язык назвать такой генератор "случайным"? Разумеется, уже есть готовые библиотеки подобных статистических тестов (не для ОЛ, а для генераторов на Си), и тест на "равномерность нулей и единиц" далеко не единственный.
Да Вы бы послушали Ситникова, как раз он поведает о ситуации которая случилась со мной, я долго пытался его вынудить показать генератор для целочисленных в программируемых устройствах, типа плк, пр. Как раз надеялся что столкнется с переполнением диапазона, ан нет, предлагаемый им генератор работает с 24 битами. Это к тому что Вы обращаете вниание на 16битные счетчики в системе с типами данных только двойное слово
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
Ну какое может быть переполнение в ГСЧ на "кольце"?
Вы когда "в бутылочку" играете ждёте "переполнения"?
По его же мнению, ГСЧ, работающий с 24 из 32 битов, таковым являться не может, т.к., всегда выдаёт одно и то же значение в 8 битах, которые не использует
И как можно не обращать внимание на ФБ, ограничивающий возможности среды программирования, без всяких объективных на то оснований?
Я, может быть, не прав, но обоснований почему в ОЛ не может быть 32хразрядного счётчика, я не увидел, а реализованные такие счётчики увидел, и сам легко реализовал.
В каких ещё ФБ зарыты подобные грабли (невозможность работы с полным диапазоном переменной)?
Но-но!
Обсуждение ГСЧ никакой пользы "макросам ОЛ" (см название текущей темы) не принесет, а народ получит кучу спама. Наверняка есть море подписанных на эту тему.
Поэтому предлагаю ГСЧ тут не обсуждать.
Разумеется, capzap прав (с 24 битами речь была про float, и действительно в одно random float значение можно только 24 бита запихнуть). Ну и я тоже, разумеется, прав. Если есть желание пообсуждать ГСЧ -- создавайте тему в курилке.
Если честно, то я не понимаю смысла выкладывать в этой теме ГСЧ непонятного качества, когда есть проверенные алгоритмы типа xorshift128. Если это проект типа "мой первый макрос в ОЛ" -- не вопрос, пущай будет в отдельной теме. Но зачем подкладывать свинью другим? Много же кто просто возьмёт макрос и прилепит в проект.
А потом окажется, что постоянно перегорает "красная" лампочка, т.к. она на ГСЧ "чаще выпадает".
Владимир Ситников...
Что-то не так?
Вы сначало проверьте потом утверждайте что не рабочий.
Я не утверждаю что он чёткий!
PS:
Но предупреждаю что перед использованием в проектах хорошенько проверьте на ошибки
Кстати он генерирует числа от 1 до 10
У него вместо нуля 10^
Последний раз редактировалось ParuSnow; 31.07.2017 в 18:07.
Ну, если неправильно использовать даже "самый-самый правильный ГСЧ", то легко пережечь только одну лампочку
Задай диапазон ГСЧ 1-10, и включай зелёную только при 11
Оно, конечно, несколько офтоп.Но для полного понимания. Если Ваш ГСЧ пишет только 24 бита, то и "случайным" он может быть только в дискретных точках в этом диапазоне. И не важно как потом представлять эти биты - флоатом, или интом, попугаями или ещё как. 2^24 степени вариантов - и не больше. 24 бита "случайности".
Если "1 бит случайности", то отношение количества 0 и 1 в длинной последовательности выбора стремится к 1.
Если не к 1, то просто "случайности" МЕНЬШЕ ОДНОГО БИТА. (Вспоминаем теорию информации). Но! Это не значит, что случайности нет, или она "неправильная".
"Правильность" её определяется другим - отсутствием зависимости результата генерации от любого числа предыдущих генераций.
Т.е., невозможностью однозначного вычисления результата , зная даже все предыдущие.
Вот поэтому, все детерминированные алгоритмы умеют только "псевдослучайные", с более или менее длинной последовательностью.
Для настоящей случайности, нужна случайность недетерминированная ничем (внешний источник), а задача алгоритма только максимально точно её "размазать" по диапазону, определённому этим алгоритмом, чтобы этот диапазон не заузить. - чтобы 24 бита, в которые алгоритм пишет эту случайность оказались случайными на все 24 бита, а не на 23.5, например.
"Правильный" ГСЧ на 32 бита интов более "случаен", чем на 24 бита флоатов. Просто потому, что диапазон шире.
Это как с возмущениями тут на отсутствие ФБ на равенство флоатов. Ну да! "В натуре" такое равенство разных чисел вообще невероятно, а для флоат-переменных, ограниченных длиной записи, вероятно ровно настолько же, насколько равенство интов этой же длины.
"В натуре" 0.999(9) строго равно 1, а в программе такого не бывает никогда.![]()
Последний раз редактировалось pop70; 31.07.2017 в 18:06.