PDA

Просмотр полной версии : Временная тема



capzap
15.07.2016, 07:55
В оскат практически наверняка палёная рандомная функция.
Использование неправильных рандомных функций запросто может приводить к неправильным вычислениям и т.п.
я вобщем то не сомневался что Вы начнете "пальцы гнуть", что в АСУТП всё плохо. Может еще и сможете назвать область применения, где будет использоваться такой генератор, кстати в оскат функции записаны как function calculates a pseudo random number

rovki
15.07.2016, 08:58
В Спортлото ;):D

Владимир Ситников
15.07.2016, 09:42
я вобщем то не сомневался что Вы начнете "пальцы гнуть", что в АСУТП всё плохо. Может еще и сможете назвать область применения, где будет использоваться такой генератор, кстати в оскат функции записаны как function calculates a pseudo random number

По существу есть что?
Если нужен ГСЧ, то нужно использовать проверенные алгоритмы ГСЧ, а не ересь вида "умножим на math.pi и уж точно получим случайное значение".


что в АСУТП всё плохо

Я сказал: в oscat палёная функция рандомного значения. Если для вас рандомная функция из OSCAT это то же самое, что АСУТП, можете оставаться при этом мнении.

capzap
15.07.2016, 09:58
Назовите хоть один технологический процесс где используется ГСЧ, то что его написали не означает что он используется. Для Вас же легче высмеять что я не разбираюсь что такое функция и что такое АСУТП.
Если по существу , то это Вы займитесь делом и без всяких понтов выложите тут код который будет тестом на случайность, вот и проверим пройдут ли их уже имеющиеся функции. Напомню, на плк обычно никто не занимаемся криптографией, для игр и тестирования достаточно имеющихся генераторов

Владимир Ситников
15.07.2016, 11:00
Назовите хоть один технологический процесс где используется ГСЧ, то что его написали не означает что он используется. Для Вас же легче высмеять что я не разбираюсь что такое функция и что такое АСУТП.
Перестаньте передёргивать.
Есть технологический процесс или нет не отменяет факта, что ГСЧ нужно использовать правильный, а не абы какой.
Прочитайте ещё раз что я пишу: "если нужен ГСЧ..." Если не нужен, то, разумеется, не нужен.

Легко могу представить использование ГСЧ для тестирования.
Так же, легко можно представить использование ГСЧ для наполнения данными. Ну, чтобы в визуализации не унылые нули были, а какие-то данные, чтобы посмотреть и оценить "как примерно будет выглядеть экран".


Если по существу , то это Вы займитесь делом и без всяких понтов выложите тут код который будет тестом на случайность, вот и проверим пройдут ли их уже имеющиеся функции.
Зачем мне тратить время на доказательство того, что ГСЧ OSCAT непригоден? Если вы, закрыв глаза, верите в то, что OSCAT ГСЧ хороший, не вопрос. Продолжайте верить.

Вместо проверки OSCAT гораздо полезнее реализовать xorshift128plus, степень случайности которого уже многократно проверена.


Напомню, на плк обычно никто не занимаемся криптографией, для игр и тестирования достаточно имеющихся генераторов
Напомню, что я с самого начала привёл пример, как в Google Chrome обнаружили проблему в ГСЧ. И обнаружили её не на криптографии, а на прикладном уровне.
Поэтому, даже для целей тестирования, ГСЧ нужно использовать нормальный, а не абы какой.

capzap
15.07.2016, 11:14
допускаю, что касается ОЛ, Вы ни чего не пишите,потому что не пользуетесь, но здесь то как раз Ваш случай речь о плк. Я предусмотрительно написал во множественном числе,не оскатом единым. Вот предоставите инструмент,который пригоден для теста на случайность, тогда и заявляйте что все ничто по сравнению с Вашим методом, есть гарантия что в плк он будет работать лучше остальных?
кстати в самой оскат бибке редакция от девятого года, а н как на гитхабе от восьмого

IVM
15.07.2016, 11:16
capzap, твои позиции в этом вопросе выглядят слабо.

Владимир Ситников
15.07.2016, 11:53
допускаю, что касается ОЛ
Ну, ОЛ уж точно тут к теме не относится.


Вот предоставите инструмент,который пригоден для теста на случайность, тогда и заявляйте что все ничто по сравнению с Вашим методом, есть гарантия что в плк он будет работать лучше остальных?

Вас в Google забанили?
https://www.google.ru/search?q=Randomness+tests
https://en.wikipedia.org/wiki/Randomness_tests
http://stackoverflow.com/questions/2130621/how-to-test-a-random-generator

http://csrc.nist.gov/groups/ST/toolkit/rng/documentation_software.html <-- один инструмент
http://www.phy.duke.edu/~rgb/General/dieharder.php <-- второй

И т.п.

И, да, xorshift128plus это не мой метод. Этот метод изобрёл George Marsaglia.


есть гарантия что в плк он будет работать лучше остальных?
В xorshift128plus только операции сдвига, сложения и исключающего или. Очевидно, это будет работать лучше/быстрее, чем умножение и деление float'ов в OSCAT.
Да и степень случайности xorshift128plus хорошо изучена: алгоритм опубликован в соответствующих журналах, его рецензировали разбирающиеся люди.

Алгоритм из OSCAT вряд ли когда-нибудь изучался => там могут быть скрытые проблемы. И зачем тогда таким пользоваться?

В общем, если знаете ГСЧ для ПЛК, у которого есть ссылка на wikipedia или какой-нибудь тематический научный журнал -- оставьте ссылку.
А говорить "имеющихся генераторов" и не приводить ссылок это неконструктивно.

capzap
15.07.2016, 13:40
я лично Вам метод не приписывал,мне неудобно с телефона писать/копировать названия. Еще раз спрашиваю, есть гарантия что и предложенный Вами метод вообще будет работать в плк, сдвиги сдвигами только в нем используется восьмибайтное число, с которым плк не работает, а кастрированная версия может и не быть такой эффективной. И опять же, зачем Вы выкладывайте ссылки, приложения написаны для плк?

Владимир Ситников
15.07.2016, 14:17
Еще раз спрашиваю, есть гарантия что и предложенный Вами метод вообще будет работать в плк, сдвиги сдвигами только в нем используется восьмибайтное число, с которым плк не работает
Если LWORD не работает, то 8-и байтное можно изобразить из двух DWORD.
Неужели есть сомнения, что на ПЛК можно реализовать сложение двух восмибайтных чисел?

Разумеется, гарантия есть. О чём речь вообще?
Хоть школьным методом "в столбик", хоть ещё как.


а кастрированная версия может и не быть такой эффективной
Открываем исходную статью (http://www.jstatsoft.org/v08/i14/paper), и там есть варианты "без 8-и байтных чисел". Разумеется, у них меньше случайность, но повторюсь, там проверенные алгоритмы.



И опять же, зачем Вы выкладывайте ссылки, приложения написаны для плк?
Как зачем?
Вы хотели узнать "как проверяют последовательность на случайность" -- получите.
Не так сложно переписать oscat'овский ГСЧ на C и проверить случайность проверенными инструментами.
А ждать, что будет "написанный для ПЛК инструмент проверки случайности" это крайне странно. Не будет такого. На ПЛК случайность проверять крайне неудобно и долго.


Разумеется просто

capzap
15.07.2016, 14:18
Вы хотели узнать "как проверяют последовательность на случайность" -- получитенебыло такого вопроса, я заставляю Вас выложить здесь проект который можно будет считать тестом для различных генераторов

Владимир Ситников
15.07.2016, 14:39
небыло такого вопроса, я заставляю Вас выложить здесь проект который можно будет считать тестом для различных генераторов

Такой проект не имеет смысла.
Программы для тестирования генераторов должен делать тот, кто это делать умеет. Для С такие программы уже есть, их составляли разбирающиеся люди. Переписывать эти программы в "проект для ПЛК/ПР" смысла нет никакого.

capzap
15.07.2016, 14:44
Такой проект не имеет смысла.
Программы для тестирования генераторов должен делать тот, кто это делать умеет. Для С такие программы уже есть, их составляли разбирающиеся люди. Переписывать эти программы в "проект для ПЛК/ПР" смысла нет никакого.

тогда нечего и лезть в программирование плк с предложением использовать возможности Си.
Одно это чего стоит
Очевидно, это будет работать лучше/быстрее, чем умножение и деление float'ови за ним
Если LWORD не работает, то 8-и байтное можно изобразить из двух DWORD.
Неужели есть сомнения, что на ПЛК можно реализовать сложение двух восмибайтных чисела чем это быстрее флоатов

Владимир Ситников
15.07.2016, 14:48
тогда нечего и лезть в программирование плк с предложением использовать возможности Си.
Одно это чего стоити за нима чем это быстрее флоатов

По существу есть что?
Давайте по-хорошему договариваться, иначе придётся взывать к высшим силам.

capzap
15.07.2016, 14:57
я уже объяснял по существу, нечего предложить в качестве ГСЧ или теста этих самых генерторов для плк, не надо здесь высказывать свое мнение что лучше а что нет. Ваши все ссылки касаются программ для других ОС и никак не описаны для контроллеров, поэтому взывать меня гуглить, читать вики и т.п. да еще и на английском, не родном для меня языке, как бы я его не знал, тоже не стоит.
Так же не стоит высказывать такую мысль
А говорить "имеющихся генераторов" и не приводить ссылок это неконструктивно.мы находимся в теме, где свой генератор выложил Петров, значит по его книжкам учиться программированию можно, а генератор у него фуфло, оскатовская функция упоминалась мною, её тоже не сложно найти, могу предложить вариант с sha из еще одной библиотеки, хоть и не совсем число, но по ней я так понимаю тоже будете спорить, что она уже скомпрометирована и не достойна для работы

Владимир Ситников
15.07.2016, 15:36
я уже объяснял по существу, нечего предложить в качестве ГСЧ
По существу я предложил xorshift (xorshift128plus в частности).

А возражений/дополнений _по существу_ от вас как-то не видно (ну, окромя единственной фразы про sha).


не надо здесь высказывать свое мнение что лучше а что нет. Ваши все ссылки касаются программ для других ОС и никак не описаны для контроллеров, поэтому взывать меня гуглить, читать вики и т.п. да еще и на английском, не родном для меня языке, как бы я его не знал, тоже не стоит.
1) Я привожу ссылки, которые проверены научным сообществом. Это не только моё мнение, а мнение ещё очень большого количества людей. В том числе тех, кто получал учёные степени в области криптографии.
2) Я привожу ссылки на _математические алгоритмы_. Если считаете, что "на ПЛК свои законы математики", что ж, продолжайте так считать. Но пора бы вам уже признаться, что не разбираетесь в ГСЧ/математике.


я уже объяснял по существу, нечего предложить в качестве ГСЧ или теста этих самых генерторов для плк, не надо здесь высказывать свое мнение что лучше а что нет. Ваши все ссылки касаются программ для других ОС и никак не описаны для контроллеров, поэтому взывать меня гуглить, читать вики и т.п. да еще и на английском, не родном для меня языке, как бы я его не знал, тоже не стоит.
Если вы не читаете по английски, не надо другим указывать "тогда нечего и лезть в программирование плк". Я не занимаюсь рекомендациями "какие концевики ставить" и "какую марку кабеля выбирать". Нет у меня с концевиками опыта. А с математикой опыт у меня есть. И математика что на бумаге, что на ПЛК одна и та же.

Есть признанные в мире генераторы, и признанные в научном сообществе программы/алгоритмы для проверки случайности.
Если они именно вас не устраивают, не вопрос, ваше право. Но указывать другим "нечего и лезть в программирование плк" это невежество.


мы находимся в теме, где свой генератор выложил Петров
Это генератор, который "каждые секунд 20 повторение идет"? Да, очень ценный генератор (если не понятно, это сарказм).


значит по его книжкам учиться программированию можно
Не читал, но его книги никак к теме ГСЧ не относятся. Или есть книга/статья про ГСЧ?


оскатовская функция упоминалась мною, её тоже не сложно найти
Я нашёл парочку OSCAT ГСЧ, и обе оказались без ссылок на проверенные источники. Т.е. обе палёные.


могу предложить вариант с sha из еще одной библиотеки, хоть и не совсем число, но по ней я так понимаю тоже будете спорить, что она уже скомпрометирована и не достойна для работы
С точки зрения случайности, SHA может быть норм.
Даже у SHA1 будет достаточная случайность. Но реализовать SHA на КДС будет сложнее, чем xorshift. Да и скорость работы SHA на ПЛК тоже под вопросом.

capzap
15.07.2016, 15:53
По существу я предложил xorshift (xorshift128plus в частности).

реализацию для КДС приложите, тогда я приму это за существенный вклад
далее бла,бла про научное сообщество
затем
Это генератор, который "каждые секунд 20 повторение идет"?это показал восхваляемый Вами тест?

Владимир Ситников
15.07.2016, 16:27
реализацию для КДС приложите, тогда я приму это за существенный вклад
далее бла,бла про научное сообщество

Может сделаю реализацию для КДС, а может ещё кто-то сделает.

Ещё раз: признайтесь, что не разбираетесь в ГСЧ и дело с концом.

Попробую сравнить ваше "реализацию для КДС приложите, тогда я приму это за существенный вклад" с АСУТП областью: "хватит восхвалять модель концевиков, вот поставьте их на моём объекте, тогда приму за существенный вклад".

Если вы не понимаете, что указание рабочего алгоритма это половина решения задачи, что ж, оставайтесь в этом неведении.

Приведу для вас выдержку из классики:


Невежество -- отсутствие познаний, некультурность, отсталость

Невежество -- отсутствие знаний, некультурность; невежливое поведение



затемэто показал восхваляемый Вами тест?

Про 20 секунд в начале треда было:

Игорь , ваш генератор работает прикольно , но каждые секунд 20 повторение идет - хорошо видно если передавать выход в панель и строить график ....

capzap
15.07.2016, 16:35
Может сделаю реализацию для КДС, а может ещё кто-то сделает.

Ещё раз: признайтесь, что не разбираетесь в ГСЧ и дело с концом.

Попробую сравнить ваше "реализацию для КДС приложите, тогда я приму это за существенный вклад" с АСУТП областью: "хватит восхвалять модель концевиков, вот поставьте их на моём объекте, тогда приму за существенный вклад".

Если вы не понимаете, что указание рабочего алгоритма это половина решения задачи, что ж, оставайтесь в этом неведении.

Приведу для вас выдержку из классики:







Про 20 секунд в начале треда было:

Вы с чего решили что для меня являетесь авторитетом, сборщиком информации не более, поэтому Ваш ярлык о моем невежестве субъективно и только в Вашем мозгу

возвращаясь к 20 секундам, повторяю это и есть Ваш тест, Вы долго и нудно эго тестировали сами лично и пришли к такому же мнению?

вут
15.07.2016, 16:41
насколько точно идет повторение в Генераторе Игоря - сложно сказать по графикам - не тот метод , возможно повторение и не абсолютное . и еще - у меня генерация числа USINT - естественно вероятность очень большая .... для работы как имитатор - всегда использую , много лет - полностью устраивает .
а в тему отписался , т.к. очередной раз его использовал , потом попал на форум в эту ветку , где давным-давно его скачал , и увидел знакомые сообщения , вот и написал ...
к тому же только пару дней назад заметил в нем повторяемость )))

rovki
15.07.2016, 18:10
Я лично использую RND макрос от AI, наблюдал 5минут, циклов не звметил :cool:

Владимир Ситников
15.07.2016, 19:28
Я лично использую RND макрос от AI, наблюдал 5минут, циклов не звметил :cool:

Дайте ссылку на проект / картинку с макросом.
Помню было обсуждение где "первые 100" значений через стек сохраняли, но найти по словам random/радном и т.п. не получается.
А у AI! слишком короткий ник -- форум по таким не ищет.

Вольд
15.07.2016, 20:27
capzap, кончай этот нудный спор. vladimirisitnikov в математике явно лучше тебя сечет. Это мое субъективное мнение, но оно очень близко к истине. ;)

rovki
15.07.2016, 20:39
Дайте ссылку на проект / картинку с макросом.

Не дам ,википедия в помощь .

rovki
15.07.2016, 20:40
capzap, кончай этот нудный спор. vladimirisitnikov в математике лучше тебя сечет. Это мое субъективное мнение, но оно очень близко к истине. ;)
Вот capzap и говорит ,что товарищ форум попутал

Вольд
15.07.2016, 20:41
Я лично использую RND макрос от AI, наблюдал 5минут, циклов не звметил :cool:

Вы серьезно думаете, что на глаз можно оценить качество ГСЧ ? :D

Вольд
15.07.2016, 20:42
Вот capzap и говорит ,что товарищ форум попутал

Такие как vladimirisitnikov лишними нигде не бывают. Математика - наука всех наук. Без нее никуда.

rovki
15.07.2016, 20:47
Я не заморачиваюсь с этим, поседел полчаса и мне хватило -увидел что цикла нет ,а в словоблудии больше не участвую .Кому надо пусть проверяет ,я лично AI доверяю ,он такой макрос логарифма сделал реально,что многим теоретикам не досуг .Алес .THE END.

rovki
15.07.2016, 20:49
Такие как vladimirisitnikov лишними нигде не бывают. Математика - наука всех наук. Без нее никуда.
Тогда пусть и бодается с равными http://www.cyberforum.ru/mathematics/.

Вольд
15.07.2016, 20:49
Я не заморачиваюсь с этим, поседел полчаса и мне хватило -увидел что цикла нет

Гениальное заявление.

Вольд
15.07.2016, 20:56
Тогда пусть и бодается с равными .

Бодаться все время норовит capzap, для него vladimirisitnikov как красная тряпка для быка. ;)

rovki
15.07.2016, 20:57
Гениальное заявление.
Я знаю ! Для моих задач хватало .А когда нет ,то ставил 2-4 последовательно таких генератора и получал" белый шум"....Напомню ,что данный генератор не просто выдает числа ,но можно менять и диапазон этих чисел и когда их соединяешь последовательно ,то такая свистопляска начинается ,что в глазах рябит ...
Вот автор подтянется ,тогда и обьяснит что по чем.

rovki
15.07.2016, 20:59
Бодаться все время норовит capzap, для него vladimirisitnikov как красная тряпка для быка. ;)
И не только для него!Зарвавшихся нужно ставить на место !

Вольд
15.07.2016, 21:02
И не только для него!Зарвавшихся нужно ставить на место !

Ха-ха-ха. ;)

rovki
15.07.2016, 21:05
Ха-ха-ха. ;)
Очень многозначительно ;) Я имел в виду почтительное отношение к старшим .

capzap
15.07.2016, 21:17
Бодаться все время норовит capzap, для него vladimirisitnikov как красная тряпка для быка. ;)

я понимаю Ваше восхищение Ситниковым, но ко мне какие претензии, я где упоминул что в математике сильнее. Если мне вернутся, в тот возраст, каков сейчас у Ситникова, вот тогда бы и можно было пискомерством занятся. Я даже не говорил что расчет научного сообщества плох, мне требуется доказательство что реализация того или иного метода превосходит остальные, тогда активно начнем им пользоваться, проекта нет значит я и дальше буду пользоваться генератором от оскат или ваговским,они есть и вполне устраивают, собственно как и других программистов плк, потому что не созданное в плк не работает

Вольд
15.07.2016, 22:00
я понимаю Ваше восхищение Ситниковым, но ко мне какие претензии, я где упомянул что в математике сильнее.

Никаких претензий. Просто констатация факта.

Вольд
15.07.2016, 22:03
Очень многозначительно ;) Я имел в виду почтительное отношение к старшим .

Правильно. Молодым везде у нас дорога, старикам везде у нас почет.

rovki
15.07.2016, 22:27
Фактом так же является то ,что я больше вешу и что .Что об этом говорить и мериться.Может и это обсудим на нашем форуме .Вывод -не все факты нужно приводить на специализированном форуме .Знаешь лучшею реализацию -приведи пример .Именно так мы состязались с AI ,учась друг у друга ,а он на голову выше меня в математике ,но он делал а не строчил ссылки из википедии!Вот это и не нравится многим .Для Владимира дать ссылку на метод это уже пол дела ,а для меня это не о чем ,я и сам гуглом пользоваться умею .

Владимир Ситников
15.07.2016, 23:17
не строчил ссылки из википедии! Вот это и не нравится многим
Если не понимаете википедию, то подождите того, кто понимает.

AI!, например, понимает доводы, в отличие от некоторых:

Убедили.
Новая версия, на этот раз только натуральный логарифм (как самый востребованный)
И точность, с ваших слов, почти до 1e-7

capzap
15.07.2016, 23:26
Никаких претензий. Просто констатация факта.
констатация какого факта, давайте уточним. В чем сила, Вольд? То что он знает об одном из решений генератора СЧ, так во первых применительно к плк это не о чем пока не говорит, его ни кто не воспроизвел и не показал что он хотя бы работает, не говоря уже о верховенстве, во вторых авторство не его и он даже его не разбирал скорее всего, раз выкладывал исходник на Си, да еще и для 64-битных чисел, в третих признал что идея с sha более предпочтительнее, а это получается моих знаний больше чем у него
Вся его аргументация последние пару страниц сводится к переходу на личности
Я тоже в таком случае могу претензии предъявить в его невежестве, если он даже адекватную ассоциацию не в состоянии предложить по поводу асутп, она должна выглядеть следующим образом: у меня концевики и тут появляется Ситников и говорит что мировое сообщество пользуется фотоэлементтами, а я ему с ухмылкой говорю, вот принеси, поставь мне и я поверю что они круче. Подобная версия ближе будет к нашей с ним дискуссии.

rovki
16.07.2016, 07:32
Если не понимаете википедию, то подождите того, кто понимает.

AI!, например, понимает доводы, в отличие от некоторых:
Ждать не люблю,особенно википедистов. Вам и говорят ,что вы неплохой поисковик и тестер в случае с ПИД и логарифмом ,конкретно .А вот как разработчик АСУТП ,то судить по нечему ...Поэтому не надо мериться с опытными товарищами ,выставляя их в непригодном свете и получая от этого удовольствие .

Владимир Ситников
16.07.2016, 10:17
поисковик и тестер в случае с ПИД и логарифмом ,конкретно .А вот как разработчик АСУТП ,то судить по нечему
Посмотрите про логарифм ещё раз: я предложил алгоритм, и убедил AI!, что он действительно быстрее/точнее.


Касательно "генератора Петрова" x = x*170 - 251 *(x * 170/251).
Он проходит один единственный тест BlockFrequency
Остальные -- заваливает:
Frequency
CumulativeSums
Runs
LongestRun
Rank
FFT
NonOverlappingTemplate
OverlappingTemplate
Universal
ApproximateEntropy
Serial
LinearComplexity.

Например, при генерации 10'000'000 бит получается 5055000 нулей и 4945000 единиц. Т.е. явный перекос в нули.

Владимир Ситников
16.07.2016, 11:12
RDM из OSCAT'а на длине 1'000'000 бит

Проходит 3 теста:
Rank
FFT
LinearComplexity

Не проходит:
Frequency (проходит 0 из 10)
BlockFrequency (проходит 3 раза из 10)
CumulativeSums (0 из 10)
Runs (0 из 10)
LongestRun (проходит 9 раз из 10)
NonOverlappingTemplate
OverlappingTemplate (7 из 10)
Universal (9 из 10)
ApproximateEntropy (0 из 10)
Serial




// Переписано отсюда: https://github.com/simsum/oscat/blob/master/RDM.EXP

unsigned int bit_count(unsigned int n) {
unsigned int c;
for (c=0;n>0;n=n&(n-1)) c++;
return c;
}

unsigned int rol(unsigned int x, unsigned int n){
return (x<<n)|(x>>(32-n));
}

float rdm(float last) {
float rdm;

tn = T_PLC_MS;
tc = bit_count(tn);
tn |= (tn&(1<<(2)))<<(31-2);
tn |= (tn&(1<<(5)))<<(30-5);
tn |= (tn&(1<<(4)))<<(29-4);
tn |= (tn&(1<<(1)))<<(28-1);
tn |= (tn&(1<<(0)))<<(27-0);
tn |= (tn&(1<<(7)))<<(26-7);
tn |= (tn&(1<<(6)))<<(25-6);
tn |= (tn&(1<<(3)))<<(24-3);
tn = rol(tn, bit_count(tn)) | 0x80000001;
tn = tn % 71474513 + (tc + 77);
rdm = ((float)tn) / 10000000.0 * (E - (last<0.0 ? 0 : (last>1.0?1.0:last) ));
rdm = rdm - floor(rdm);
T_PLC_MS+=10;
return rdm;
}

Вольд
16.07.2016, 11:19
В пору модераторам заводить на форуме рефери в ринге. ;)

Кончайте собачиться.

Считаю появление на форуме vladimirisitnikovа благом для всех здравомыслящих. Человек умен, хорошо образован и может принести не малую пользу. К сожалению не все это понимают.

Так и хочется процитировать: "Друзья мои, прекрасен наш союз !".

Владимир Ситников
16.07.2016, 11:44
Вот основа алгоритма:
uint NextUInt()
{
uint t= (x^(x<<11));
x=y;
y=z;
z=w;
return (w= (w^(w>>19))^(t^(t>>8)));
}

перед использованием необходимо инициализировать переменные t,x,y,z,w. Это можно сделать по часам, анализируя данные в файлах - к примеру Log.txt и debug.txt или просто храня посл. значения в retain.

Алгоритм считается достаточно хорошим с периодом повторяемости 2^50 и высокой скоростью.

После пристального взгляда, оказывается, что это и есть xorshift128 (1 в 1 как на немецкой wikipedia: https://de.wikipedia.org/wiki/Xorshift#Initialisierung)
Но, согласно wikipedia, период не 250, а 2128 − 1.

Прогнал этот алгоритм через nist -- он проходит все тесты (10 из 10 на длине 1'000'000 бит).
Изредка не проходят тесты NonOverlappingTemplate (они выполняются раз 500 и не проходят около 10-и из них)


В общем, шах и мат. Ни "генератор Петрова", "ни генератор OSCAT" не выдерживают тестов.

xorshift128 тривиально реализуется на ПЛК/ПР (и там и там есть 32bit unsigned int),


Вся его аргументация последние пару страниц сводится к переходу на личности
capzap, я требую извинений.
Или хотя бы признания, что были неправы.

rovki
16.07.2016, 11:44
Считаю появление на форуме vladimirisitnikovа благом для всех здравомыслящих. Согласен.
В природе все имеет смысл и благо, даже мухи ...

capzap
16.07.2016, 11:45
RDM из OSCAT'а на длине 1'000'000 бит

зачем эта строчка T_PLC_MS+=10; ? Это просто какая то переменная?
в КДС это вызов функции времени, вместо неё в этом коде должно стоять System.currentTimeMillis()

capzap
16.07.2016, 11:47
После пристального взгляда, оказывается, что это и есть xorshift128 (1 в 1 как на немецкой wikipedia: https://de.wikipedia.org/wiki/Xorshift#Initialisierung)
Прогнал этот алгоритм через nist -- он проходит все тесты (10 из 10 на длине 1'000'000 бит).
Изредка не проходят тесты NonOverlappingTemplate (они выполняются раз 500 и не проходят около 10-и из них)


В общем, шах и мат. Ни "генератор Петрова", "ни генератор OSCAT" не выдерживают тестов.

xorshift128 тривиально реализуется на ПЛК/ПР (и там и там есть 32bit unsigned int),


capzap, я требую извинений.
Или хотя бы признания, что были неправы.

Хм, чтоб появился хоть какой то результат, пришлось давить на больное, ну чтож извините

Владимир Ситников
16.07.2016, 11:48
зачем эта строчка T_PLC_MS+=10; ? Это просто какая то переменная?
в КДС это вызов функции времени, вместо неё в этом коде должно стоять System.currentTimeMillis()

Ну, да, это "получение текущего времени".
У ПЛК цикл -- и можно считать, что "цикл более-менее стабилен".
Мощность компьютера такова, что он все 1'000'000 может за пару миллисекунд сгенерировать.

Я пробовал и T_PLC_MS+=1, и T_PLC_MS+=10 --результат не меняется. Те же самые тесты не проходят.

rovki
16.07.2016, 11:48
xorshift128 тривиально реализуется на ПЛК/ПР (и там и там есть 32bit unsigned int),


Так давно бы реализовали и спора бы не было и получили спасибо от всех ,по такому пути и идти надо .

Владимир Ситников
16.07.2016, 11:52
Хм, чтоб появился хоть какой то результат, пришлось давить на больное, ну чтож извините

capzap, вы не правы. Доказывать очевидные вещи мало кто будет.
Вы ещё давите, чтобы я доказал, что 2*2=4.

У меня спортивный интерес был: способны ли вы признать неправоту, без оправданий.

Владимир Ситников
16.07.2016, 11:59
Так давно бы реализовали и спора бы не было и получили спасибо от всех ,по такому пути и идти надо .

Повторю вопрос: для ПР какой алгоритм _уже_ реализован?
Помните я его задавал?
Не поленитесь и процитируйте.

Может, там уже xorshift128?


И, да: по-моему, учить принципам важнее, чем давать частные решения.
Например, Вольд (http://www.owen.ru/forum/showthread.php?t=20605&page=4&p=190250&viewfull=1#post190250) и Алексей Геннадьевич (http://www.owen.ru/forum/showthread.php?t=20605&page=5&p=195941&viewfull=1#post195941) запросто показывают не конкретный ответ, а направление/литературу. И это правильно.

capzap
16.07.2016, 12:17
capzap, вы не правы. Доказывать очевидные вещи мало кто будет.
Вы ещё давите, чтобы я доказал, что 2*2=4.

У меня спортивный интерес был: способны ли вы признать неправоту, без оправданий.
о какой правоте идет речь, я требовал вначале тест для среды КДС, затем уже хотя бы решение этого метода для КДС, Вы целый день упирались. Малого того и даже сейчас в тесте, Вы не честны до конца, намеренно или нет, уж не знаю "уничтожили" главную идею генератора зависимость от времени, каким то нелепым прибавлением десятки.

rovki
16.07.2016, 12:19
Ну на счет Алексея вы загнули ,когда речь о реализации он реализует ,когда вопрос общий ,то и ответ соответствующий .
Я же дал скрин макроса ,чего более то,откройте рисунок ? там 4 элемента ...

rovki
16.07.2016, 12:50
Принцип простой -генерация псевдослучайного числа в пределах заданного диапазона ,но не более 32 бит в течении 1 цикла вычисления(для ПР) .Затем стробируем данную последовательность во времени с переменным периодом формирующимся опять же случайным образом.Получаем последовательность случайных чисел с еще большим разбросом ,напоминающий "белый шум"... с равноверояным распределением по времени ,если нужно ..

Владимир Ситников
16.07.2016, 14:04
Принцип простой -генерация псевдослучайного числа в пределах заданного диапазона ,но не более 32 бит в течении 1 цикла вычисления(для ПР) .Затем стробируем данную последовательность во времени с переменным периодом формирующимся опять же случайным образом.Получаем последовательность случайных чисел с еще большим разбросом ,напоминающий "белый шум"... с равноверояным распределением по времени ,если нужно ..

О, а я там только экран каскады видел.
Чему равна константа?

Про белый шум, скорее, это бла-бла, а не белый шум.
Покажите макрос своего "белого шума", посмотрим сколько тестов он пройдет

rovki
16.07.2016, 14:29
О, а я там только экран каскады видел.
Чему равна константа? .

Про белый шум, скорее, это бла-бла, а не белый шум.
Покажите макрос своего "белого шума", посмотрим сколько тестов он пройдет
Константа это максимальное число -диапазон чисел от 0 до N (N<2 в степени 32 минус1),неужели так трудно понять ?Вы сначала сам макрос RND (от AI)изучите ,а уж потом заявления будите делать ,а не наоборот ,как всегда .
То есть макрос формирует пседо случайное число в заданном диапазоне в каждом цикле ПР,но максимальная верхняя граница не более чем представление в ПР(32 разряда).в виду ограниченно диапазона естественно ,что во времени могут попадаться одинаковые цепочки ,например 2,11 ,32 ,но при удлинении цепи анализа эти повторения устремятся к нулю ..Осталось понять (мне) как долго ждать ,что бы вся цепь чисел начала заново повторятся ..Тут мне силенок не хватает ..Я лишь констатирую то что наблюдаю ,а наблюдать вечность я не могу .Вот вы с вашим математическим складом ума и скажите ,сколько мне ждать что бы увидеть две одинаковые цепи(полные) случайных чисел в макросе от AI.
Но так как это чисто вычислительный метод в макросе ,который формирует одинаковую последовательность чисел при включении ПР ,то для перестраховки я и ввел еще временной фактор ,а так же последовательное соединение макросов .

Владимир Ситников
16.07.2016, 15:40
Константа это максимальное число -диапазон чисел от 0 до N (N<2 в степени 32 минус1),неужели так трудно понять ?
Вы не зазнавайтесь, а отвечайте на поставленный вопрос. Если не понимаете, что для ГСЧ константы крайне важны, то поймите же это наконец.

Нашёл макрос тут: http://www.owen.ru/forum/showthread.php?t=7023&page=295&p=98377&viewfull=1#post98377
Посмотрел константу -- она равна 4294967291
В двоичном виде это 11111111111111111111111111111011, в hex это fffffffb. Т.е. константа на 4 меньше, чем 232-1.

Прогнал алгоритм через nist -- тест показал, что алгоритм плохой.

На С он имеет вид
unsigned int res;
res = ((unsigned int)(res * 4294967291)) + 1;

"mod(...)" я не добавлял -- считаем, что генерируется число от минимально возможного, до максимально возможного.

В итоге (без стробирования, просто анализ последовательных значений):
Frequency -- FAIL (0s = 515754 1s = 484246)
CumulativeSums -- FAIL
Runs -- FAIL
LongestRun -- FAIL (3 of 10 pass)
Rank -- FAIL
FFT -- FAIL
NonOverlappingTemplate -- FAIL
OverlappingTemplate -- FAIL
ApproximateEntropy -- FAIL


BlockFrequency -- PASS
Universal -- PASS
Serial -- PASS
LinearComplexity -- PASS



Вы сначала сам макрос RND (от AI)изучите ,а уж потом заявления будите делать ,а не наоборот ,как всегда .
Поймите же наконец, невозможно сделать нормальный ГСЧ на одном блоке умножения и одном сложения. Так не работает.
Я в очередной раз оказался прав, что упомянутый "генератор AI" -- плохой генератор.

И это было очевидно с самого начала.



как долго ждать ,что бы вся цепь чисел начала заново повторятся
Это не такой важный критерий.
Например, у генератора x = x+1 "вся цепь начнёт повторяться аж через ~ 232 значений. Но "хорошим" это данный генератор никак не делает.


для перестраховки я и ввел еще временной фактор ,а так же последовательное соединение макросов.

С временным фактором уж как повезёт. Или как "не повезёт". Можно "надеяться и верить", что "временной фактор уж точно сделает последовательность случайной". А можно с самого начала использовать алгоритм, который даже без временного фактора возвращает хорошие значения.

rovki
16.07.2016, 15:55
В электроники именно на временном факторе и делали ГСЧ ,ввиду флуктуации времени задержки элемента и питания .
Опыт не чистый ,поставьте все как в макросе (MODE) именно остаток от деления имеет значение ,как и делимое .Именно остаток от деления является случайным числом!А не результат умножения .В двух соснах заблудились .
Ну и как всегда -своего лучшего проекта (реализации) нет для ПР ,только критика чужих вариантов .
Вы не зазнавайтесь ,а отвечайте на поставленный вопрос - " Цитата Сообщение от rovki Посмотреть сообщение
как долго ждать ,что бы вся цепь чисел начала заново повторятся" если цикл ПР-1мс в макросе от AI?(минута ,час ,год..),а вы пишите на своем птичьем языке .

capzap
16.07.2016, 16:00
о какой правоте идет речь, я требовал вначале тест для среды КДС, затем уже хотя бы решение этого метода для КДС, Вы целый день упирались. Малого того и даже сейчас в тесте, Вы не честны до конца, намеренно или нет, уж не знаю "уничтожили" главную идею генератора зависимость от времени, каким то нелепым прибавлением десятки.

ну раз меня начали игнорить отвечу сам себе с наглядными картинками, случай который тестил Ситников имеет характерный след повтора, и реальный оскатовский метод имеет более менее похожий отпечаток белого шума. Естественно такой подход не пройдет ни один тест

подольше генерировал различные способы, вообщем нет разницы между тем что используется в оскат и метод взятый у Филоненко

Владимир Ситников
16.07.2016, 16:15
В электроники именно на временном факторе и делали ГСЧ ,ввиду флуктуации времени задержки элемента и питания
rovki, во-первых, признайте же, наконец, что были неправы с константой.
Во-вторых, аппаратные ГСЧ обычно НЕ на временных задержках делают (https://ru.wikipedia.org/wiki/Аппаратный_генератор_случайных_чисел).


Ну и как всегда -своего лучшего проекта (реализации) нет для ПР ,только критика чужих вариантов
В третьих, сколько раз можно повторять: по моим предложениям и AI и Алексей проекты дорабатывали.
Поэтому, повторю ещё раз: без критики нормальные проекты не делаются. Без критики только собаки на бизнес-джетах летают.


Опыт не чистый ,поставьте все как в макросе (MODE) именно остаток от деления имеет значение ,как и делимое .
И на что делить предлагаете?
Забавы ради, попробовал 1024 (ну, чтобы получались числа от 0 до 1023 включительно).
Такой генератор завалил вообще все тесты, кроме одного. Тест Universal каким-то образом этот генератор прошёл.


как долго ждать ,что бы вся цепь чисел начала заново повторятся" если цикл ПР-1мс в макросе от AI?(минута ,час ,год..),а вы пишите на своем птичьем языке .
На этот вопрос я уже ответил, и ответ такой: вопрос не имеет смысла. Да, период повторения важен, но это далеко НЕ самая важная характеристика.
Если честно, 1) период повторения может зависеть от выбранного mod 2) ввиду того, что ГСЧ плохой, мне лень думать над периодом.

Владимир Ситников
16.07.2016, 16:30
о какой правоте идет речь

Тут вы не правы:

Вся его аргументация последние пару страниц сводится к переходу на личности

И тут:

поэтому Ваш ярлык о моем невежестве субъективно и только в Вашем мозгу

Ярлык о невежестве не только субъективен, но и объективен.

И тут снова неправы:

не надо здесь высказывать свое мнение что лучше а что нет. Ваши все ссылки касаются программ для других ОС и никак не описаны для контроллеров
Мои ссылка касаются законов математики, а она одинаково работает как на "других ОС", так и на ПЛК.

И тут неправы:

я вобщем то не сомневался что Вы начнете "пальцы гнуть", что в АСУТП всё плохо

capzap
16.07.2016, 16:35
Тут вы не правы:
ок, услышал, а мне вот этого хватает :)
А факт того, что они используют "умножение на e и на pi" намекает на то, что это "наколеночная реализация" и вот нежданчик
Если не понимаете, что для ГСЧ константы крайне важны, то поймите же это наконец

Владимир Ситников
16.07.2016, 16:44
ну раз меня начали игнорить отвечу сам себе с наглядными картинками, случай который тестил Ситников имеет характерный след повтора, и реальный оскатовский метод имеет более менее похожий отпечаток белого шума. Естественно такой подход не пройдет ни один тест

capzap, я гляжу, вы большой мастак верить в карго-культ (https://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D1%80%D0%B3%D0%BE-%D0%BA%D1%83%D0%BB%D1%8C%D1%82). Откуда уверенность, что в ПЛК T_PLS_MS будет хорошо фонить? Это где-то в документации гарантировано? Поясню: запросто может оказаться, что T_PLS_MS возвращает одно и то же значение, или только значения кратные 16 (на windows xp, например, так) или ещё как.

Я проверял простые случаи: интервал цикла == 10мс, вызов rdm 1 раз за цикл. Поэтому и +10.
Если уж так неймётся, проверил такой вариант:


tn = clock() * 1000.0/ CLOCKS_PER_SEC;
tc = bit_count(tn);
tn |= (tn&(1<<(2)))<<(31-2);
tn |= (tn&(1<<(5)))<<(30-5);
tn |= (tn&(1<<(4)))<<(29-4);
tn |= (tn&(1<<(1)))<<(28-1);
tn |= (tn&(1<<(0)))<<(27-0);
tn |= (tn&(1<<(7)))<<(26-7);
tn |= (tn&(1<<(6)))<<(25-6);
tn |= (tn&(1<<(3)))<<(24-3);
tn = rol(tn, bit_count(tn)) | 0x80000001;
tn = tn % 71474513 + (tc + 77);
rdm = ((float)tn) / 10000000.0 * (E - (last<0.0 ? 0 : (last>1.0?1.0:last) ));
rdm = rdm - floor(rdm);


Такая вариация завалила вообще все тесты.



ЗЫ добавил метод xorshift в исполнении Филоненко, даже на такой малой области картинки встречаются сгустки одинаковых значений, субъективно поболее чем в оскатовской
1) Какие начальные значения для x, y, z, w использовали. Правильные?
2) Вы сделайте картинку для SecureRandom -- посмотрите как "должна" выглядеть картинка хорошего генератора. Возможно, у xorshift как раз и получается правильная.

Владимир Ситников
16.07.2016, 16:46
ок, услышал, а мне вот этого хватает :) и вот нежданчик

Расшифруйте. Не понимаю что хотите сказать этими двумя цитатами.

rovki
16.07.2016, 16:47
rovki, во-первых, признайте же, наконец, что были неправы с константой.
Во-вторых, аппаратные ГСЧ обычно НЕ на временных задержках делают (https://ru.wikipedia.org/wiki/Аппаратный_генератор_случайных_чисел).
.
Вы правда не врубаетесь или прикидываетесь ? источники энтропии это и есть время распростронения сигнала от входа до выхода элемента ,которое зависит даже от погоды -про эту задержку сигнала я и говорил .Я такие генераторы еще в 6 классе паял и использовал в игрушках .Есть и другие реализации аппаратные -два генератора с очень близкой частотой ...но опять же и они "используют " теже источники энтропии .
Про константу - я не переводил ее ,пусть будет другой ,мне все равно ,она была написана в проекте ...не мной ..

Владимир Ситников
16.07.2016, 16:52
Вы правда не врубаетесь или прикидываетесь ?

Во-первых, признайте же, наконец, что были неправы с константой.
Во-вторых, энтропию обычно получают из теплового/дробового шума.

capzap
16.07.2016, 16:53
не вижу разницы и с SecureRandom , шум как шум, чего не скажешь о первой картинке, инициализацию кода Владислава делал через нанотайм

rovki
16.07.2016, 17:13
Во-первых, признайте же, наконец, что были неправы с константой.
Во-вторых, энтропию обычно получают из теплового/дробового шума.
ЧТо докапались до константы ,а на мне не уперлась ,как вам посчитать время .Что спрашивать ,можно и посмотреть в макросе ...я что на память должен ее помнить ,на память отнял (под давлением ;) и ведать ошибся ,а что с другой константой работать не будет?..
Про энтропию и как ее "получают" да же не заикайтесь ,не опускайте себя в глазах Вольда ,википедия не поможет раз в школе и вузе полупроводники не учили и своими ручками не потрогали.

capzap
16.07.2016, 17:21
Откуда уверенность, что в ПЛК T_PLS_MS будет хорошо фонить? Это где-то в документации гарантировано?

это функция менее бесполезна если генератор потребуется для не однократного применения,например набивка массива, чем значение температуры. которое уж точно обновляется один раз в цикл плк. Это также коснется и метода Филоненко, если производить инициализацию всех переменных в разные циклы, то это уже будет не функция а ФБ, т.ч. математика математикой, но плк это особое устройство со своими ограничениями и не всё тут будет работать как на ПК

Владимир Ситников
16.07.2016, 18:05
ЧТо докапались до константы ,а на мне не уперлась ,как вам посчитать время .Что спрашивать ,можно и посмотреть в макросе ...я что на память должен ее помнить ,на память отнял (под давлением ;) и ведать ошибся ,а что с другой константой работать не будет?
Сразу бы и сказали, что не помните.
Вместо этого начинаете важничать "ссылку не дам; 2 в степени 32 минус1),неужели так трудно понять ?".



Дайте ссылку на проект / картинку с макросомНе дам ,википедия в помощь .

Константа это максимальное число -диапазон чисел от 0 до N (N<2 в степени 32 минус1),неужели так трудно понять ?

От констант зависит всё. Прогнал генератор с константой 232-1 и остатком от деления на 1024 -- там вообще беда. 0s = 950000 1s = 50000. Разумеется, ни один тест не проходит когда генератор генерирует ноликов в 19 раз больше, чем нулей.


Про энтропию и как ее "получают" да же не заикайтесь ,не опускайте себя в глазах Вольда ,википедия не поможет раз в школе и вузе полупроводники не учили и своими ручками не потрогали.
Во-первых, в wikipedia это есть. Я ссылку привёл. Если по-русски не читаете, то оставайтесь в своём мирке.
Во-вторых, не пойму каким образом полупроводники в школе относятся к теме ГСЧ. Что в школе? Максимум, Сусанина изучают, который по факту, полупроводник.
В-третьих, в вузе полупроводники учил и на лабораторных работах по радиотехнике/электронным приборам ручками трогал. Как-никак Факультет Радиотехники и Кибернетики.
В четвёртых, ну вы поняли, признайте же, наконец, что были неправы с константой.

Владимир Ситников
16.07.2016, 18:17
это функция менее бесполезна если генератор потребуется для не однократного применения,например набивка массива, чем значение температуры. которое уж точно обновляется один раз в цикл плк. Это также коснется и метода Филоненко, если производить инициализацию всех переменных в разные циклы, то это уже будет не функция а ФБ, т.ч. математика математикой, но плк это особое устройство со своими ограничениями и не всё тут будет работать как на ПК

Кончайте демагогию.
Я тут вижу 4 варианта:
1) Возможно, вы пытаетесь оправдаться. Мол, "capzap'у хватит и той случайности, которую выдаёт OSCAT". Флаг вам в руки!
2) Возможно, вы пытаетесь "доказать", что на ПЛК законы математики не действуют. Это бред, но вдруг.
3) Возможно, вы пытаетесь доказать, что метод xorshift128 плохой. Это тоже бред, ведь уже доказано выше, что метод хороший.
4) Возможно, вы пытаетесь доказать, что на ПЛК крайне сложно (или вообще невозможно!) реализовать метод xorshift128 в чистом виде. Это тоже бред, т.к. DWORD есть, операция XOR есть, операции SHL и SHR тоже есть. 4 retain переменные (как завещал Владислав) тоже можно позволить.



Есть проверенные методы. xorshift128 проверен.
Этот самый xorshift128 можно вызывать столько раз за такт, сколько нужно.
Если в разных запусках использовать одни и те же инициализирующие значения, то псевдослучайные последовательности будут повторяться. Это полезно для воспроизводимости тестов.


математика математикой, но плк это особое устройство
Математика действует везде. Точка. То, что на ПЛК это будет ФБ или функция уже совершенно не важно. Математические свойства от этого не меняются.

В общем, я вижу следующий вариант выхода: вы признаёте, что были неправы, мы пожимаем руки и все живут долго и счастливо. :D

rovki
16.07.2016, 18:41
А че тут признавать ,я ж сказал -смотри в макросе ...Ответь те на поставленные мной вопросы ,а не на те которые вам удобно и ответьте по простому ,в той манере которой просил ,а не на известном мне языке .Тогда и поговорим о признании ошибок ,тех которых не совершал -мы обсуждаем макрос AI,который меня пока устраивал .

capzap
16.07.2016, 18:52
Кончайте демагогию.
Я тут вижу 4 варианта:
1) Возможно, вы пытаетесь оправдаться. Мол, "capzap'у хватит и той случайности, которую выдаёт OSCAT". Флаг вам в руки!
2) Возможно, вы пытаетесь "доказать", что на ПЛК законы математики не действуют. Это бред, но вдруг.
3) Возможно, вы пытаетесь доказать, что метод xorshift128 плохой. Это тоже бред, ведь уже доказано выше, что метод хороший.
4) Возможно, вы пытаетесь доказать, что на ПЛК крайне сложно (или вообще невозможно!) реализовать метод xorshift128 в чистом виде. Это тоже бред, т.к. DWORD есть, операция XOR есть, операции SHL и SHR тоже есть. 4 retain переменные (как завещал Владислав) тоже можно позволить.



Есть проверенные методы. xorshift128 проверен.
Этот самый xorshift128 можно вызывать столько раз за такт, сколько нужно.
Если в разных запусках использовать одни и те же инициализирующие значения, то псевдослучайные последовательности будут повторяться. Это полезно для воспроизводимости тестов.


Математика действует везде. Точка. То, что на ПЛК это будет ФБ или функция уже совершенно не важно. Математические свойства от этого не меняются.

В общем, я вижу следующий вариант выхода: вы признаёте, что были неправы, мы пожимаем руки и все живут долго и счастливо. :D

я изначально сказал про первый вариант, всё остальное станет известно когда будет использоваться на плк, а не на ПК. Отпечатки у меня потому такие маленькие, что это мой предел передать массив значений с контроллера. Освобожу контроллер попытаюсь на нем генерировать и сохранять картинку, мне не в чем признавать свою не правоту, я ни с кем не спорил. Больше скажу, раз уж упомянули SecureRandom то там отметился и не безызвестный G.Marsaglia скорее всего со своим виденьем рандомизации, получается я активно пользуюсь этим методом, но только на ПК, а в плк это производная от оскатовского варианта

Владимир Ситников
16.07.2016, 19:16
А че тут признавать ,я ж сказал -смотри в макросе ...Ответь те на поставленные мной вопросы ,а не на те которые вам удобно и ответьте по простому ,в той манере которой просил ,а не на известном мне языке .Тогда и поговорим о признании ошибок ,тех которых не совершал -мы обсуждаем макрос AI,который меня пока устраивал .
Для непонятливых, повторю: вопрос "через какое время возникнет повторение последовательности на ПР" не имеет смысла. В этом вопросе смысла столько же, сколько в вопросе "а какое сейчас расстояние от Марса до Юпитера". Найти ответ можно, но смысла нет.
Я так и ответил:
1) В вопросе смысла нет. Более того, уже доказано практикой, что упомянутый генератор AI! не проходит nist тесты.
2) Мне лень искать/думать над ответом. Готового ответа у меня нет
3) Генераторы rand1024 даже и смотреть не хочу -- там порнография сплошная. Тот же самый xorshift128 гораздо проще и быстрее будет.

Если вопрос какой-то другой, то вопрос в студию.
Если я где-то ошибаюсь -- всегда готов выслушать.



Тогда и поговорим о признании ошибок ,тех которых не совершал -мы обсуждаем макрос AI,который меня пока устраивал .

Устраивает макрос AI! -- флаг в руки.
Придёт AI!, согласится, что нужно было "просто xorshift128 сделать, а не кулибинством заниматься", сделает и, я уверен, с той же пеной у рта от rovki будет "Ситников ничего не знает, ни одного проекта не сделал и т.д. и т.п."

rovki
16.07.2016, 19:25
А для меня нет большого смысла в нормальном распределении вероятности появления разных чисел ..

Владимир Ситников
16.07.2016, 20:16
А для меня нет большого смысла в нормальном распределении вероятности появления разных чисел ..

Хорошо, флаг в руки. Теперь поговорим о признании ошибок?

rovki
16.07.2016, 20:17
каких?////

Владимир Ситников
16.07.2016, 21:59
каких?////

Например, этих:

Константа это максимальное число -диапазон чисел от 0 до N (N<2 в степени 32 минус1),неужели так трудно понять ?Вы сначала сам макрос RND (от AI)изучите
По факту, явная ошибка rovki в том, что константа не равна 232-1


Именно остаток от деления является случайным числом!А не результат умножения .В двух соснах заблудились
Я не заблуждался.
С самого начала понятно, что этот генератор плохой, и тестировать его на всех возможных входных значениях только ради того, чтобы доказать что он полностью плохой смысла нет.



Я не заморачиваюсь с этим, поседел полчаса и мне хватило -увидел что цикла нет ,а в словоблудии больше не участвую .Кому надо пусть проверяет ,я лично AI доверяю ,он такой макрос логарифма сделал реально,что многим теоретикам не досуг .Алес .THE END.
Вот эти слова "многим теоретикам не досуг" про кого были? Если не про меня, то зачем их упоминать?
Если про меня, то слова ложны, ведь именно я и предложил AI! способ, как довести макрос логарифма до ума.


Принцип простой -генерация псевдослучайного числа в пределах заданного диапазона ,но не более 32 бит в течении 1 цикла вычисления(для ПР) .Затем стробируем данную последовательность во времени с переменным периодом формирующимся опять же случайным образом.Получаем последовательность случайных чисел с еще большим разбросом ,напоминающий "белый шум"... с равноверояным распределением по времени ,если нужно ..
И тут снова мимо. 100% кулибинства, 0% здравого смысла. Якобы, чем больше слов "случайным образом", тем случайнее получится. Ну, да, конечно. Всегда можно сказать "а мне достаточно".
Но тут я повторю (своё первое сообщение в этой теме): в google chrome палёность random'а заметили, когда кто-то в своём приложении составлял 20-и буквенные строки и они почему-то дублировались. Т.е. проблема на ровном месте. Ни о какой криптографии речи не даже не шло.
Отрицать законы математики, использовать кулибинство вместо нормальных алгоритмов и пропагандировать это не достойно тех, кто называет себя "опытными товарищами".

rovki
16.07.2016, 22:36
в макросе написано 4294967291 ,я да же не заморочился что это не 2в32 -1 .Гляжу на 2в 32 не похоже потому как на 1 оканчивается ,рещил значит ,что на 1 меньше .для меня это все равно .потому как я не сам писал макрос и какой она должна быть мне все равно ,что за слова то хвататься ..сначала давай да давай,ну на ,что бы отстал ... это не ошибка а оговорка ...
Не надо тестировать на всех возможных значениях на входе ,для меня достаточно до 100 .и это для меня не главное ,для вас нет смысла делать то о чем просят ,но вы готовы сутками делать то ,что ни кому не нужно .
Не надо примазываться к логарифму АI . макрос и без ваших доводок нормально работал ,а главное способ вычисления ,а красота кода для меня на последнем месте.И макрос его на века останется на форуме ,а про ваши улучшалки уже забыли через день ,только вы и напоминаете .
Речь не идет о "нормальных" алгоритмах вообще ,а о алгоритме для ПР ,ПЛК и с учетом их различий (ол и кодесис) и алгоритмы скорее всего будут разные ,как и задачи которые они решают .Уж криптографию точно на ПР делать не будут.Вам мало делать из ПР калькулятор ,вы еще и ПК хотите сделать из него призывая применять аналогичные алгоритмы ,прикрываясь -Математика она и в Африке математика ...Посмотрел бы я на вас как вы на костяшках счет возводите в степень и вычисляете натуральный логарифм .А че -???? а 2+2 можно одинаково вычислить на ПК и на счетах и да же на палочках .

Владимир Ситников
16.07.2016, 22:51
в макросе написано 4294967291 ,я да же не заморочился что это не 2в32 -1 .Гляжу на 2в 32 не похоже потому как на 1 оканчивается ,рещил значит ,что на 1 меньше .для меня это все равно .потому как я не сам писал макрос и какой она должна быть мне все равно ,что за слова то хвататься ..сначала давай да давай,ну на ,что бы отстал ... это не ошибка а оговорка ...
Оправдания можете оставить при себе. Они никому не нужны.
По факту ошибка. Можно было нажать ctrl+c/ctrl+v и всего делов, а уже который раз разводятся оправдания про "не заморочился", "решил", "мне это всё равно".


Не надо тестировать на всех возможных значениях на входе ,для меня достаточно до 100 .и это для меня не главное ,для вас нет смысла делать то о чем просят ,но вы готовы сутками делать то ,что ни кому не нужно .
Ну, да, сейчас протестируем на 1..100, поймём, что на всех значениях генератор плохой и что тогда?


Не надо примазываться к логарифму АI . макрос и без ваших доводок нормально работал ,а главное способ вычисления ,а красота кода для меня на последнем месте.И макрос его на века останется на форуме ,а про ваши улучшалки уже забыли через день ,только вы и напоминаете .
Если не понимаете, то так и скажите, что "в математике и логарифмах" ничего не понимаете.
Но с упорством барана отрицать факты это уже странно.
Есть факт: без моих доводок у макроса AI было 2 проблемы. Либо низкая точность, либо долгая работа -- требовалось много циклов прежде чем значение окончательно вычислится.
Я предложил способ вычисления, и про эти улучшения AI не забыл, а доработал свой макрос согласно моему предложению.





Уж криптографию точно на ПР делать не будут.Вам мало делать из ПР калькулятор ,вы еще и ПК хотите сделать из него призывая применять аналогичные алгоритмы ,прикрываясь -Математика она и в Африке математика ...Посмотрел бы я на вас как вы на костяшках счет возводите в степень и вычисляете натуральный логарифм .А че -???? а 2+2 можно одинаково вычислить на ПК и на счетах и да же на палочках .
Остапа понесло. При чём тут криптография? При чём тут калькулятор? При чём тут костяшки?

Даже сейчас в ОЛ есть блоки XOR, SHL, SHR, unsigned 32 bit int и память. Это всё, что нужно для реализации xorshift128. О каких костяшках речь?

rovki
16.07.2016, 23:00
Даже сейчас в ОЛ есть блоки XOR, SHL, SHR, unsigned 32 bit int и память. Это всё, что нужно для реализации xorshift128. О каких костяшках речь?
Осталось малость -сделать макрос и увековечить свое имя и добрую память ...А что 128 ,может 256 ,что мелочится то .
Проблемы в макросе AI были только у вас .Для простых смертных ,что 2цикла ,что 20циклов ПР одно и то же, а уж точность больше чем 2в 12(14) степени и не нужна ,больше чем точность по аналоговым входам .
Назовите хотя бы 2,3 задачи на ПР ,где нужно использовать RND ,может тогда у вас сложится правильное представление о подходах к проектированию в ОЛ.

Владимир Ситников
17.07.2016, 00:16
Осталось малость -сделать макрос и увековечить свое имя и добрую память ...
Этот ваш подход я понял. У меня другие подходы к захвату мира.


А что 128 ,может 256 ,что мелочится то .
У вас проблемы с логикой.
Код xorshift128 прямо в wikipedia описан. Кода xorshift256 там нет. Если есть желание выискивать код xorshift256 только "чтобы было" -- вперёд и с песней. Вариант 128 хорошо себя зарекомендовал и смысла искать 256 нет. Особенно в контексте ПЛК/ПР.


Проблемы в макросе AI были только у вас
Факт остаётся фактом, AI с проблемами согласился, и учёл мои предложения.

1 цикл и 20 циклов разница есть.


Назовите хотя бы 2,3 задачи на ПР ,где нужно использовать RND ,может тогда у вас сложится правильное представление о подходах к проектированию в ОЛ.
У вас проблемы с логикой.

1) Я говорю: если делать random, то нужно использовать проверенные алгоритмы. Каким боком тут "Назовите хотя бы 2,3 задачи на ПР ,где нужно использовать RND"?
И не надо оправдываться словами "для ПР сойдёт тяп-ляп-и-готово".

2) "вы еще и ПК хотите сделать из него призывая применять аналогичные алгоритмы ,прикрываясь -Математика она и в Африке математика". Где логика? Как связаны Африка, ПК и ПР?
Повторю ещё раз для непонятливых: если на ПР понадобились случайные числа, то нужно обратиться к математике, взять проверенный математический подход и применить его.
Сложность xorshift128 -- 3 операции сдвига, 4 xor. Это вполне можно себе позволить и на ПР. Никакой стек не переполнится.


Если что-то уж прямо переполняться начнёт (что вряд ли), можно взять xorshift32. Там 3 сдвига, 3 xor, 1 ячейка памяти. Проходит все тесты, кроме Rank (его полностью заваливает):



uint32_t x32 = 314159265;
uint32_t xorshift32() {
x32 ^= x32 << 13;
x32 ^= x32 >> 17;
x32 ^= x32 << 5;
return x32;
}

вут
17.07.2016, 02:34
Господа ! окститесь !!! вы во что форум превращаете ???? угомонитесь !!!! на форум люди заходят чтобы помощь найти !
а Вы во что его превращаете ??? там с начала куча вопросов НУЖНЫХ пользователям плк - на которые ответа нет !
а вы в дебрях бездонных сознания вашего всех уже распугали кто и интересовался вопросом данной темы !
первому совет - можешь - напиши , поясни , а люди оценят - долго ждать не придется !
(типа , как Игорь - вот то что вы ищете , работает так-то , только вот это добавьте вот сюда ,
для того-то , и делает оно вот то-то , остальное поймете (наверное)))
и не стоит горлом брать ...
второму (автору , автору темы , и соавторам которые так и молчат "как рыба об лед" ) - лучше поясните как работает то что работает - ибо них..чего не понятно - тогда бы гости , пользователи ( и все остальные кто умом по меньше ) - лучше бы поняли принципы работы плк !
(автору темы мое глубокое почтение и светлая память в моём рассудке на веки вечные за качественную учёбу!)

rovki
17.07.2016, 08:22
1) Я говорю: если делать random, то нужно использовать проверенные алгоритмы. Каким боком тут "Назовите хотя бы 2,3 задачи на ПР ,где нужно использовать RND"?
И не надо оправдываться словами "для ПР сойдёт тяп-ляп-и-готово".

[/CODE]
НЕт задач - не нужны и абстрактные(универсальные) решения .Я не из тех кто микроскопом гвозди забивает и говорит при этом - ой ,микроскоп тест не прошел .Молоток от AI имеет нужную массу для работы с любыми гвоздями в теле ПР!
Послушаюсь совета ВУТ .Сто раз зарекался не вступать в эту абстрактную жижу ,что бы не измазаться ,бес попутал +,+,+ ...время потерял ,а человек так и не услышал ...,что капзапа ,что меня ,а остальные так и не получили готового ,только полезные советы....THE END!

rovki
17.07.2016, 09:27
Для справки (тема навеяла)- удалось "поймать" энтропию часов реального времени в ПР .То есть в идеале (симуляторе) все стабильно и однообразно ,а на реальном железе имеет место быть флуктуация времени между циклами ПР и часами реального времени ПР .В течении секунды разброс составляет 1 цикл ПР ....Думаю в ПЛК ,с учетом большей скорости ,разброс можно вычислить точнее .При анализе в течении минуты разброс становится еще больше ...
Значит можно придумать не только вычислительные алгоритмы , но и использовать "железную" флуктуацию .
ПС. Заодно фичу ОЛ выловил ,но об этом в другой теме .

Владимир Ситников
17.07.2016, 10:17
НЕт задач
По поиску rnd1024 находится широкоизвестная в узких кругах задача, и кулибинское решение от которого аж стек заканчивается


а человек так и не услышал ...,что капзапа ,что меня

И capzap и rovki сказали лишь одно: "а нам пофиг, нам достаточно того, что есть, нам пофиг на то, что значения не равновероятны, нам пофиг на всё остальное".



а остальные так и не получили готового ,только полезные советы....THE END!

rovki, если человек не способен перевести такой C код на КДС, то вон из профессии:

uint32_t x = 123456789;
uint32_t y = 362436069;
uint32_t z = 521288629;
uint32_t w = 88675123;
uint32_t xorshift128() {

uint32_t t = x ^ (x << 11);
x = y; y = z; z = w;
w ^= (w >> 19) ^ t ^ (t >> 8);

return w;
}

Если у кого-то реально не получается, то он задаст вопрос и ему ответят. А если просто "ждать готового", то, простите, так можно и дойти до того, чтобы тут ждали "готовый сложения двух чисел".

rovki
17.07.2016, 10:29
Для справки (тема навеяла)- удалось "поймать" энтропию часов реального времени в ПР .Стоит только поднести ФЭН к кварцу на плате ,так разница возрастает ...но об этом в другой теме .

capzap
17.07.2016, 12:08
чтобы тут ждали "готовый сложения двух чисел".
я от Вас ждал тестирования рандомизации в среде КДС, Вы что ответили, напомнить? О каких "сложениях двух чисел" идет речь, это потом уже я опустил планку и предложил выложить реализацию хотя бы самого метода и совсем не от того что не получается, а чтоб его выложил человек, который его изучил и не было сомнений в моей предвзятости.
По поводу немцев хьюго и тобиаса, ну не написали они какой методикой пользовались, возможно не подозревали что появиться некий Ситников, Вам же не помешало найти "знакомые буквы" у Филоненко, хотя он тоже не давал ссылку на первоисточник
Я потестил различные методы, особых преимуществ ни у кого не заметил

Вольд
17.07.2016, 12:28
Вы предлагаете на глаз определить распределение случайной величины ? Есть стандартные тесты, ими и надо пользоваться.

capzap
17.07.2016, 12:36
Вы предлагаете на глаз определить распределение случайной величины ? Есть стандартные тесты, ими и надо пользоваться.

решили подогреть разговор, давайте. В двух словах расскажите о стандартном тесте, чтоб его можно было реализовать в плк, я сколько уже третьи сутки прошу дать такой инструмент, ни кто сместа не сдвинулся, начал сам готовить для себя тесты и сразу "повылазили" спецы, которым не нравиться мой подход

Владимир Ситников
17.07.2016, 15:26
я от Вас ждал тестирования рандомизации в среде КДС, Вы что ответили, напомнить?
Напомните, пожалуйста.


О каких "сложениях двух чисел" идет речь
О самом простом. То, которое "a+b". Ну, rovki то и дело просит "готовую реализацию xorshift128 для КДС". Я и говорю: что алгоритм настолько прост, что его каждый должен быть в состоянии реализовать. Если пойти на поводу, то потом нормой станет просить "дайте ФБ для вычисления суммы чисел".


это потом уже я опустил планку и предложил выложить реализацию хотя бы самого метода и совсем не от того что не получается, а чтоб его выложил человек, который его изучил и не было сомнений в моей предвзятости.
Если вам очень интересна реализация именно на КДС -- вперёд и с песней (как и было сказано ранее). Но никто такую реализацию ради проверки случайности делать не будет.
Специалистам по безопасности/математике как будто делать больше нечего, как КДС изучать.
Если просто делать нечего -- то пожалуйста, занимайтесь (ссылки на алгоритмы и их описания я приводил). Но на это я уж точно время тратить не собирался и не собираюсь. А тыкать пальцем "я от Вас ждал пока вы в колодец полезете..." Ну нафиг! К чему эти все КДС реализации, если для C уже написано и протестировано много программ?


Вам же не помешало найти "знакомые буквы" у Филоненко, хотя он тоже не давал ссылку на первоисточник
Помешало. Помешало и то, что Владислав говорил о периоде 250, хотя по факту, там 2128.
Если бы Владислав оставил ссылку откуда он взял метод, было бы гораздо проще.


Я потестил различные методы, особых преимуществ ни у кого не заметил
Я применил общепризнанный набор nist тестов, и он показал, что oscat'овская реализация проходит мало тестов.
Или так: про xorshift128 есть статья в wikipedia, где описаны свойства алгоритма, а про OSCAT вообще ничего не сказано.

Понимаете разницу? Ваше "Я преимуществ ни у кого не заметил" есть только в вашем мозгу. Моё "свойства xorshift128 хорошо изучены, в отличие от OSCAT'а" -- объективно. Это математический факт, отрицать который может только невежа.

capzap
17.07.2016, 17:29
Напомните, пожалуйста.

Если вам очень интересна реализация именно на КДС -- вперёд и с песней (как и было сказано ранее). Но никто такую реализацию ради проверки случайности делать не будет.

Специалистам по безопасности/математике как будто делать больше нечего, как КДС изучать.
Если просто делать нечего -- то пожалуйста, занимайтесь (ссылки на алгоритмы и их описания я приводил). Но на это я уж точно время тратить не собирался и не собираюсь. А тыкать пальцем "я от Вас ждал пока вы в колодец полезете..." Ну нафиг! К чему эти все КДС реализации, если для C уже написано и протестировано много программ?

Понимаете разницу? Ваше "Я преимуществ ни у кого не заметил" есть только в вашем мозгу. Моё "свойства xorshift128 хорошо изучены, в отличие от OSCAT'а" -- объективно. Это математический факт, отрицать который может только невежа.


А ждать, что будет "написанный для ПЛК инструмент проверки случайности" это крайне странно. Не будет такого. На ПЛК случайность проверять крайне неудобно и долгоя выбрал одну из методик тестирования, "прогнал" все способы, ни один из них не прошел тест, эти цифры не в моем мозгу, а их просчитал контроллер.Напомню, что оскатовскую реализацию Вы сделали малопригодной для прохождения тестов. Xorshift128 предложенный Филоненко мало пригоден, что хоть и организует случайный ряд, но с одними и теми же инициализированными значениями, мы заранее можем знать значение каждой итерации, да Вы написали что это удобно, но это уже не выборка случайных значений

Владимир Ситников
17.07.2016, 17:51
я выбрал одну из методик тестирования, "прогнал" все способы, ни один из них не прошел тест, эти цифры не в моем мозгу, а их просчитал контроллер
"просчитал контроллер" это правильные слова. Но сейчас их слышно впервые. Как просчитал? Сколько чисел? За какое время?
О какой методике речь?

Поймите же наконец. Слова "ни один из них не прошел тест" без упоминаний методики/критериев и названия теста ничего не значат.


Напомню, что оскатовскую реализацию Вы сделали малопригодной для прохождения тестов.

Во-первых, я с самого начала говорил: "если вам нравится верить в то, что боги сделают oscat реализацию хорошей -- верьте"
Я протестировал работу с минц=10мс. При минц=20мс генератор может выдавать совершенно другие значения. Может быть станет лучше, а может и хуже.
Во-вторых, зачем нужен генератор правильность которого критически зависит от цикла?


Xorshift128 предложенный Филоненко мало пригоден, что хоть и организует случайный ряд, но с одними и теми же инициализированными значениями, мы заранее можем знать значение каждой итерации, да Вы написали что это удобно, но это уже не выборка случайных значений
Прикидываетесь или как?
Кто же _заставляет_ всегда использовать одни и те же начальные значения?
Если нужно каждый раз разную серию, то на вход подаём текущее время, содержимое log.txt и т.п. Ну, ровно как завещал Владислав. Спускайтесь с небес на землю и включайте мозг.

capzap
17.07.2016, 18:02
Поймите же наконец. Слова "ни один из них не прошел тест" без упоминаний методики/критериев и названия теста ничего не значатВы сами дали ссылки, т.к. я русскоговорящий я не помню как она называется :) , надо было конкретно называть что имели ввиду, раз уж сами не собираетесь ни чего делать


Кто же _заставляет_ всегда использовать одни и те же начальные значения?Вы и заставляете, кто мне задавал вопрос правильные ли я значения инициализировал, значит есть еще и не правильные, тогда как можно подставлять случайный набор? Естественно я подставлял, генерировал кусок кода из sha и тем неменее

Владимир Ситников
17.07.2016, 18:24
Вы сами дали ссылки, т.к. я русскоговорящий я не помню как она называется :) , надо было конкретно называть что имели ввиду, раз уж сами не собираетесь ни чего делать
Т.е. "использована неизвестная методика которая неизвестно что вернула"? Тогда это возврат к стадии "только в вашем мозгу".

Обычно, делают так:
1) Либо реализуют алгоритм ГСЧ на C
2) Либо генерируют длинную последовательность, сохраняют в файл и прогоняют через тот же тестирущий софт.


Вы и заставляете, кто мне задавал вопрос правильные ли я значения инициализировал, значит есть еще и не правильные, тогда как можно подставлять случайный набор? Естественно я подставлял, генерировал кусок кода из sha и тем неменее
Где заставляю? Ссылку в студию.

capzap
17.07.2016, 20:13
https://ru.wikipedia.org/wiki/%D0%A2%D1%8C%D1%8E%D0%BA%D0%B8,_%D0%94%D0%B6%D0%BE %D0%BD вот оттуда взял методику

тестами на ПК оставляю заниматься Вам

перечитывайте свои сообщения, мы всего то третий день треплемся в этой теме

Владимир Ситников
17.07.2016, 20:46
перечитывайте свои сообщения, мы всего то третий день треплемся в этой теме

Не стыдно писать такое?
1) Научитесь отвечать за свои слова. Сначала утверждаете, что я заставляю использовать одни и те же начальные значения, а потом пишете "перечитывайте свои сообщения". Дети себя ещё так могут вести, но взрослые должны уметь отвечать за свои слова и признавать ошибки.


https://ru.wikipedia.org/wiki/%D0%A2%D1%8C%D1%8E%D0%BA%D0%B8,_%D0%94%D0%B6%D0%BE %D0%BD вот оттуда взял методику
Из биографии Джона Уа́йлдера Тью́ки? Серьёзно?
Проверяйте хотя бы ссылки перед публикацией.


тестами на ПК оставляю заниматься Вам
Тестами чего?
Я уже довольно много алгоритмов протестировал. Смысл тестировать что-то ещё уже невелик.

capzap
17.07.2016, 20:54
Не стыдно писать такое?
1) Научитесь отвечать за свои слова. Сначала утверждаете, что я заставляю использовать одни и те же начальные значения, а потом пишете "перечитывайте свои сообщения". Дети себя ещё так могут вести, но взрослые должны уметь отвечать за свои слова и признавать ошибки.


Из биографии Джона Уа́йлдера Тью́ки? Серьёзно?
Проверяйте хотя бы ссылки перед публикацией.


Тестами чего?
Я уже довольно много алгоритмов протестировал. Смысл тестировать что-то ещё уже невелик.

если Вы пытаетесь меня вывести из себя, то не получится, Вы прекрасно поняли о чем я написал, по всем трем пунктам, по существу что то есть?

Владимир Ситников
17.07.2016, 21:29
если Вы пытаетесь меня вывести из себя, то не получится, Вы прекрасно поняли о чем я написал, по всем трем пунктам, по существу что то есть?

Я написал ровно то, что понял.
Никаких задних мыслей у меня нет.

По существу -- научитесь отвечать за свои слова, как я и написал в сообщении 20:46.

И, да, проверять случайность последовательности с помощью биографии -- это нечто. Я реально не понимаю как с помощью биографии проверять степень случайности генератора.

capzap
17.07.2016, 21:51
Я написал ровно то, что понял.
Никаких задних мыслей у меня нет.

По существу -- научитесь отвечать за свои слова, как я и написал в сообщении 20:46.

И, да, проверять случайность последовательности с помощью биографии -- это нечто. Я реально не понимаю как с помощью биографии проверять степень случайности генератора.


1) Какие начальные значения для x, y, z, w использовали. Правильные?я в ответ
кто мне задавал вопрос правильные ли я значения инициализировал, значит есть еще и не правильныедалее
перечитывайте свои сообщенияя отвечаю за свои слова, но Вам ведь главное зацепиться за слова вне контекста.
По поводу биографии, Вы же математик не знаете его критерий? Полностью реализовать "jackknife" я не пытался, просто оценил ошибку среднего. Надеюсь этих ключевых слов будет достаточно.
ЗЫ становится совсем не понятно, теперь ГСЧ мой, тест мой, даже плк мой, Вас чего не устраивает теперь то?
И так ради интереса, раз про ОЛ создали тему по ошибке, значит скорее всего и в КДС создавали и как получилось, получили значения от 0.0 до 1.0?

Владимир Ситников
17.07.2016, 22:28
я в ответдалеея отвечаю за свои слова, но Вам ведь главное зацепиться за слова вне контекста.

Вот переписка:

Xorshift128 предложенный Филоненко мало пригоден, что хоть и организует случайный ряд, но с одними и теми же инициализированными значениями, мы заранее можем знать значение каждой итерации, да Вы написали что это удобно, но это уже не выборка случайных значений


Кто же _заставляет_ всегда использовать одни и те же начальные значения?
Если нужно каждый раз разную серию, то на вход подаём текущее время, содержимое log.txt и т.п. Ну, ровно как завещал Владислав. Спускайтесь с небес на землю и включайте мозг.

Вы и заставляете, кто мне задавал вопрос правильные ли я значения инициализировал, значит есть еще и не правильные, тогда как можно подставлять случайный набор?

Вы дважды утверждаете, что я заставляю использовать одни и те же значения на входе.
Это наглая ложь.
И это не "слова без контекста", а я переспросил "кто заставляет, рассказал что да как", а вы всё равно за старое "Ситников заставляет".

Я спросил какие именно значения для xyzw использовали. Не более. Каким образом это можно трактовать как "я заставляю использовать одни и те же значения" -- вообще без понятия.


ЗЫ становится совсем не понятно, теперь ГСЧ мой, тест мой, даже плк мой, Вас чего не устраивает теперь то?
Не устраивает 2 вещи:
1) Наглая ложь с вашей стороны
2) Нежелание признать то, что законы математики действуют на ПЛК



По поводу биографии, Вы же математик не знаете его критерий?
Первый раз слышу. Как про человека, так и про критерий. Ну, я слышал, что в быстром преобразовании Фурье фигурирует слово tukey, но не задумывался что оно значит.
Про его критерий уж тем более вообще без понятия.

В google нашлось https://en.wikipedia.org/wiki/Tukey%27s_range_test и https://en.wikipedia.org/wiki/Tukey%27s_test_of_additivity.
Ни про один ни про другой не упоминается как его применяют в проверке на случайность.
В статье про тесты на случайность фамилия Tukey тоже не встречается.

Поэтому, мой вердикт пока: хватит умничать, либо рассказывайте больше деталей, либо спускайтесь на землю и следуйте заветам статьи Тестирование псевдослучайных последовательностей (https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D 0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%81%D0%B5%D0%B2%D0 %B4%D0%BE%D1%81%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%B D%D1%8B%D1%85_%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4 %D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D 0%BE%D1%81%D1%82%D0%B5%D0%B9)






Полностью реализовать "jackknife" я не пытался, просто оценил ошибку среднего. Надеюсь этих ключевых слов будет достаточно.
Странные подходы. Звучит как "разгибание пальцев по умным терминам". Особенно в контексте "по-английски ничего не понимаю, но цитирую метод jackknife, про который по-русски вообще ничего нет".

Повторюсь ещё раз: аппаратные генераторы (коим является ПЛК+OSCAT) во всём мире тестируют через запись в файл потока генерируемых данных.
Сами же видели, что в том же самом наборе NIST 15 различных тестов. Разные генераторы проходят разные из них. Надо не один конкретный тест брать, а всю пачку.
Поэтому, если хотите чего-то нормального, то нужно весь поток значений записать в файл (мегабайт 10-50 хотя бы), и уже по этому файлу гонять тесты на ПК.

И, даже если окажется, что конкретная модель ПЛК с конкретной версией КДС и конкретной версией прошивки худо-бедно генерирует, то при обновлении всё запросто может испортиться.


И так ради интереса, раз про ОЛ создали тему по ошибке, значит скорее всего и в КДС создавали и как получилось, получили значения от 0.0 до 1.0?
Если интересно -- пишите там.
И, да, перестаньте додумывать за других.
"раз про ОЛ создали тему по ошибке, значит скорее всего и в КДС создавали"
Нет, xorshift в КДС я не реализовывал. Уверен, что там алгоритм будет работать.

А в ОЛ решил сделать только ради того, чтобы проверить "работают ли обратные связи в ОЛ". Оказалось, что не работают. Не работают -- пусть разработчики ищут ошибку.

capzap
17.07.2016, 22:48
не подозревал что метода нет на русском, но Вас же не забанили в гугле, да и по английски вроде привычно Вам читать. Кстати в ответ тоже могу сказать, что хватит додумывать за других, я просто считаю что на русскоязычном форуме стоит давать ссылки на родной язык, а первоисточник уже по усмотрению смотрящего
Про файл, это не выполнимая задача для овеновских плк сотой серии у них нет столько памяти

Владимир Ситников
17.07.2016, 23:23
но Вас же не забанили в гугле, да и по английски вроде привычно Вам читать.
И? Каким образом это изменяет тот факт, что фамилия Тьюки вообще не упоминается в статье "Тестирование псевдослучайных последовательностей" и подобных?
Зачем было упоминать Тьюки? Не имеет отношения он к тестам ГСЧ. И то насколько хорошо я понимаю английский тоже не имеет отношения к тестам ГСЧ.


Кстати в ответ тоже могу сказать, что хватит додумывать за других, я просто считаю что на русскоязычном форуме стоит давать ссылки на родной язык, а первоисточник уже по усмотрению смотрящего
Если ссылок на русский нет -- то ничего не остаётся, как давать ссылки на английский.


Про файл, это не выполнимая задача для овеновских плк сотой серии у них нет столько памяти
А кто сказал, что нужно всё в памяти держать?
Что мешает порциями генерировать и порциями же выгружать?
Какой максимальный размер массива можно сделать?
На том же ПЛК110 заявлено 8-16 мегабайт ОЗУ. Неужели нельзя даже массив размера в 1 мегабайт сделать?

capzap
18.07.2016, 06:19
о, т.е. ярлык мистер всёзнайка слегка отклеился

а поповоду плк. не больше трех, есть даже тема на форуме на это счет


ЗЫ честно скажу я старался найти не самое очевидное, но если в общих чертах то я вел вариацию расчета между этим (https://ru.wikipedia.org/wiki/%D0%A1%D1%80%D0%B5%D0%B4%D0%BD%D0%B5%D0%BA%D0%B2%D 0%B0%D0%B4%D1%80%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1% 81%D0%BA%D0%BE%D0%B5_%D0%BE%D1%82%D0%BA%D0%BB%D0%B E%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5) и этим (http://www.machinelearning.ru/wiki/index.php?title=%D0%9A%D1%80%D0%B8%D1%82%D0%B5%D1% 80%D0%B8%D0%B9_%D0%A2%D1%8C%D1%8E%D0%BA%D0%B8)
а в nist видимо эта статья (http://www.itl.nist.gov/div898/handbook/prc/section4/prc471.htm)

Владимир Ситников
18.07.2016, 11:10
о, т.е. ярлык мистер всёзнайка слегка отклеился

а поповоду плк. не больше трех, есть даже тема на форуме на это счет
capzap, что по поводу http://www.owen.ru/forum/showthread.php?t=901&p=215004&viewfull=1#post215004 и http://www.owen.ru/forum/showthread.php?t=901&p=215095&viewfull=1#post215095 ?
Никакой разницы нет сколько мегабайт позволяет держать ПЛК в памяти нет.
Если 3 мегабайта, то за 10-20 экспериментов можно собрать 50 мегабайт данных.
Если бы ограничение было в 100 элементов, то, да, это было бы проблемой. Но 3 мегабайта уже не так плохо.



ЗЫ честно скажу я старался найти не самое очевидное, но если в общих чертах то я вел вариацию расчета между этим (https://ru.wikipedia.org/wiki/%D0%A1%D1%80%D0%B5%D0%B4%D0%BD%D0%B5%D0%BA%D0%B2%D 0%B0%D0%B4%D1%80%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1% 81%D0%BA%D0%BE%D0%B5_%D0%BE%D1%82%D0%BA%D0%BB%D0%B E%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5) и этим (http://www.machinelearning.ru/wiki/index.php?title=%D0%9A%D1%80%D0%B8%D1%82%D0%B5%D1% 80%D0%B8%D0%B9_%D0%A2%D1%8C%D1%8E%D0%BA%D0%B8)
а в nist видимо эта статья (http://www.itl.nist.gov/div898/handbook/prc/section4/prc471.htm)
Прикидываетесь или реально ничего не понимаете в статистических тестах?
Ссылку на nist тесты я приводил: http://csrc.nist.gov/groups/ST/toolkit/rng/documentation_software.html
На этой странице ссылка на документацию и на исходник.
Вот документация: http://csrc.nist.gov/groups/ST/toolkit/rng/documents/SP800-22rev1a.pdf

Слово tukey в SP800-22rev1a.pdf встречается ровно ноль раз.

capzap
18.07.2016, 11:42
пошел уже троллинг восьмидесятого уровня, цитировать цитируемое цитатой

я неоднократно писал, что плк это не самая хорошая вещь для крупных вычислений, у меня может загрузиться ПОУ с 10000 элементов, а после правки будет ругаться что не хватает памяти, пока не откачусь до 1000 элементов, потом вновь могу поднимать размер массива. Простых путей выгрузить в файл тоже особо нет
По поводу тестов от nist, а они точно нужны если отклонение от эталонной средней больше процента у всех способов, при стандартное отклонение практически одинаковом у всех до четвертого знака, включая и эталон, сумма среднего с максимальным отклонением отлична от эталона на десятые процента
Конечно нет упоминания в этих тестах,он занимался настоящим статистическим анализом того что повторяется имея отклонения, а рандомизация это как раз обратная сторона, но все они одинаково считают и среднее и дисперсию, можно конечно поискать товарищей из теста в его учениках, где то лежал список


ЗЫ вот как я и говорил, мне нужна чужая реализация предлагаемого не мной метода ГСЧ, сейчас упростил формирование начальных значений и генератор повел себя лучше. Вопрос какие значения правильные, а особенно какие не правильные для него, так и остался висеть в воздухе

Вольд
18.07.2016, 13:28
capzap и vladimirisitnikov сцепились как два бульдога и некому их растащить. ;)

Владимир Ситников
18.07.2016, 14:21
Вопрос какие значения правильные, а особенно какие не правильные для него, так и остался висеть в воздухе
Ленивец вы наш. Включайте мозг. Хотя бы две его части. Ту, которая отвечает за чтение, и ту, которая отвечает за понимание.

https://en.wikipedia.org/wiki/Xorshift

/* These state variables must be initialized so that they are not all zero. */
uint32_t x, y, z, w;

Начальные значения могут быть любыми, кроме случая, когда все они равны нулю.

Но, да, capzap'у нужно поважничать, подчеркнуть, что "его архиважнейший вопрос" проигнорировали...



По поводу тестов от nist, а они точно нужны
Тесты NIST -- это то, чему доверяют учёные. Если ничего не понимаете и не хотите учиться, то нечего соваться в статистику.

capzap
18.07.2016, 15:17
Ленивец вы наш. Включайте мозг. Хотя бы две его части. Ту, которая отвечает за чтение, и ту, которая отвечает за понимание.

https://en.wikipedia.org/wiki/Xorshift

/* These state variables must be initialized so that they are not all zero. */
uint32_t x, y, z, w;

Начальные значения могут быть любыми, кроме случая, когда все они равны нулю.

Но, да, capzap'у нужно поважничать, подчеркнуть, что "его архиважнейший вопрос" проигнорировали...



Тесты NIST -- это то, чему доверяют учёные. Если ничего не понимаете и не хотите учиться, то нечего соваться в статистику.

Можно было сказать изначально, не нулевые, вместо правильные ли? Поэтому тут не столько поважничать, сколько уточнить что имели ввиду. Вы реально уверены, что я настолько глуп что поставив во все переменные нули буду дожидаться результата смещения и исключающего или?

Тесты NIST -- это то, чему доверяют учёныея разве с этим спорю, я просто выражаю сомнение что стоит ли отвлекаться на тесты великих ученых. если меня не устраивает прохождение ГСЧ моего теста.

Владимир Ситников
18.07.2016, 17:18
Можно было сказать изначально, не нулевые, вместо правильные ли? Поэтому тут не столько поважничать, сколько уточнить что имели ввиду. Вы реально уверены, что я настолько глуп что поставив во все переменные нули буду дожидаться результата смещения и исключающего или?
Кто вас знает? Всякое может быть. Вплоть до опечаток.


я разве с этим спорю, я просто выражаю сомнение что стоит ли отвлекаться на тесты великих ученых. если меня не устраивает прохождение ГСЧ моего теста.

А с чего вы взяли, что у вас правильный тест? Может, ваш тест погоду показывает.
В чём смысл тотального отрицания мирового опыта?

capzap
18.07.2016, 17:30
А с чего вы взяли, что у вас правильный тест? Может, ваш тест погоду показывает.
В чём смысл тотального отрицания мирового опыта?
потому что это классический расчет среднего, стандартного отклонения и дисперсии. Это и есть мировой опыт, из приведенных Вами тестов это помоему оверлапинг



Кто вас знает? Всякое может быть. Вплоть до опечаток.другими словами, Вы перешли от недостойных намеков, к открытому оскорблению?

Валенок
18.07.2016, 17:46
Чисто любопытно, а что за такая задача автоматизации где требуется 50Мб-ный цикл случайных чисел ?
Или это расчет флуктуаций на сферическом конном теле ?

Владимир Ситников
18.07.2016, 18:14
Чисто любопытно, а что за такая задача автоматизации где требуется 50Мб-ный цикл случайных чисел ?
Или это расчет флуктуаций на сферическом конном теле ?

Качество генератора по двум-трём отсчётам не проверишь.
Я не говорю, что нужно на практике все 50МиБ использовать. 50МиБ нужно для того, чтобы тесты гонять.

Владимир Ситников
18.07.2016, 18:17
потому что это классический расчет среднего, стандартного отклонения и дисперсии. Это и есть мировой опыт, из приведенных Вами тестов это помоему оверлапинг
Внимание, вопрос: почему не взять классический тест? Тест frequency из состава nist считает количество нулевых и единичных бит. Дисперсию не считает.
Зачем нужно кулибинство?

Кстати, тесты NIST оперируют над битами.


другими словами, Вы перешли от недостойных намеков, к открытому оскорблению?
Если вас оскорбляет то, что вы можете опечататься -- оскорбляйтесь. Мне не жалко.
Если вас оскорбляет то, что вы можете запустить генератор с нулевыми значениями, вычислить дисперсию, и по ней решить, что генератор плохой -- оскорбляйтесь. Мне не жалко.
Если вас оскорбляет то, что я попросил конкретные константы, которые вы использовали в эксперименте -- оскорбляйтесь. Мне не жалко.

capzap
18.07.2016, 20:00
Внимание, вопрос: почему не взять классический тест? Тест frequency из состава nist считает количество нулевых и единичных бит. Дисперсию не считает.
Зачем нужно кулибинство?
Кстати, тесты NIST оперируют над битами.


если я его запущу, появится новый отмаз, что я не пользовался чем то еще и т.д.
тут уже всем известно, что Вы еще тот затейник, додумывать за других это уже известный факт про Вас, теперь Вы еще и с тремя вариантами начали, только всё мимо

Владимир Ситников
18.07.2016, 20:35
если я его запущу, появится новый отмаз, что я не пользовался чем то еще и т.д.
тут уже всем известно, что Вы еще тот затейник, додумывать за других это уже известный факт про Вас, теперь Вы еще и с тремя вариантами начали, только всё мимо

бла бла бла. бла бла бла.


Я NIST запускал. И результаты публиковал. В отличие от capzap, который умничает, а NIST так и не запускал, а умничает со своим неизвестно каким тестом.

AI!
18.07.2016, 20:51
Есть факт: без моих доводок у макроса AI было 2 проблемы. Либо низкая точность, либо долгая работа -- требовалось много циклов прежде чем значение окончательно вычислится."долгая работа" - это я просто хотел продемонстрировать вам возможность написания полноценных циклов на ПР, т.к. вы утверждали что это не возможно, практической цели не стояло....

ваше улучшения я использовал просто потому что я не гордый, и могу использовать чужой алгоритм, если он мне покажется немного лучше...
но и без него всё работало замечательно, просто надо было добавить одну итерацию...
PS в крайнем случае можно было написать 2 макроса - один для больших значений, другой для близких к 1
("близкие" - это x или 1/x <18e18)

capzap
18.07.2016, 21:07
бла бла бла. бла бла бла.


Я NIST запускал. И результаты публиковал. В отличие от capzap, который умничает, а NIST так и не запускал, а умничает со своим неизвестно каким тестом.

я здесь обсуждаю контроллеры, моя позиция по тому где какие тесты использовать не поменяется

по поводу Вас, Вы столько времени тратите на обличение моих недостатков, что ни чего другого в голову не приходит, что Вы до сих пор не смогли решить как из xorshift в КДС получить значения от 0 до единицы, заверения что Вы уверены в себе оставте сами знаете кому, а мне хотелось бы видеть результат

Владимир Ситников
18.07.2016, 21:10
"долгая работа" - это я просто хотел продемонстрировать вам возможность написания полноценных циклов на ПР, т.к. вы утверждали что это не возможно, практической цели не стояло....
Я же про циклы внутри одного "ПР такта".
Ну, так, чтобы "за 1 такт ПР" выполнился цикл, без copy&paste блоков.

То, что можно за несколько ПР циклов итеративно что-то вычислить "и ежу понятно". Ну, сама возможность мне понятна и без примеров.
Или я что-то просмотрел и там за 1 ПР цикл выполнялся цикл в макросе?


ваше улучшения я использовал просто потому что я не гордый, и могу использовать чужой алгоритм, если он мне покажется немного лучше...
но и без него всё работало замечательно, просто надо было добавить одну итерацию...
PS в крайнем случае можно было написать 2 макроса - один для больших значений, другой для близких к 1
("близкие" - это x или 1/x <18e18)
Полагаю, это был ответ на

Не надо примазываться к логарифму АI . макрос и без ваших доводок нормально работал

rovki, видите, мои доработки учтены, макрос стал лучше, трава зеленее и всё такое.

AI!
18.07.2016, 21:13
Убедили.
Новая версия, на этот раз только натуральный логарифм (как самый востребованный)
И точность, с ваших слов, почти до 1e-7
кстати, вспомнил что "точность" не такая уж и "точность"...
при проверке понял что она теряется из-за перехода от двоичного логарифма к натуральному
(или обратно в вашем варианте - погрешность была ещё больше)

а мой вариант считал точно (надо было добавить одну итерацию)

Владимир Ситников
18.07.2016, 21:20
я здесь обсуждаю контроллеры, моя позиция по тому где какие тесты использовать не поменяется
Это я помню. "на контроллерах законы математики не действуют", ага.


по поводу Вас, Вы столько времени тратите на обличение моих недостатков, что ни чего другого в голову не приходит, что Вы до сих пор не смогли решить как из xorshift в КДС получить значения от 0 до единицы, заверения что Вы уверены в себе оставте сами знаете кому, а мне хотелось бы видеть результат

Оу, оу.
Это что-то новое.

Т.е. теперь "возможность реализации xorshift в КДС" уже под сомнение не ставится, но есть сомнение, что можно получить число от 0 до 1?
Интересные пироги.

На вскидку, есть 2 варианта:
1) java.util.Random.nextFloat (https://docs.oracle.com/javase/8/docs/api/java/util/Random.html#nextFloat--) -- для REAL


public float nextFloat() {
return next(24) / ((float)(1 << 24));
}


2) java.util.Random.nextDouble (https://docs.oracle.com/javase/8/docs/api/java/util/Random.html#nextDouble--) -- для LREAL


public double nextDouble() {
return (((long)next(26) << 27) + next(27))
/ (double)(1L << 53);
}

В итоге получается число от 0 (включительно) до 1.0 (не включительно).

next(n) -- это "очередное число длины n бит". Т.е.

next(n) == xorshift128() & ((1 << n)-1)

rovki
18.07.2016, 21:25
Вам же русским языком сказали - что не было цели такой (задачи) .Вы не знали как итерации на ПР сделать .Если б кто поставил задачу AI бы сделал ,вы попросили по другому он и сделал .Кому на ПР нужны числа е18 степени ...
Трава стала зеленее еще бы воздух стал чище если б закончили возводить себя на пьедестал .Послал же Господи на голову ...

Владимир Ситников
18.07.2016, 21:32
Вы не знали как итерации на ПР сделать
Хватит врать. Как сделать вычисление за несколько ПР циклов -- я знаю. А вот как итеративное вычисление внутри одного ПР цикла -- не знаю.
Итеративное вычисление в рамках одного цикла пока никто не показывал.


Кому на ПР нужны числа е18 степени ...
Уже обсуждалось:

О, шикарно. Как только на форуме появился готовый макрос, так rovki сразу стал отнекиваться со словами "ой, да это никому не нужно".

rovki
18.07.2016, 21:39
1.итерации внутри цикла ПР в ОЛ -это бред больного мозга.
2.Что то я не только готового макроса не заметил ,но и вообще ни какого ,не лгать .ПРОЕКТ был ,макроса не было.

Владимир Ситников
18.07.2016, 21:44
1.итерации внутри цикла ПР в ОЛ -это бред больного мозга.
А вот это уже оскорбление.


2.Что то я не только готового макроса не заметил ,но и вообще ни какого ,не лгать .ПРОЕКТ был ,макроса не было.
"вообще ни какого", а затем "ПРОЕКТ был".
Определитесь сначала "было" или "не было". Проект был -- значит было.
Чем принципиально отличается макрос от проекта? Ничем не отличается.

rovki
18.07.2016, 21:51
Проект есть проект ,макрос есть макрос ,даже расширения разные .Не надо путаться в понятиях и других путать .
Про циклы [QUOTE=vladimirisitnikov;210638]


2) Нет циклов. Многие формулы проще записать циклом. Да, он будет на 2-5 итераций, но это гораздо ближе к математической форме записи, и гораздо проще "сравнить с оригиналом"[QUOTE]
Не принимайте советов от Ситникова ,он потом долю потребует :D от славы.

capzap
18.07.2016, 22:24
Это я помню. "на контроллерах законы математики не действуют", ага.



Оу, оу.
Это что-то новое.

Т.е. теперь "возможность реализации xorshift в КДС" уже под сомнение не ставится, но есть сомнение, что можно получить число от 0 до 1?
Интересные пироги.

ну и, а теперь все Ваши явовские выкладки примените в КДС и выложите код, где получите РЕАЛ.
Я под сомнение не ставил, я всегда говорил что ожидаемый результат можно не получить
Раз пытаетесь уйти от темы, значит решения еще не нашли :)

Владимир Ситников
18.07.2016, 22:28
Проект есть проект ,макрос есть макрос ,даже расширения разные .Не надо путаться в понятиях и других путать .
Т.е. смена расширения всё меняет?
И это говорит, так называемый, опытный товарищъ (tm)?


Про циклы

2) Нет циклов. Многие формулы проще записать циклом. Да, он будет на 2-5 итераций, но это гораздо ближе к математической форме записи, и гораздо проще "сравнить с оригиналом"
Если вам было непонятно, то имелось ввиду следующее: многие формулы проще выразить циклом, но так, чтобы весь этот цикл выполнился за ОДИН цикл ПР. Да, это будет 2-5 итераций, но в такой записи гораздо проще "сравнить с оригинальной формулой", чем сравнивать код, когда в ОЛ схеме копипаста на эти 2-5-20 итераций.
Я, конечно, понимаю, что сейчас время вспять не вернёшь, но вам на будущее: нужно переспрашивать, а не додумывать за людей. Вот если бы я сказал, что в ПР совсем-совсем итеративные вычисления делать нельзя, то это уже было бы странно.

Посмотрите как делаю я: я capzap'а 2 раза переспрашиваю, убеждаюсь, что он говорит ровно то, что говорит (а не то, что я за него додумал), и потом ставлю этого самого capzap'а перед фактом (ну, фактом в общематематическом смысле).
Вы же почему-то решили, что "я не понимаю, что в ПР можно за счёт ПР циклов сделать итеративное вычисление", и теперь давите на это.
В общем, уже сказано: программисту и без примеров ясно, что на ПР циклах можно делать итеративное вычисление. Неясно может быть разве тому, кто до этого ни программировал, и ни электронные схемы не создавал.

И, да, Алексей правильно понял про какие циклы я горил:


В ОЛ есть 3 общеизвестных косяка на счёт подобных "вычислительных" задач:
1) Нельзя формулу записать формулой (http://www.owen.ru/forum/showthread.php?t=23707)
2) Нет циклов. Многие формулы проще записать циклом. Да, он будет на 2-5 итераций, но это гораздо ближе к математической форме записи, и гораздо проще "сравнить с оригиналом"
1) купить машину и предъявлять претензии что она сено не ест.
2) см.п1





Не принимайте советов от Ситникова ,он потом долю потребует :D от славы.

У вас своя математика? Вперёд и с песней!
И, да, в случае с логарифмом я не вопил "Аааа, AI учёл мои доработки, ааа, я крут". И в случае с PID'ом тоже не вопил. И в случае с багами ОЛ тоже не вопил.
А когда некий Анатолий, называющий себя rovki, который игнорирует правила русского языка в части расстановки пробелов и запятых, пишет откровенную ложь "Ситников такой макрос логарифма создать не может", "да он вообще не пользователь ОЛ", то приходится расчехлять поиск и тыкать этого rovki палочкой правды. Разумеется, палочка на rovki действует.

rovki
18.07.2016, 22:45
Т.е. смена расширения всё меняет?
И это говорит, так называемый, опытный товарищъ (tm)?


Про циклы
Если вам было непонятно, то имелось ввиду следующее: многие формулы проще выразить циклом, но так, чтобы весь этот цикл выполнился за ОДИН цикл ПР. Да, это будет 2-5 итераций, но в такой записи гораздо проще "сравнить с оригинальной формулой", чем сравнивать код, когда в ОЛ схеме копипаста на эти 2-5-20 итераций.
Я, конечно, понимаю, что сейчас время вспять не вернёшь, но вам на будущее: нужно переспрашивать, а не додумывать за людей. Вот если бы я сказал, что в ПР совсем-совсем итеративные вычисления делать нельзя, то это уже было бы странно.

Посмотрите как делаю я: я capzap'а 2 раза переспрашиваю, убеждаюсь, что он говорит ровно то, что говорит (а не то, что я за него додумал), и потом ставлю этого самого capzap'а перед фактом (ну, фактом в общематематическом смысле).
Вы же почему-то решили, что "я не понимаю, что в ПР можно за счёт ПР циклов сделать итеративное вычисление", и теперь давите на это.
В общем, уже сказано: программисту и без примеров ясно, что на ПР циклах можно делать итеративное вычисление. Неясно может быть разве тому, кто до этого ни программировал, и ни электронные схемы не создавал.

И, да, Алексей правильно понял про какие циклы я горил:






У вас своя математика? Вперёд и с песней!
И, да, в случае с логарифмом я не вопил "Аааа, AI учёл мои доработки, ааа, я крут". И в случае с PID'ом тоже не вопил. И в случае с багами ОЛ тоже не вопил.
А когда некий Анатолий, называющий себя rovki, который игнорирует правила русского языка в части расстановки пробелов и запятых, пишет откровенную ложь "Ситников такой макрос логарифма создать не может", "да он вообще не пользователь ОЛ", то приходится расчехлять поиск и тыкать этого rovki палочкой правды. Разумеется, палочка на rovki действует.
Не только математика точная наука ,но и вычислительная техника .Это такая же разница как подпрограмма в программе ,команды одни внутри,а оформляются(вызываются) по разному .
НЕ юлите ,цикл ПР это вам не цикл ПК или ПЛК ,поэтому это вы спрашивайте как там все организовано в ПР ,а не домысливайте.
Теперь Ситников стал пользователем ОЛ,он первый свой проект создал ,а раньше так и не скрывал ,что не пользователь .

Владимир Ситников
18.07.2016, 22:55
ну и, а теперь все Ваши явовские выкладки примените в КДС и выложите код, где получите РЕАЛ.
Я под сомнение не ставил, я всегда говорил что ожидаемый результат можно не получить
Раз пытаетесь уйти от темы, значит решения еще не нашли :)

Я никуда не пытаюсь уйти.
В чём проблема применить операцию AND и операцию деления?
Вот реально не понимаю.

Для самых опытных, вот код:


x : DWORD;
r : REAL;
...
x := xorshift();
r := (x AND 16777215) / 16777216.0;


Первые значения совпадают с теми, которые получаются в C.

Вот значения:

0.637786
0.316756
0.063624
0.550792
0.779333
0.696308
0.969059
0.750232
0.217489
0.564047

Владимир Ситников
18.07.2016, 23:00
НЕ юлите ,цикл ПР это вам не цикл ПК или ПЛК ,поэтому это вы спрашивайте как там все организовано в ПР ,а не домысливайте.
Теперь Ситников стал пользователем ОЛ,он первый свой проект создал ,а раньше так и не скрывал ,что не пользователь .
Снова ложь. Я всегда говорил, что я -- пользователь ОЛ. Как вам, rovki, который ставит пробелы перед запятыми и точками (хотя по правилам русского языка их там быть не должно), не стыдно?
Если в вашем мозгу пользователь это только тот, кто создаёт проекты, мне жаль.
Те, кто открывают проекты, дорабатывают их, ищут ошибки во всём мире считаются пользователями.

Вот, для вас фирма ОВЕН или AI авторитеты. Давайте хотя бы у них спросим: можно ли тыкать человеку, что "он, мол, не пользователь" только на основании того, что "он ни одного проекта не создал"?
Уже обсуждали этот вопрос, с привлечением цитат wikipedia о том, кто такой "пользователь" в общемировом понимании. Раз уж вы снова за старое, со своими наездами, то придётся заходить по новой. Хоть бы и с привлечением AI.

Владимир Ситников
18.07.2016, 23:12
НЕ юлите ,цикл ПР это вам не цикл ПК или ПЛК ,поэтому это вы спрашивайте как там все организовано в ПР ,а не домысливайте
Ещё раз: я прекрасно понимаю как работает ПР. И я прекрасно понимаю что такое цикл ПР.
А вот когда говорят, что "я не понимаю", то это похоже либо на невежество, либо фиг знает на что.

Ответ "купили машину, и удивляемся, что она сено не ест" в контексте циклов для ПР в 2016 году понятен, но, надеюсь, через какое-то время циклы и массивы на ПР станут нормой.

Как можно понять, что "я не понимаю что такое цикл ПР"? Разве что какие-нибудь наводящие вопросы спрашивать.
Прекрасный пример -- как меня раскусили, когда я индуктивную с ёмкостной нагрузкой перепутал. Да, перепутал.
А про циклы ПР мне нечего спрашивать. Там для меня всё ясно.

capzap
19.07.2016, 07:26
я рад, что моя подсказка "куда копать" помогла, а то четыре дня на простой код это очень много для математика :)

ЗЫ не вытерпел, хотел послушать Ваши насмешки и совсем забыл что у нас по разному рабочий день начинается, придется долго ждать. Выкладываю картинку, прокомментируете?

Владимир Ситников
19.07.2016, 09:34
я рад, что моя подсказка "куда копать" помогла, а то четыре дня на простой код это очень много для математика :)
Пока не пойму куда всё это идёт, но как дойдёт, то, очевидно, capzap окажется в луже.


ЗЫ не вытерпел, хотел послушать Ваши насмешки и совсем забыл что у нас по разному рабочий день начинается, придется долго ждать. Выкладываю картинку, прокомментируете?

А что тут комментировать?
Учитываются же только 24 младших бита, и старшие несколько не учитываются.
Даже (16#00ffffff AND 16777215)/16777216.0 и то будет 0.999...
В чём проблема?

capzap
19.07.2016, 10:14
Пока не пойму куда всё это идёт, но как дойдёт, то, очевидно, capzap окажется в луже.
А что тут комментировать?
Учитываются же только 24 младших бита, и старшие несколько не учитываются.
Даже (16#00ffffff AND 16777215)/16777216.0 и то будет 0.999...
В чём проблема?
тогда вопрос, сколько байт тестируют тесты nist? И когда Вы скармливаете оскатовский вариант, который честно разбрасывает числа по всему четырехбайтовому диапазону, не получается ли что тест выкидывает из обращения утрированно 25% чисел, хотя это старший байт и я не знаю сколько чисел "округляется", может поэтому
В общем, шах и мат. Ни "генератор Петрова", "ни генератор OSCAT" не выдерживают тестов.
xorshift128 тривиально реализуется на ПЛК/ПР (и там и там есть 32bit unsigned int),

Владимир Ситников
19.07.2016, 10:22
тогда вопрос, сколько байт тестируют тесты nist? И когда Вы скармливаете оскатовский вариант, который честно разбрасывает числа по всему четырехбайтовому диапазону, не получается ли что тест выкидывает из обращения утрированно 25% чисел, хотя это старший байт и я не знаю сколько чисел "округляется" может поэтому

nist тесты тестируют 1 бит.

Вот как я использовал OSCAT'овский генератор для тестов nist:


float rdm = oscat_next();
if ( rdm < 0.5 )
bit = 0;
num_0s++;
}
else {
bit = 1;
num_1s++;
}
mask /= 2;
bitsRead++;
epsilon[i] = bit; // <-- этот массив потом проверяется в тестах nist


Т.е. от каждого вызова OSCAT генератора я тестировал лишь один бит.
Такой подход (использование только одного бита из всего float'а) используется в базовом примере nist теста -- lcg генератор генерирует double, и использует из него один-единственный бит.

Поэтому:
1) Считаю, что из OSCAT генератора использовалось максимально возможное количество бит
2) Возможно, OSCAT'овский генератор нужно ещё как-то проверять. Например, если OSCAT возвращает всегда либо 0 либо 0.99, то мой тест это не заметит (он же только с 0.5 сравнивает). Можно попробовать умножить результат OSCAT'а на 224 и использовать несколько бит оттуда.
Но, раз уж тест с <0.5 не работает, то нужно ли проверять больше бит?

capzap
19.07.2016, 10:36
nist тесты тестируют 1 бит.

Вот как я использовал OSCAT'овский генератор для тестов nist:


float rdm = oscat_next();
if ( rdm < 0.5 )
bit = 0;
num_0s++;
}
else {
bit = 1;
num_1s++;
}
mask /= 2;
bitsRead++;
epsilon[i] = bit; // <-- этот массив потом проверяется в тестах nist


Т.е. от каждого вызова OSCAT генератора я тестировал лишь один бит.
Такой подход (использование только одного бита из всего float'а) используется в базовом примере nist теста -- lcg генератор генерирует double, и использует из него один-единственный бит.

Поэтому:
1) Считаю, что из OSCAT генератора использовалось максимально возможное количество бит
2) Возможно, OSCAT'овский генератор нужно ещё как-то проверять. Например, если OSCAT возвращает всегда либо 0 либо 0.99, то мой тест это не заметит (он же только с 0.5 сравнивает). Можно попробовать умножить результат OSCAT'а на 224 и использовать несколько бит оттуда.
Но, раз уж тест с <0.5 не работает, то нужно ли проверять больше бит?

опять же не показана реализация флоата в oscat_next, маска из трех или четырех байт, если сделано по анологии с xorshift тогда теряется некоторая часть случайных значений и вряд ли будут пройдены тесты

Владимир Ситников
19.07.2016, 10:40
опять же не показана реализация флоата в oscat_next, маска из трех или четырех байт, если сделано по анологии с xorshift тогда теряется некоторая часть случайных значений и вряд ли будут пройдены тесты

Вот код rdm. Тесты НЕ проходит.


unsigned int bit_count(unsigned int n) {
unsigned int c;
for (c=0;n>0;n=n&(n-1)) c++;
return c;
}

unsigned int rol(unsigned int x, unsigned int n){
return (x << n)|(x >> (32-n));
}

void rdm()
{
int i, counter;
unsigned bit;
int num_0s, num_1s, v, bitsRead;
unsigned char x = 42;
unsigned char mask;
unsigned int T_PLC_MS = 7*24*3600*1000;
unsigned int tn;
unsigned int tc;

float m;
float rx;
float rdm;
float last;
float E = exp(1.0);

if ( ((epsilon = (BitSequence *) calloc(tp.n, sizeof(BitSequence))) == NULL) ) {
printf("Insufficient memory available.\n");
exit(1);
}
counter = 1;
last = 42;
for ( v=0; v < tp.numOfBitStreams; v++ ) {
mask = 0;
num_0s = 0;
num_1s = 0;
bitsRead = 0;
for ( i=0; i < tp.n; i++ ) {
// if (mask == 0) {
mask = 0x800000;
tn = clock() * 1000.0/ CLOCKS_PER_SEC;
tc = bit_count(tn);
tn |= (tn&(1 << (2))) << (31-2);
tn |= (tn&(1 << (5))) << (30-5);
tn |= (tn&(1 << (4))) << (29-4);
tn |= (tn&(1 << (1))) << (28-1);
tn |= (tn&(1 << (0))) << (27-0);
tn |= (tn&(1 << (7))) << (26-7);
tn |= (tn&(1 << (6))) << (25-6);
tn |= (tn&(1 << (3))) << (24-3);
tn = rol(tn, bit_count(tn)) | 0x80000001;
tn = tn % 71474513 + (tc + 77);
rdm = ((float)tn) / 10000000.0 * (E - (last < 0.0 ? 0 : (last > 1.0?1.0:last) ));
rdm = rdm - floor(rdm);
last = rdm;
// T_PLC_MS+=10;
// }
if ( rdm < 0.5 ) {//(x & mask) == 0 ) {
bit = 0;
num_0s++;
}
else {
bit = 1;
num_1s++;
}
mask /= 2;
bitsRead++;
epsilon[i] = bit;
}
fprintf(freqfp, "\t\tBITSREAD = %d 0s = %d 1s = %d\n", bitsRead, num_0s, num_1s); fflush(freqfp);
nist_test_suite();
}
free(epsilon);
}



Вот код xorshift128, тесты проходит (все, кроме теста LinearComplexity) (проходит как в варианте float 0..1, так и в варианте когда учитываем все 32 бита):


void
xorshift128()
{
int i, counter;
unsigned bit;
int num_0s, num_1s, v, bitsRead;
unsigned int res;
unsigned int mask;
unsigned int x = 123456789;
unsigned int y = 362436069;
unsigned int z = 521288629;
unsigned int w = 88675123;

if ( ((epsilon = (BitSequence *) calloc(tp.n, sizeof(BitSequence))) == NULL) ) {
printf("Insufficient memory available.\n");
exit(1);
}
counter = 1;

for ( v=0; v < tp.numOfBitStreams; v++ ) {
mask = 0;
num_0s = 0;
num_1s = 0;
bitsRead = 0;
for ( i=0; i < tp.n; i++ ) {
// if (mask == 0) {
mask = 0x80000000;
unsigned int t = x ^ (x << 11);
x = y; y = z; z = w;
w ^= (w >> 19) ^ t ^ (t >> 8);
res = w;
/* fprintf(freqfp, "value =
\n", res);
if (v > 1024) {
exit(-1);
}*/
// }
// if ( (res & mask) == 0 ) {
if ( (res&16777215)/16777216.0 < 0.5 ) {
bit = 0;
num_0s++;
}
else {
bit = 1;
num_1s++;
}
mask /= 2;
bitsRead++;
epsilon[i] = bit;
}
fprintf(freqfp, "\t\tBITSREAD = %d 0s = %d 1s = %d\n", bitsRead, num_0s, num_1s); fflush(freqfp);
nist_test_suite();
}
free(epsilon);
}


Что на этот раз?

capzap
19.07.2016, 11:05
unsigned int bit_count(unsigned int n) {
unsigned int c;
for (c=0;n>0;n=n&(n-1)) c++;
return c;
}

unsigned int rol(unsigned int x, unsigned int n){
return (x << n)|(x >> (32-n));
}

void rdm()
{
int i, counter;
unsigned bit;
int num_0s, num_1s, v, bitsRead;
unsigned char x = 42;
unsigned char mask;
unsigned int T_PLC_MS = 7*24*3600*1000;
unsigned int tn;
unsigned int tc;

float m;
float rx;
float rdm;
float last;
float E = exp(1.0);

if ( ((epsilon = (BitSequence *) calloc(tp.n, sizeof(BitSequence))) == NULL) ) {
printf("Insufficient memory available.\n");
exit(1);
}
counter = 1;
last = 42;
for ( v=0; v < tp.numOfBitStreams; v++ ) {
mask = 0;
num_0s = 0;
num_1s = 0;
bitsRead = 0;
for ( i=0; i < tp.n; i++ ) {
// if (mask == 0) {
mask = 0x800000;
tn = clock() * 1000.0/ CLOCKS_PER_SEC;
tc = bit_count(tn);
tn |= (tn&(1 << (2))) << (31-2);
tn |= (tn&(1 << (5))) << (30-5);
tn |= (tn&(1 << (4))) << (29-4);
tn |= (tn&(1 << (1))) << (28-1);
tn |= (tn&(1 << (0))) << (27-0);
tn |= (tn&(1 << (7))) << (26-7);
tn |= (tn&(1 << (6))) << (25-6);
tn |= (tn&(1 << (3))) << (24-3);
tn = rol(tn, bit_count(tn)) | 0x80000001;
tn = tn % 71474513 + (tc + 77);
rdm = ((float)tn) / 10000000.0 * (E - (last < 0.0 ? 0 : (last > 1.0?1.0:last) ));
rdm = rdm - floor(rdm);
last = rdm;
// T_PLC_MS+=10;
// }
if ( rdm < 0.5 ) {//(x & mask) == 0 ) {
bit = 0;
num_0s++;
}
else {
bit = 1;
num_1s++;
}
mask /= 2;
bitsRead++;
epsilon[i] = bit;
}
fprintf(freqfp, "\t\tBITSREAD = %d 0s = %d 1s = %d\n", bitsRead, num_0s, num_1s); fflush(freqfp);
nist_test_suite();
}
free(epsilon);
}

Что на этот раз?

Пересчет времени в секунды выполняется по формуле: clock() / CLOCKS_PER_SECследовательно Вы хотите получить миллисекунды, для работы в цикле, да еще на Вашем мощном компе у большинства итераций это будет постоянное число и это можно было бы не принимать в расчет, если бы следовать рекомендациям
in order to use rdm more then once within one sps cycle it need to be called with different seed numbers LASTоно к сожалению у Вас тоже постоянное, а не значение предыдущей итерации как это делал я

Владимир Ситников
19.07.2016, 11:14
оно к сожалению у Вас тоже постоянное, а не значение предыдущей итерации как это делал я
Где постоянное?

Вот эту строку видели?
last = rdm;

Она как раз обновляет last при каждой итерации.
Посмотрите ещё раз, но внимательнее.



следовательно Вы хотите получить миллисекунды, для работы в цикле, да еще на Вашем мощном компе у большинства итераций это будет постоянное число
Я пробовал +=10 -- тесты не проходят.
Пробовал и clock() -- тесты тоже не проходят.

Разумеется, если само значение T_PLS_MS будет давать хороший шум, то генератор будет более хорошим.
НО: зачем надеяться на то, что это T_PLS_MS будет хорошо шуметь? Где гарантия, что оно будет хорошо шуметь?
Зачем так цепляться за OSCAT random, правильность работы которого весьма сомнительна, да и которую ещё нельзя "часто-часто" вызывать?
У xorshift128 нет ограничений на количество вызовов в одну миллисекунду. Качество генератора не меняется со временем.
Я уже много раз это говорил эту мысль.

Хватит скакать с мысли на мысль.
capzap, вы там что-то про "куда копать" говорили.

Я мало того, что показал весь код, так ещё и проверил его. Видно, что в условиях совпадающих с рекомендуемыми для тестов, oscat тесты не проходит, а xorshift128 -- проходит.

Значения 0..1 тоже генерируются, проблем не вижу.

capzap
19.07.2016, 11:33
да, не заметил.

можно ведь и так задавать T_PLS_MS http://ru.stackoverflow.com/questions/186069/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BD%D0%BE%D 0%B5-%D0%B2%D1%80%D0%B5%D0%BC%D1%8F-%D1%81-%D1%82%D0%BE%D1%87%D0%BD%D0%BE%D1%81%D1%82%D1%8C%D 1%8E-%D0%B4%D0%BE-%D0%BD%D0%B0%D0%BD%D0%BE%D1%81%D0%B5%D0%BA%D1%83%D 0%BD%D0%B4

ну так если такой красивый уход с четырех на три байта решил проблему с получением реала, что тут еще можно сказать. Буду ждать когда Вы с четырьмя это проделаете используя только одну строчку

код показали, я правильно понимаю, что для тестов нужен такой "\t\tBITSREAD = %d 0s = %d 1s = %d\n" формат файла? Или можно произвольный?

Владимир Ситников
19.07.2016, 11:50
можно ведь и так задавать T_PLS_MS http://ru.stackoverflow.com/questions/186069/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BD%D0%BE%D 0%B5-%D0%B2%D1%80%D0%B5%D0%BC%D1%8F-%D1%81-%D1%82%D0%BE%D1%87%D0%BD%D0%BE%D1%81%D1%82%D1%8C%D 1%8E-%D0%B4%D0%BE-%D0%BD%D0%B0%D0%BD%D0%BE%D1%81%D0%B5%D0%BA%D1%83%D 0%BD%D0%B4
А смысл?
Есть же алгоритм xorshift128, который не зависит от качества генератора времени.
Обясните: зачем цепляться за OSCAT?
Если для вас это вопрос веры, а не здравого смысла, то так и скажите. Мне этого будет достаточно. Обращать вас в веру "общемировой математики" я не собираюсь.


ну так если такой красивый уход с четырех на три байта решил проблему с получением реала, что тут еще можно сказать. Буду ждать когда Вы с четырьмя это проделаете используя только одну строчку
Ничего не понимаю.

Давайте начистоту.


ну и, а теперь все Ваши явовские выкладки примените в КДС и выложите код, где получите РЕАЛ.
Я под сомнение не ставил, я всегда говорил что ожидаемый результат можно не получить
Раз пытаетесь уйти от темы, значит решения еще не нашли :)
Какой такой результат "можно не получить"?


я рад, что моя подсказка "куда копать" помогла, а то четыре дня на простой код это очень много для математика :)
О чём именно говорилось под словами "куда копать"?
Я расчехлил КДС, сделал там REAL, всё работает как я и ожидал.
В чём планировалась засада?



код показали, я правильно понимаю, что для тестов нужен такой "\t\tBITSREAD = %d 0s = %d 1s = %d\n" формат файла? Или можно произвольный?
Это просто отладочный код. Ну, чтобы по результатам замеров глазами посмотреть не случилось ли того, что "из-за ошибки в коде все значения оказались нулевыми".
Если речь про файл для тестирования генератора, то он просто бинарный. Ну или в любом формате, который можно в поток бит превратить.

capzap
19.07.2016, 12:12
Я расчехлил КДС, сделал там REAL, всё работает как я и ожидал.
ну это только с Ваших слов всё получилось в один присест, никогда раньше не упоминалось про 24 бита, а значит со стандартными 32 битами не выходило написать код, без лишних кусков кода

Владимир Ситников
19.07.2016, 12:24
ну это только с Ваших слов всё получилось в один присест, никогда раньше не упоминалось про 24 бита, а значит со стандартными 32 битами не выходило написать код, без лишних кусков кода

Чьёрт побери!
Вы спросили "как сделать float" -- я процитировал фрагмент из java (это было сообщение 132):
http://www.owen.ru/forum/showthread.php?t=901&page=14&p=215249&viewfull=1#post215249

После этого вас прорвало:
сообщение 138 "ожидаемый результат можно не получить"
и сообщение 144 "куда копать".

Посмотрите ещё раз на #132. Там ясно сказано про 24 бита.
И это вы называете "раньше не упоминалось про 24 бита"?
Снова ошиблись?

capzap
19.07.2016, 12:50
Это я помню. "на контроллерах законы математики не действуют", ага.



Оу, оу.
Это что-то новое.

Т.е. теперь "возможность реализации xorshift в КДС" уже под сомнение не ставится, но есть сомнение, что можно получить число от 0 до 1?
Интересные пироги.

На вскидку, есть 2 варианта:
1) java.util.Random.nextFloat (https://docs.oracle.com/javase/8/docs/api/java/util/Random.html#nextFloat--) -- для REAL


public float nextFloat() {
return next(24) / ((float)(1 << 24));
}


2) java.util.Random.nextDouble (https://docs.oracle.com/javase/8/docs/api/java/util/Random.html#nextDouble--) -- для LREAL


public double nextDouble() {
return (((long)next(26) << 27) + next(27))
/ (double)(1L << 53);
}

В итоге получается число от 0 (включительно) до 1.0 (не включительно).

next(n) -- это "очередное число длины n бит". Т.е.

next(n) == xorshift128() & ((1 << n)-1)

куда смотреть, да вижу знакомые цифры, есть next(24), а так же есть тext(26), next(27). У Вас имя Володя, из этого следует что Вы Путин или Ленин?

capzap
19.07.2016, 12:54
После этого вас прорвало:
сообщение 138 "ожидаемый результат можно не получить"
и сообщение 144 "куда копать".

а чего Вы это нетактично умолчали про пост #129, тогда я не знал что Вы оказывается будете иметь ввиду 24 бита и ждал результатов в КДС из 32-битного результата

Владимир Ситников
19.07.2016, 13:04
а чего Вы это нетактично умолчали про пост #129, тогда я не знал что Вы оказывается будете иметь ввиду 24 бита и ждал результатов в КДС из 32-битного результата
Во-первых, до момента #129 у меня и в мыслях не было вопроса "как получать 0..1"
Я просто знал, что, если есть хороший 32 битный генератор, то 0..1 уж точно можно получить.
Разумеется, я знал, что всегда могу подсмотреть в java как там получают nextFloat.

Более того, если вы в 129 думали, что я предложу что-нибудь в духе "next32bitRandom() / 232" (что, разумеется, неправильно), то уже в 132 (132 это и есть ответ на 129) было видно, что я предлагаю 24 бита.
Повторяю вопрос: к чему вы разводили демагогию про "может не получиться", "куда копать"?

Владимир Ситников
19.07.2016, 13:06
куда смотреть, да вижу знакомые цифры, есть next(24), а так же есть тext(26), next(27). У Вас имя Володя, из этого следует что Вы Путин или Ленин?

Смотреть на эту часть моего сообщения:

next(n) -- это "очередное число длины n бит". Т.е.

next(n) == xorshift128() & ((1 << n)-1)

Тут и по русски, и на C/Java сказано что такое next(n).
Более того, я сразу сказал, что говорю про java -- можно посмотреть что там подразумевается под next(n) (если хотите перепроверить мои слова).
Более того, я всегда говорил, что если мои слова неясны, то меня можно спросить. Я никогда не называю дураком человека, который спрашивает.

capzap
19.07.2016, 13:31
Смотреть на эту часть моего сообщения:


Тут и по русски, и на C/Java сказано что такое next(n).
Более того, я сразу сказал, что говорю про java -- можно посмотреть что там подразумевается под next(n) (если хотите перепроверить мои слова).
Более того, я всегда говорил, что если мои слова неясны, то меня можно спросить. Я никогда не называю дураком человека, который спрашивает.

когда пишут n подразумевается любое число, я как по этому должен понять что конкретно подставлять, то что Вы навскидку привели примеры с 24, да может Вам число это нравится, может у Вас такой возраст и т.п. Когда я посмотрел на Ваши исходники уже реального метода, тогда и увидел что используется 24 бита
ну раз Вы сменили тактику и теперь оказывается можно задавать вопросы и на них ответят,внимание вопрос:
давайте ка вернемся к первоисточникам, а в принципе можно и к Вашим словам http://www.owen.ru/forum/showthread.php?t=901&p=214963&viewfull=1#post214963
период повторений двойка в 128 степени минус один, какой период можно получить из трехбайтного числа и их четырехбайтного?

Владимир Ситников
19.07.2016, 13:49
когда пишут n подразумевается любое число, я как по этому должен понять что конкретно подставлять, то что Вы навскидку привели примеры с 24, да может Вам число это нравится, может у Вас такой возраст и т.п. Когда я посмотрел на Ваши исходники уже реального метода, тогда и увидел что используется 24 бита
Что?

1) Я использовал конкретное число. 24. С какого перепуга вы решили, что в КДС я стану использовать 32?
2) Я привёл ссылку на Java, и там недвусмысленно говорится, что "раньше использовалось 30 бит, но это неправильно, и правильнее использовать 24 бита". Откройте же, наконец, ссылку на java, которую я приводил. Вот она: java.util.Random.nextFloat (https://docs.oracle.com/javase/8/docs/api/java/util/Random.html#nextFloat--)
Там 5 раз используется число 24. Как можно подумать, что "это мой возраст и т.п."?

Т.е. возвращаемся к 132: получается, я сразу сказал, что надо использовать 24 бита, откуда могут возникнуть разночтения -- вообще непонятно.

Предлагаю вам просто признать, что ошиблись, и что зря разводили демагогию.


ну раз Вы сменили тактику и теперь оказывается можно задавать вопросы и на них ответят,внимание вопрос:
давайте ка вернемся к первоисточникам, а в принципе можно и к Вашим словам http://www.owen.ru/forum/showthread.php?t=901&p=214963&viewfull=1#post214963
период повторений двойка в 128 степени минус один, какой период можно получить из трехбайтного числа и их четырехбайтного?
Никакую тактику я не менял. Вопрос "какой период можно получить из трехбайтного числа и их четырехбайтного" непонятен.
Период повторений 2128-1 означает, что значения начнут полностью повторяться через 2128-1 запусков генератора (ну, возможно, где-то плюс-минус один -- думаю, не так важно).
Т.е. на вопрос "какой период у получающегося 32-bit unsigned int" ответ -- 2128-1
Какой период будет у значений, если их брать как AND(..., 224-1) -- не знаю.

Но есть наблюдение: ни на wikipedia, ни в исходной статье про xorshift не сказано, что "энтропия младших бит гораздо уже".
Поэтому, разумно полагать, что "даже если брать младшие 24 бита", то всё нормально.

Практически это подтверждается -- генератор, который использует 24 бита из 32 проходит большинство nist тестов.

capzap
19.07.2016, 14:01
С какого перепуга вы решили, что в КДС я стану использовать 32?

да согласно документа который Вы мне предоставили как исходную статью исходную статью (http://www.owen.ru/forum/showthread.php?t=901&p=214890&viewfull=1#post214890)
All of the above procedures return a 32-bit integer, although the procedures create sequences of pairs (x, y), or triples (x, y, z) or quadruples (z, y, z,w) of the maximal period, 2n −1, over binary vector spaces of dimension n = 64, 96, 128

Владимир Ситников
19.07.2016, 14:10
да согласно документа который Вы мне предоставили как исходную статью исходную статью (http://www.owen.ru/forum/showthread.php?t=901&p=214890&viewfull=1#post214890)

Ничего не понимаю.
Третий раз повторяю: посмотрите на #132. Там сказано про 24. Там сказано и что такое next(24). Там ссылки на java, где тоже 24.
Предлагаю вам просто признать, что ошиблись, и что зря разводили демагогию.

С чего это я должен использовать деление на 232?
Вы ещё вполне могли так про меня думать _до_ 132-го сообщения. Но после 132-го стало ясно, что моё мнение -- 24 бита для float'ов.

Раз уж упомянули #23 (http://www.owen.ru/forum/showthread.php?t=901&page=3&p=214890&viewfull=1#post214890), то напомню, что #23 было ответом на ваше возражение "в ПЛК нет восьмибайтных чисел, поэтому xorshift работать будет плохо".
В 23 я и говорю: можно использовать не xorshift128plus (которое требует 8-и байтных чисел), а простой xorshift128 (которое работает исключительно на 32 bit числах, которые есть в ПЛК)

В документации на xorshift128 сказано, что если используется 4шт 32bit integer'а, то получается период 2128-1.

capzap
19.07.2016, 14:41
Вы ещё вполне могли так про меня думать _до_ 132-го сообщения. Но после 132-го стало ясно, что моё мнение -- 24 бита для float'ов.
тоже в очередной раз повторяю, ясно мне стало после просмотра исходника. Повторить мое отношение к ссылкам на иностранном языке, я в них не вникаю без особой нужды, конкретно что 24 стоит не просто так, это Вы мне сейчас объясняете, а там был просто приведенный пример, включая и явовские исходники, если не углубляешься в перевод. По поводу документации на xorshift написано о возвращаемых значениях 32-битного формата, ни о каких трех из четырех байт не упоминается, счего я должен обращать внимание зачем Вы используете 24

Владимир Ситников
19.07.2016, 14:48
тоже в очередной раз повторяю, ясно мне стало после просмотра исходника.
Исходник был дан в 132.
Там было написано по-русски что к чему.
Я привёл конкретный код, и это вовсе не значит, что там любую цифру можно вертеть как душе угодно.

Итак, исходник дан в 132, после просмотра стало ясно.
Когда же вы "просмотрели" этот исходник?

Предлагаю вам просто признать, что ошиблись, и что зря разводили демагогию ("может не получиться", "куда копать")


ни о каких трех из четырех байт не упоминается, счего я должен обращать внимание зачем Вы используете 24
А с того, что если кто-то привёл конкретный код, то есть 2 варианта:
1) Либо вы используете его один к одному, без каких-либо доработок. Ну, если задача совпадает с той, которую решает код, то так и нужно делать.
2) Либо вы включаете мозг, и смотрите почему выбраны именно конкретные константы, на что они влияют, можно ли их менять и т.п.

Очевидно, фазы "включения мозга" не было, значит нужно действовать по 1-му плану "просто брать код один в один".
Бритва Оккама (https://ru.wikipedia.org/wiki/%D0%91%D1%80%D0%B8%D1%82%D0%B2%D0%B0_%D0%9E%D0%BA% D0%BA%D0%B0%D0%BC%D0%B0) как раз на эту тему -- не нужно плодить лишних сущностей, и уж тем более не нужно лишний раз менять чужой код, особенно, когда ничего в нём не понимаешь.



счего я должен обращать внимание зачем Вы используете 24
Так не пойдёт. Демагогию про "может не получиться" не я начал.
Вы начали эту демагогию, и начали её уже после того, как я опубликовал вариант с 24 битами.

Получается, вы вообще не обратили внимание на #132 со словами "а счего я должен обращать внимание зачем Вы используете 24", и потом начали троллить "может не получиться", "куда копать"?

capzap
19.07.2016, 15:24
Исходник был дан в 132.
Там было написано по-русски что к чему.
Я привёл конкретный код, и это вовсе не значит, что там любую цифру можно вертеть как душе угодно.

Итак, исходник дан в 132, после просмотра стало ясно.
Когда же вы "просмотрели" этот исходник?

Предлагаю вам просто признать, что ошиблись, и что зря разводили демагогию ("может не получиться", "куда копать")


А с того, что если кто-то привёл конкретный код, то есть 2 варианта:
1) Либо вы используете его один к одному, без каких-либо доработок. Ну, если задача совпадает с той, которую решает код, то так и нужно делать.
2) Либо вы включаете мозг, и смотрите почему выбраны именно конкретные константы, на что они влияют, можно ли их менять и т.п.

Очевидно, фазы "включения мозга" не было, значит нужно действовать по 1-му плану "просто брать код один в один".
Бритва Оккама (https://ru.wikipedia.org/wiki/%D0%91%D1%80%D0%B8%D1%82%D0%B2%D0%B0_%D0%9E%D0%BA% D0%BA%D0%B0%D0%BC%D0%B0) как раз на эту тему -- не нужно плодить лишних сущностей, и уж тем более не нужно лишний раз менять чужой код, особенно, когда ничего в нём не понимаешь.

еще раз поясняю, когда в конце текстовки расписывается что next(n) это то то, где n это то то, ни о каких константах речи не идет, можно подставлять всё что угодно, если Вам подфортило, что я не обратил внимание что было в ссылках, это не значит что Вы довели до меня что берете младшие 24 бита.
Вы не умеете доводить информацию до людей, это именно Вы занимаетесь демогогией, постоянными придирками к каким то фразам, не несущим смысловой нагрузки в рамках темы, вот именно по этому мне от Вас нужны только исходные коды программ, к Вашим словам и ссылкам у меня нет доверия.
Кстати ГСЧ типа Wichmann-Hill проходят тесты nist? Это был вопрос

capzap
19.07.2016, 17:56
а вот собственно и подтверждение мною вышесказанного

А с чего вы взяли, что у вас правильный тест? Может, ваш тест погоду показывает.
В чём смысл тотального отрицания мирового опыта?
потому что это классический расчет среднего...
Внимание, вопрос: почему не взять классический тест? Тест frequency из состава nist считает количество нулевых и единичных бит...
отклонение от эталонной средней больше процента

и описание теста
Тест оценивает, насколько близка доля единиц к 0,5. Таким образом, число нулей и единиц должно быть примерно одинаковым. Если вычисленное в ходе теста значение вероятности p < 0,01, то данная двоичная последовательность не является истинно случайной. В противном случае последовательность носит случайный характер. Стоит отметить, что все последующие тесты проводятся при условии, что пройден данный тест.
среднее присутствует, вероятность тоже равна одному проценту
Получается говорили об одном и том же, а по факту я невежда. Выше уже писалось что нельзя определять по картинке, но картинка рисуется на основе этих данных

Владимир Ситников
19.07.2016, 18:24
а вот собственно и подтверждение мною вышесказанного
capzap "слышал звон, да не знает где он".


и описание теста
Это неправильное описание (ну, формально, описание правильное, но его очень легко прочитать неправильно -- не хватает слов о том, что именно там является "вычисленным в ходе теста значением"). Под p, разумеется, имеется ввиду p-значение (https://ru.wikipedia.org/wiki/P-%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5), а НЕ среднее и НЕ вероятность.


Вот frequency test из nist.
Если найдёте где тут про "отклонение от эталонной средней больше процента" -- дайте знать.


/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
F R E Q U E N C Y T E S T
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#define ALPHA 0.01 /* SIGNIFICANCE LEVEL */

void
Frequency(int n)
{
int i;
double f, s_obs, p_value, sum, sqrt2 = 1.41421356237309504880;

sum = 0.0;
for ( i=0; i < n; i++ )
sum += 2*(int)epsilon[i]-1;
s_obs = fabs(sum)/sqrt(n);
f = s_obs/sqrt2;
p_value = erfc(f);

fprintf(stats[TEST_FREQUENCY], "\t\t\t FREQUENCY TEST\n");
fprintf(stats[TEST_FREQUENCY], "\t\t---------------------------------------------\n");
fprintf(stats[TEST_FREQUENCY], "\t\tCOMPUTATIONAL INFORMATION:\n");
fprintf(stats[TEST_FREQUENCY], "\t\t---------------------------------------------\n");
fprintf(stats[TEST_FREQUENCY], "\t\t(a) The nth partial sum = %d\n", (int)sum);
fprintf(stats[TEST_FREQUENCY], "\t\t(b) S_n/n = %f\n", sum/n);
fprintf(stats[TEST_FREQUENCY], "\t\t---------------------------------------------\n");

fprintf(stats[TEST_FREQUENCY], "%s\t\tp_value = %f\n\n", p_value < ALPHA ? "FAILURE" : "SUCCESS", p_value); fflush(stats[TEST_FREQUENCY]);
fprintf(results[TEST_FREQUENCY], "%f\n", p_value); fflush(results[TEST_FREQUENCY]);
}


а по факту я невежда.
Ага, так и есть. Вы сравниваете "отклонение от среднего с 1%" -- а в статистике всегда p-значения используются.

Не разбираетесь в статистике -- не беда :D Просто знайте, что если встанет вопрос про математическую статистику, то нужно не кулибинством заниматься, а спросить у тех, кто в теме. Ну и не стоит напрасно обвинять других в "демагогии", в "постоянных придирках" и т.п.

capzap
19.07.2016, 19:08
так что там по Wichmann-Hill?

да и
Это неправильное описание https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D 1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D1%82%D0%B5%D1 %81%D1%82%D1%8B_NIST здесь отпишитесь , что они неправильно трактуют

Владимир Ситников
19.07.2016, 19:14
так что там по Wichmann-Hill?

Вы не умеете доводить информацию до людей, это именно Вы занимаетесь демогогией, постоянными придирками к каким то фразам, не несущим смысловой нагрузки в рамках темы, вот именно по этому мне от Вас нужны только исходные коды программ, к Вашим словам и ссылкам у меня нет доверия. Кстати ГСЧ типа Wichmann-Hill проходят тесты nist? Это был вопрос
Спасибо за тёплые слова, но я не вижу возможности ответить кодом на вопрос "проходит ли ГСЧ Wichmann-Hill тесты nist".

capzap
19.07.2016, 19:54
я не вижу возможности ответить кодом на вопрос "проходит ли ГСЧ Wichmann-Hill тесты nist".

да вообщем то и не ждал, сильно упрощенную версию Вы и так уже забраковали

rovki
19.07.2016, 20:31
С переездом товарищи ;)

alexusankov
19.07.2016, 23:00
rovki, видите, мои доработки учтены, макрос стал лучше, трава зеленее и всё такое.
Вы, Бога ради, меня извините, но у меня ощущение, что в детстве/юности, Вас очень сильно огорчила концепция ПЛК в частности, либо Вы довольно толстый тролль.
Либо, самый конченный, и вероятный вариант - Вас обидели и выгнали с хабра.
Вы действительно не понимаете, о чем спорите, или правда некомпетентны? Вы действительно не хотите внимательно прочитать название темы, и первую страницу, или Вам настолько доставляет удовольствие в словоблудии, что это не имеет значения?

capzap
19.07.2016, 23:25
после того как у меня на руках появились код метода и код теста, я убедился что xorshift лучше, одного не пойму так трудно было сразу все предоставить, не вижу ни чего зазорного в лужу сесть, если по другому не вытянуть

alexusankov
19.07.2016, 23:28
В оскат практически наверняка палёная рандомная функция.
Использование неправильных рандомных функций запросто может приводить к неправильным вычислениям и т.п.

Спасибо, поржал. С момента, (*практически наверняка*) можно прям в блокнот цитат записывать.

rovki
19.07.2016, 23:42
после того как у меня на руках появились код метода и код теста, я убедился что xorshift лучше, одного не пойму так трудно было сразу все предоставить, не вижу ни чего зазорного в лужу сесть, если по другому не вытянуть
Еще бы знать где в асутп применить .Эти вытягивания не стоят столько сил и здоровья ...Я всегда говорил - проект в студию ,а потом посмотрим и сравним .А то хаить чужие проекты проще ,когда свои мысли выражаются на другом да же языке программирования ,чем сделать законченый проект .А то получается -я тут идею вам подкинул (на своем языке) ,а вы если надо сами догоняйте на своем языке ..и бесконечные ссылки на википедию .Что создается впечатление ,что человек только что сам прочитал и уже учит других ...Потому и советы,да же хорощие воспринимаются в штыки ...

Владимир Ситников
19.07.2016, 23:56
после того как у меня на руках появились код метода и код теста, я убедился что xorshift лучше, одного не пойму так трудно было сразу все предоставить, не вижу ни чего зазорного в лужу сесть, если по другому не вытянуть

capzap, учитесь читать. Как не стыдно писать "вытянуть" и "после того как у меня на руках появились код метода и код теста"?

Ссылку на исходный код инструмента NIST и инструмента dieharder я привёл в сообщении 21.
Но нет, наш capzap ленивый, и читает только то, что ему интересно. Разумеется, с какого перепуга он вообще что-то читать должен?


Вас в Google забанили?
https://www.google.ru/search?q=Randomness+tests
https://en.wikipedia.org/wiki/Randomness_tests
http://stackoverflow.com/questions/2130621/how-to-test-a-random-generator

http://csrc.nist.gov/groups/ST/toolkit/rng/documentation_software.html <-- один инструмент -- это и есть ссылка на исходный код nist тестов
http://www.phy.duke.edu/~rgb/General/dieharder.php <-- второй

Владимир Ситников
20.07.2016, 00:05
Еще бы знать где в асутп применить .Эти вытягивания не стоят столько сил и здоровья ...Я всегда говорил - проект в студию ,а потом посмотрим и сравним .А то хаить чужие проекты проще ,когда свои мысли выражаются на другом да же языке программирования ,чем сделать законченый проект .А то получается -я тут идею вам подкинул (на своем языке) ,а вы если надо сами догоняйте на своем языке ..и бесконечные ссылки на википедию .Что создается впечатление ,что человек только что сам прочитал и уже учит других ...Потому и советы,да же хорощие воспринимаются в штыки ...

Rovki, который ставит пробелы перед точками и запятыми наперекор лучшим традициям русского языка, вы бы на 142-е (http://www.owen.ru/forum/showthread.php?t=901&p=215282&viewfull=1#post215282) лучше ответили. Ну или признались что соврали/ошиблись.

Есть библиотека OSCAT. Там есть генератор случайных значений. Значит кому-то было нужно. Можете идти к авторам OSCAT и с пеной у рта доказывать, что "никомуненужно".
Метод, который предложил сначала Владислав, а потом я проще, быстрее, и случайнее чем то, что в библиотеке OSCAT.

Слабо Владиславу такое написать в ответ на 2-е сообщение (http://www.owen.ru/forum/showthread.php?t=901&p=4945&viewfull=1#post4945)?

я тут идею вам подкинул (на своем языке) ,а вы если надо сами догоняйте на своем языке ..и бесконечные ссылки на википедию





Что создается впечатление ,что человек только что сам прочитал и уже учит других
А какая разница _когда_ я прочитал справочник, если по факту всегда оказываюсь прав?
Вот capzap, другое дело. Смотрит на "процент отклонения от среднего". Это уж точно первый раз открыл справочник, увидел знакомое слово "вероятность", и без включения мозга пошёл писать код.

rovki
20.07.2016, 06:38
Мне с ПР дела до оската нет,туда и нелез ,я работал с макросом AI, а ваш так и не увидел ,любитель русским языком чесать ...

capzap
20.07.2016, 07:04
сколько угодно можно писать, что я там не включил, что услышал, только я не изменил себе, взял и руками всё попробовал и предложенный Вами мировой опыт и методы от светил статистики. Да разницы особо и нет. Xorshift находит среднее оригинальным способом, относительно нуля а не 0.5. Далее вместо дисперсии ищется интеграл. Разница в один процент между полученной средней и 0.5 как критерий намного жестче, чем erfc
Что же касается
а потом я проще, быстрее, и случайнее чем то, что в библиотеке OSCATда как сказать, в дополнение к этому методу, потребуется генерировать четыре случайных двойных слова,так что по коду там преимуществ ни у кого особых нет

IIeroniux
20.07.2016, 08:35
Как случайный зритель отмечу - capzar признал правоту владимира в 174 посте, а владимир опять срывается до неуважительного отношения. Пример "и без включения мозга", как в 176 посте, хорошо это показывает. Знания - знания, но так самоутверждаться...
Знаете лучше - спокойно объясните без нервных срывов. Берите пример с Petera, великий человек. Ни разу не видел подобного отношения даже к самому ''трудному' собеседнику.

capzap
20.07.2016, 08:52
ну в общем то пару замеров на ночь глядя не показатель, сегодня при 5000 генераций всё нормально, при 10000 с чего то вдруг переменная sum начала принимать значения в 3 раза больше максимально возможных единиц, хотя среднее показывает как обычно в пределах 0.5, от метода не зависит

ЗЫ выложил еще один генератор, как должен был бы выглядеть генератор от И.Петрова

rovki
20.07.2016, 09:16
поясните мне не математику ,что плохого в случайной последовательности чисел ,в которой исключены "склейки" -повторение подряд одинаковых чисел .Я понимаю что такое может быть по теории вероятности ,если бочонки вытащенные из мешка опять бросаются в мешок ,но мне не нужна такая последовательность .Мне нужно ,что бы было как в игре старинной -лото .Вытащил бочонок из кубышки и его уже нет в списке .После последнего бочонка снова тусуем мешок и продолжаем вытаскивать бочонки (но без повторения значений) ...Вот что плохого в таком алгоритме генерации случайного числа? .Количество бочонков в мешке- это диапазон случайных чисел .
Для меня "склейки" на фоне белого шума" это щелчки .

rovki
20.07.2016, 10:08
Мало сделать генератор RND (источник) ,который работает на своей частоте (цикла) ,но нужно еще позаботится что бы приемник работал на той же частоте считывания ,что не удобно и не приемлемо с практической точки зрения .Например генератор генерит значения с периодом 1мс , а приемник может работать с периодом 1сек .Тогда может получится совсем другая картинка на входе приемника ...далекая от белого шума ...То есть генератор должен подстраиваться под быстродействие приемника так что бы не нарушалась равновероятность и не было "Склеек".Вот такой генератор может иметь практическое применение .!

Владимир Ситников
20.07.2016, 10:10
Как случайный зритель отмечу - capzar признал правоту владимира в 174 посте, а владимир опять срывается до неуважительного отношения. Пример "и без включения мозга", как в 176 посте, хорошо это показывает. Знания - знания, но так самоутверждаться...
Знаете лучше - спокойно объясните без нервных срывов. Берите пример с Petera, великий человек. Ни разу не видел подобного отношения даже к самому ''трудному' собеседнику.

О, мнения зрителей, безусловно, интересны. Полагаю, имелось ввиду 173.
Но не считаете ли вы, что порядочный человек должен хотя бы извиниться?

Действительно ли по-вашему достаточно фразы capzap'а "я убедился что xorshift лучше, одного не пойму так трудно было сразу все предоставить, ..., если по другому не вытянуть"?
В #21 (http://www.owen.ru/forum/showthread.php?t=901&p=214879&viewfull=1#post214879) было же все предоставлено. Чего тогда человек "вытягивал" на протяжении 21...173?
Я даже пару раз суммировал #74 (http://www.owen.ru/forum/showthread.php?t=901&p=215004&viewfull=1#post215004), #113 (http://www.owen.ru/forum/showthread.php?t=901&p=215095&viewfull=1#post215095).

capzap
20.07.2016, 10:15
.
Но не считаете ли вы, что порядочный человек должен хотя бы извиниться?


порядочные люди извиняются перед такими же порядочными людьми, Вы к ним относитесь?

Владимир Ситников
20.07.2016, 10:21
Вот что плохого в таком алгоритме генерации случайного числа? .Количество бочонков в мешке- это диапазон случайных чисел .
Для меня "склейки" на фоне белого шума" это щелчки .
0) Для каких-то задач "генератор без повторений" может и потребоваться. Но слепо использовать его для всех задач -- нехорошо.

Если говорить чем "в целом" плох генератор, который выдаёт циклами без повторений, то
1) Плохо то, что он предсказуем. Например, если генерируем числа от 0 до 4, и 0, 1, 2, 3 уже выпали, то с вероятностью 100% выпадет число 4.
2) Плохо то, что нет эффективной реализации для произвольного диапазона. Нет от слова "совсем". Хорошую реализацию можно сделать через массив. Т.е. заполнить его числами от 0 до N, перемешать, и выдавать по одному. На ST это тривиально, а в ОЛ уже проблематично. Но, стоит понимать, что большие массивы держать в памяти и перемешивать всё равно время займёт.
3) Для частных случаев (некоторых N) можно сделать алгоритм не требующий массива, но он при этом будет выдавать лишь часть из возможных перестановок.

Владимир Ситников
20.07.2016, 10:26
Мало сделать генератор RND (источник) ,который работает на своей частоте (цикла) ,но нужно еще позаботится что бы приемник работал на той же частоте считывания ,что не удобно и не приемлемо с практической точки зрения .Например генератор генерит значения с периодом 1мс , а приемник может работать с периодом 1сек .Тогда может получится совсем другая картинка на входе приемника ...далекая от белого шума ...То есть генератор должен подстраиваться под быстродействие приемника так что бы не нарушалась равновероятность и не было "Склеек".Вот такой генератор может иметь практическое применение .!

rovki, добро пожаловать в мир ПЛК. Тут функциональный блок вызывают тогда, когда нужно. Т.е. генератор и потребитель синхронизированы автоматически. Поэтому то, что пишете в КДС уже есть. Вы же помните, что тема была не в ветке ОЛ, а в ветке КДС2?

В целом, можно и в ОЛ было бы такое же сделать, чтобы часть схемы обрабатывалась только тогда, когда нужно. Например, сделать у макросов "официальный" тактовый вход, и чтобы макрос выполнялся только по фронту сигнала, а, если фронта нет, то чтобы сохранялось старое состояние.

Владимир Ситников
20.07.2016, 10:29
порядочные люди извиняются перед такими же порядочными людьми, Вы к ним относитесь?

Всё время стараюсь быть порядочным. Иногда и до такого доходит:


Вы не умеете доводить информацию до людей, это именно Вы занимаетесь демогогией, постоянными придирками к каким то фразам, не несущим смысловой нагрузки в рамках темы, вот именно по этому мне от Вас нужны только исходные коды программ, к Вашим словам и ссылкам у меня нет доверия. Кстати ГСЧ типа Wichmann-Hill проходят тесты nist? Это был вопрос
Спасибо за тёплые слова, но я не вижу возможности ответить кодом на вопрос "проходит ли ГСЧ Wichmann-Hill тесты nist".

capzap
20.07.2016, 10:37
Всё время стараюсь быть порядочным. Иногда и до такого доходит:

да у Вас комплексы, стараетесь это хорошо, как насчет тогда свои срывы процитировать, а не только старание быть сдержанным, но ни как не проявление порядочности

Владимир Ситников
20.07.2016, 11:02
да у Вас комплексы, стараетесь это хорошо, как насчет тогда свои срывы процитировать, а не только старание быть сдержанным, но ни как не проявление порядочности
Это шикарно. Поясню, что имею ввиду: capzap оскорбляет фразами "да у Вас комплексы", но при этом никак не подтверждает их. Capzap полностью игнорирует #74 (http://www.owen.ru/forum/showthread.php?t=901&p=215004&viewfull=1#post215004) и #113 (http://www.owen.ru/forum/showthread.php?t=901&p=215095&viewfull=1#post215095), в которых фраза "capzap, ты неправ" подтверждается конкретными примерами, а не абстрактным "свои срывы".

Цитируйте -- обсудим что было не так с моей стороны.

Жаль, что моё сообщение про "capzap сядет в лужу" удалили (ну, то, я где-то после 138 (http://www.owen.ru/forum/showthread.php?t=901&page=14&p=215273&viewfull=1#post215273) понял, что float 0..1 получится и capzap зря дискуссию разводит)

rovki
20.07.2016, 11:13
0) Для каких-то задач "генератор без повторений" может и потребоваться. Но слепо использовать его для всех задач -- нехорошо.

Если говорить чем "в целом" плох генератор, который выдаёт циклами без повторений, то
1) Плохо то, что он предсказуем. Например, если генерируем числа от 0 до 4, и 0, 1, 2, 3 уже выпали, то с вероятностью 100% выпадет число 4.
2) Плохо то, что нет эффективной реализации для произвольного диапазона. Нет от слова "совсем". Хорошую реализацию можно сделать через массив. Т.е. заполнить его числами от 0 до N, перемешать, и выдавать по одному. На ST это тривиально, а в ОЛ уже проблематично. Но, стоит понимать, что большие массивы держать в памяти и перемешивать всё равно время займёт.
3) Для частных случаев (некоторых N) можно сделать алгоритм не требующий массива, но он при этом будет выдавать лишь часть из возможных перестановок.
0) Не хорошо не приводить расчеты и аргументы ,а только фразы
1)Для меня равновероятно ,имхо -это когда каждое число может выпасть с равной вероятностью .для 1из 10 -10% ,а 1 из 1-100% ,естественно .Тоесть сначала вероятность у всех 10% ,потом 11.1 ,12.5 ,14.3, 16.7 ,20 ,25,33.3,50,100. по сравнению с начальной кучей .Тоесть вероятность растет у оставшихся по сравнению с общей кучей (10шт) ,но между собой они имеют равную вероятность быть выташенными ,что 3 из 3 ,что 5 из 5 каждый имеет равную вероятность .Меня не интересует вероятность оставшихся по сравнению с общей кучей ,меня интересует выроятность вытащенных значений (генерации) между собой .Да, цикл (куча) генерится вновь ,поэтому не 1из 1 остается ,а постоянно 1 из 10
2)использование массивов не представляется возможным при разности скоростей приема\передачи в 10раз ,ни какого стека не хватит ,он переполнится .

capzap
20.07.2016, 11:15
насколько я понимаю, раз Ваши комменты удаляют, значит не только у меня есть чувство, что Вы бестактны. Комплексы Ваши сами выходят наружу, это могут видеть все, будь Вы стократ грамотнее вех тут вместе взятых. Цитировать Ваше хамство я не буду, это Ваш удел цепляться ко всему. Я не вижу своей не правоты, до такой степени чтоб извинятся. А по поводу реала, вот когда повторите это для 32 битного слова, тогда и "кричите на весь мир" что поймали меня на не знании законов математики в плк. Кстати про лужу я продублировал если что и без Вашего коммента

Владимир Ситников
20.07.2016, 11:30
А по поводу реала, вот когда повторите это для 32 битного слова, тогда и "кричите на весь мир" что поймали меня на не знании законов математики в плк
Про 32бита я "кричу на весь мир", т.к. это один из примеров, где безоговорочно понятно, что вы неправы, а вы всё равно упираетесь и пытаетесь всячески оправдаться.

capzap
20.07.2016, 11:37
Про 32бита я "кричу на весь мир", т.к. это один из примеров, где безоговорочно понятно, что вы неправы, а вы всё равно упираетесь и пытаетесь всячески оправдаться.

Вы показывали работу ПК, а где скрин с реально работающего плк, обрабатывающий генерацию случайных 32-битных чисел, xorshift не проходит тест. Собственно чего это я, опять сейчас услышу, что законы математики везде одинаковы и кому то достаточно результатов на ПК
ЗЫ если побежали проверять на плк, чтоб не было фраз у меня вышло, договаривайте сколько добавили лишних символов в код, не говорю про строки, всё помещается может и в одну

AI!
20.07.2016, 11:43
Если говорить чем "в целом" плох генератор, который выдаёт циклами без повторений, то
1) Плохо то, что он предсказуем. Например, если генерируем числа от 0 до 4, и 0, 1, 2, 3 уже выпали, то с вероятностью 100% выпадет число 4.
2) Плохо то, что нет эффективной реализации для произвольного диапазона. Нет от слова "совсем".А ничего что я уже написал сей макрос?
Который генерирует число от 0 до n без повторений, где n произвольное, меньше 1024.
А называется макрос rnd1024.

PS если есть желание, сам генератор можно легко поменять на ваш, а обработчик массива оставить мой.

Владимир Ситников
20.07.2016, 12:11
А ничего что я уже написал сей макрос?
Который генерирует число от 0 до n без повторений, где n произвольное, меньше 1024.
А называется макрос rnd1024.
Поясню, что я имею ввиду: по сути, задача "выборки n значений от 0 до n-1 без повторений" эквивалентна задаче "генерации случайной перестановки чисел от 0 до n-1" (по-английски это random shuffle)

1) Задача random shuffle обычно решается через массив: Тасование Фишера–Йетса (https://ru.wikipedia.org/wiki/%D0%A2%D0%B0%D1%81%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D 0%B5_%D0%A4%D0%B8%D1%88%D0%B5%D1%80%D0%B0%E2%80%93 %D0%99%D0%B5%D1%82%D1%81%D0%B0)
Если бы было можно просто "брать и генерировать очередное значение", то такой алгоритм наверняка бы упомянули в wikipedia. Но, нет, там про тасовку значений пишут, что всё-таки нужен массив, и при реализации Фишера–Йетса нужно быть внимательным, т.к. легко ошибиться и тасовка станет очень плохой.

Кстати, в OSCAT функция _ARRAY_SHUFFLE неправильная (там в 2 раза меньше перестановок чем надо, там плохой генератор и т.п.): https://github.com/simsum/oscat/blob/master/_ARRAY_SHUFFLE.EXP#L27-L34

Следующий момент -- для генерации перестановки большого количества элементов нужен ГСЧ очень высокого качества.
Например, из 1024 элементов есть 1024! перестановок. Для кодирования такого количества нужно log(1024!, 2) бит информации, т.е. примерно 8769 бит.
Это почти в 70 раз больше, чем внутреннее состояние xorshift128. Т.е. нужен либо ГСЧ с большим состоянием, либо нужно эффективно подмешивать энтропию "по ходу генерации". Да, тактование (выборка результата ГСЧ в случайный момент) является одним из таких действий, но тут большой вопрос сколько бит энтропии даёт подобное действо.

Получается, нужно крайне аккуратно следить за ГСЧ, иначе большая часть "возможных перестановок" вообще никогда не будет сгенерирована.


2) Есть ещё второй вариант -- pseudorandom permutation. Более известное как "симметричный шифр".
Например если есть алгоритм шифрования, шифрующий значения 0..63 с помощью ключа K, то "псевдослучайную перестановку" можно получить, если зашифровать значения 0, 1, 2 и т.п. последовательно. Т.е. Encrypt(0, K), Encrypt(1, K), и так далее. Разумеется, после каждого цикла нужно менять ключ шифрования и/или алгоритм шифрования.

Но тут 2 вопроса: во первых, ключ шифрования должен быть немалой длины (ну, чтобы хотя бы в теории закодировать все возможные n! перестановок), а во-вторых, на ум не приходят алгоритмы шифрования, у которых входной-выходной диапазон можно менять как параметр.
Ну, можно найти семейство алгоритмов, которые работают в числах 0...2n-1. В частности, 0..63, но если понадобится генератор "от 0 до 62 без повторений", то нужно будет ещё что-то придумывать.

Например, сработает такой алгоритм (но внутренний цикл while(nextValue>n) неудобно реализовывать на ОЛ):


int n=49; // хотим получить перестановки от 0 до n
int k=42; // ключ шифрования
for(int i=0; i < n; i++) {
int nextValue = Encrypt(i, k); // Считаем, что Encrypt выдаёт значения от 0 до 63
while(nextValue > n) { // Если оказалось 50..63, то значение не подходит -- шифруем его пока не попадёт в диапазон 0..49
nextValue = Enrcypt(nextValue, k); // да, повторно шифруем значение, если оно выходит за диапазон
}
System.out.println("next value = " + nextValue);
}



Для справки, ln(64!)/ln(2) == 296. Т.е. для описания всех возможных 64! перестановок нужно почти 300 бит энтропии.

3) Идея с "давайте просто запоминать выпавшие числа, и если выпадет повторно, то бросать кость заново" понятна, но в ОЛ это убого, и приходится идти на уступки вида "если значение уже было, то возьмём просто следующее свободное". Это самое "следующее свободное" нарушает "случайность" перестановки -- т.е. генератор генерирует biased (как оно по-русски? смещённые? неравномерно распределённые?) последовательности.

AI!
20.07.2016, 12:26
Не понимаю зачем вся эта теория...
У меня делается просто, ка говорил rovki:
Мне нужно ,что бы было как в игре старинной -лото .Вытащил бочонок из кубышки и его уже нет в списке .После последнего бочонка снова тусуем мешок и продолжаем вытаскивать бочонки (но без повторения значений) .Количество бочонков в мешке- это диапазон случайных чисел . При этом соседние "игры" запросто могут быть одинаковые, или одинаковыми могут быть последний бочонок предыдущей игры и первый следующей, но пока как бочонки не кончатся, повторений не будет!

PS раз вы дописали, то и я допишу... Мой макрос работает по алгоритму описанному в третьем пункте предыдущего сообщения.

Владимир Ситников
20.07.2016, 12:30
Не понимаю зачем вся эта теория...
Попробую ещё раз: что делает ваш алгоритм, если генератор возвращает число, которое "уже было в этой игре"? Я полагал, что возвращает "максимальное из оставшися" или "минимальное из оставшихся". Так?

rovki
20.07.2016, 12:31
Кто может гарантировать ,что в RND сделанном по самому правильному алгоритму в диапазоне 0..N ,нет периодичности (равное расстояние между одинаковыми значениями )появления любого одного числа ???

rovki
20.07.2016, 12:33
Не понимаю зачем вся эта теория...
У меня делается просто, ка говорил rovki: При этом соседние "игры" запросто могут быть одинаковые, или одинаковыми могут быть последний бочонок предыдущей игры и первый следующей, но пока как бочонки не кончатся, повторений не будет!

PS раз вы дописали, то и я допишу... Мой макрос работает по алгоритму описанному в третьем пункте предыдущего сообщения.
вот вот уже ближе ,только мне надо ,что бы и следующая игра начиналась не с того чем закончилась предыдущая

AI!
20.07.2016, 12:34
Так? как в что-где-когда: следующее которого ещё не было, с некоторыми оговорками...

PS ща будет много о том как это плохо?

Владимир Ситников
20.07.2016, 12:35
Кто может гарантировать ,что в RND сделанном по самому правильному алгоритму в диапазоне 0..N ,нет периодичности (равное расстояние между одинаковыми значениями )появления любого одного числа ???

Например, АНО "Межрегиональный испытательный центр": http://www.stoloto.ru/generator

rovki
20.07.2016, 12:36
Попробую ещё раз: что делает ваш алгоритм, если генератор возвращает число, которое "уже было в этой игре"? Я полагал, что возвращает "максимальное из оставшися" или "минимальное из оставшихся". Так?
Нужно случайно из оставшихся

rovki
20.07.2016, 12:39
Например, АНО "Межрегиональный испытательный центр": http://www.stoloto.ru/generator
Что вы опять начинаете путать ,там на базе природного шума построено(физика) ,а мы про вычислительные методы говорим(математика).

Владимир Ситников
20.07.2016, 12:43
Следующее свободное, с некоторыми оговорками...

Ну, я про это же. Эти самые оговорки нарушают "случайность" требуемой перестановки.
Как раз это я и прокомментировал тут:

3) Идея с "давайте просто запоминать выпавшие числа, и если выпадет повторно, то бросать кость заново" понятна, но в ОЛ это убого, и приходится идти на уступки вида "если значение уже было, то возьмём просто следующее свободное". Это самое "следующее свободное" нарушает "случайность" перестановки -- т.е. генератор генерирует biased (как оно по-русски? смещённые? неравномерно распределённые?) последовательности.

Поэтому и говорю, что, либо генератор будет плохим, либо там будет массив с "оставшимися элементами".
В ОЛ тяжело сделать "массив на 1024 элемента", поэтому приходится хранить в битах.
Получается на каждом шаге алгоритма нужно генерировать число от 0 до k-1 (где k это количество оставшихся чисел) и уметь выбирать/обнулять нужный k-ый ненулевой бит (если считать, что с самого начала все биты установлены в 1).

Вы готовы называть это "эффективной" реализацией?
5-10 блоков -- я ещё понимаю "эффективная реализация". А когда в ОЛ нужно заводить 32 SEL'а как ячейки памяти для 1024 битов, и потом каждый SEL обвязывать блоком "получи и очисти k-ый ненулевой бит", то это уже "эффективным" я бы не называл. Реализация -- да. Эффективная? Вряд ли.

Владимир Ситников
20.07.2016, 12:44
Нужно случайно из оставшихся

Так чтобы выбрать "случайное из оставшихся" эти самые "оставшиеся" нужно хранить.
Я же и говорил, что в ST это тривиално, а в ОЛ проблематично. В ОЛ массивов нет, и битовых операций очень мало.

Вот мои слова:

2) Плохо то, что нет эффективной реализации для произвольного диапазона. Нет от слова "совсем". Хорошую реализацию можно сделать через массив. Т.е. заполнить его числами от 0 до N, перемешать, и выдавать по одному. На ST это тривиально, а в ОЛ уже проблематично. Но, стоит понимать, что большие массивы держать в памяти и перемешивать всё равно время займёт.

AI!
20.07.2016, 12:44
Плохой работающий (практический) генератор лучше хорошего но неработающего (теоретического)...

rovki
20.07.2016, 12:50
Все это делается на лету и хранится текущая и предыдущая переменная в виде стека и анализируются .Получается алгоритм выдачи СЧ с переменным периодом .Так делается сам генератор .Но проблема в скорости считывания ,мы же не в таблицу пишем ,а например выводим на экран 1раз.сек . И вот тогда самый лучщий генератор ,без "склеек" может на индикаторе выдать опять склейки ,только потому что процесс выработки СЧ и отображения СЧ не синхронизированы .
Это как вы будите называть раз в сек СЧ от 0 до 10 ,а я буду выходить из комнаты и появлятся раз в минуту и может быть буду слышать только 2,2,2,2,3,5,5.5,5,1....а генератор все хорошо выдавал ...

Владимир Ситников
20.07.2016, 12:58
Плохой работающий (практический) генератор лучше хорошего но неработающего (теоретического)...

Давайте начнём с вашего возражения?




0) Для каких-то задач "генератор без повторений" может и потребоваться. Но слепо использовать его для всех задач -- нехорошо.

Если говорить чем "в целом" плох генератор, который выдаёт циклами без повторений, то
1) Плохо то, что он предсказуем. Например, если генерируем числа от 0 до 4, и 0, 1, 2, 3 уже выпали, то с вероятностью 100% выпадет число 4.
2) Плохо то, что нет эффективной реализации для произвольного диапазона. Нет от слова "совсем". Хорошую реализацию можно сделать через массив. Т.е. заполнить его числами от 0 до N, перемешать, и выдавать по одному. На ST это тривиально, а в ОЛ уже проблематично. Но, стоит понимать, что большие массивы держать в памяти и перемешивать всё равно время займёт.
3) Для частных случаев (некоторых N) можно сделать алгоритм не требующий массива, но он при этом будет выдавать лишь часть из возможных перестановок.


А ничего что я уже написал сей макрос?
Который генерирует число от 0 до n без повторений, где n произвольное, меньше 1024.
А называется макрос rnd1024.

PS если есть желание, сам генератор можно легко поменять на ваш, а обработчик массива оставить мой.

Я же не говорю, что "вообще написать невозможно".
1) Я развёрнуто говорю, почему именно в ОЛ невозможно сделать эффективную реализацию.
2) У меня есть сомнения, что даже xorshift128 хватит, чтобы сгенерировать все возможные перестановки 0..63. Ну, в xorshift128 состояние 128 бит, а ln(64!)/ln(2) это почти 300. Возможно, во второй части я ошибаюсь, но сходу не могу сообразить хватит ли энтропии xorshift'а или нет.

3) Можно попробовать прогнать "алгоритм rnd1024" через тесты, проверяющие "случайность" перестановки. Наверняка есть такие. Вот тут вопрос насколько предсказуемые значения генерирует rnd1024.



Плохой работающий (практический) генератор лучше хорошего но неработающего (теоретического)...

Вы в каком контексте говорите про "теоретический"? В контексте ОЛ или контексте КДС/ST?
Уверен, что ни у кого не должно быть сомнений в том, что на ST легко реализовать "random shuffle".
Вот про "реализацию random shuffle на ОЛ" -- согласен, там непросто. Но я с самого начала и говорил, что "невозможно сделать эффективную реализацию".

Владимир Ситников
20.07.2016, 13:01
Все это делается на лету и хранится текущая и предыдущая переменная в виде стека и анализируются
В том-то и дело, что нужен не стек, а нужно хранить все числа, которые "уже возвращались" на этой итерации.
Тут двумя переменными ну никак не обойтись.


Это как вы будите называть раз в сек СЧ от 0 до 10 ,а я буду выходить из комнаты и появлятся раз в минуту и может быть буду слышать только 2,2,2,2,3,5,5.5,5,1....а генератор все хорошо выдавал ...

rovki, этот ваш пример про комнату кристально понятен. Но непонятно к чему он.
Вы в другом ракурсе этот же пример рассказывали (про тактования), но и там было неясно к чему он.
Тактование -- проблема/фича сугубо ОЛ. В КДС/ST такой проблемы нет. Там когда надо, тогда и вызываем блок "получения следующего значения".

rovki
20.07.2016, 13:20
Использование СЧ это и самое главное мне нужно что бы при вызове формировались одно СЧ в передатчика генераторе без повторений склейка

Владимир Ситников
20.07.2016, 13:24
Использование СЧ это и самое главное мне нужно что бы при вызове формировались одно СЧ в передатчика генераторе без повторений склейка
Если задача "сделать лото", то да, нужен ГСЧ "без повторений".

Если задача "сгенерировать pin код", то нужен ГСЧ "с повторениями".
Если задача "сгенерировать входной сигнал для тестов PID'а или ещё чего-нибудь", то нужен ГСЧ "с повторениями".

AI!
20.07.2016, 14:12
Вы слишком теоретик... На практике всё значительно проще.
Дом смоделированный с математической точностью никогда на практике не будет идеальным
Зачем в ПР идеальный ГСЧ? Зачем в ПР идеальное лото?

Более того - на практике мой не идеальный ГСЧ становится идеальным, если сюда добавить что СЧ генерируется каждый такт, а пользователю СЧ нужно раз в час, причём по запросу, т.е. для ПР - в случайный момент времени.

С такими реальными исходными данными ГСЧ может просто перебирать числа от 0 до n по порядку каждый такт, и всё равно такое число будет случайным(!) для пользователя.

И т.д.

Владимир Ситников
20.07.2016, 15:00
Вы слишком теоретик... На практике всё значительно проще.
Дом смоделированный с математической точностью никогда на практике не будет идеальным
Зачем в ПР идеальный ГСЧ? Зачем в ПР идеальное лото?
Давайте всё-таки обсуждать вопросы ПР в ветке про ПР?

Я, конечно, понимаю, что иногда удобно сдвинуть акцент в сторону "на ПР идеального ГСЧ не нужно", но
1) Исходная ветка была про ПЛК. В КСД+ST часть алгоритмов сделать в десятки раз проще, чем в ОЛ. Буквально пара строк кода, и уже готов "идеальный вариант случайной тасовки".
При этом, заметьте, вообще не возникает вопроса "а можно ли сделать какой-нибудь шарлатанский метод, но попроще"?
На ST просто объявляешь массив и делаешь. 5-10 строк кода максимум. И вообще не стоит вопрос "слишком теоретик"

2) Надеюсь, вам-то не нужно доказывать, что xorshift128 более случайный алгоритм, чем ваш LCG?
Это не в контексте "rnd1024 не нужен", а в контексте "если уж зачем-то понадобился ГСЧ, то грех не использовать нормальные ГСЧ, например, xorshift128".

3) И, заметьте, я провожу границу не по ПР/ПЛК, а по ST / ОЛ. Почти наверняка в текущем ПР (с точки зрения железа) можно сделать "нормальную честную тасовку". Но сама среда ОЛ не предоставляет средств для работы с массивами, поэтому и вы и начинаете "да никому не нужно это ГСЧ на ПР", "а зачем на ПР идеальное лото" и т.п.
Если бы можно было по-нормальному сделать, то и вопросов бы вообще не возникало. Просто взять сделать макрос тасовки чисел (ну, как в wikipedia написано).

4) Надеюсь, вы не будете против, но я напомню, что текущая тема -- простой ГСЧ. Без всяких дополнительных требований вроде "ГСЧ без повторений".
"ГСЧ без повторений", не вопрос, можно обсуждать, но это за гранью текущей темы. Это не значит, что "ГСЧ без повторений" вообще никому не нужен. Но называть "ГСЧ без повторений как самым правильным и самым нужным генератором" тоже неправильно. Для каких-то задач он может потребоваться. Но базовый блок -- это простой ГСЧ, который может (и должен!) выдавать повторения (хоть по 5-10 раз подряд)


Более того - на практике мой не идеальный ГСЧ становится идеальным, если сюда добавить что СЧ генерируется каждый такт, а пользователю СЧ нужно раз в час, причём по запросу, т.е. для ПР - в случайный момент времени.
Становится идеальным? Реально? Откуда уверенность?
Да, я много раз соглашался с тем, что тактование добавляет энтропию. Но "идеальным" от тактования генератор уж точно не становится.


С такими реальными исходными данными ГСЧ может просто перебирать числа от 0 до n по порядку каждый такт, и всё равно такое число будет случайным(!) для пользователя.
И т.д.
Казалось бы, но нет. У вас предположение, что "запрос на число" приходит в совершенно случайный момент времени.
Если же эта случайность не совершенная, то всё пропало.

Да, можно сделать CTUD и считать, что "значения уж точно будут случайными". Но, это будет шарлатанство чистой воды, а не ГСЧ.

Владимир Ситников
20.07.2016, 17:07
0) Не хорошо не приводить расчеты и аргументы ,а только фразы
1)Для меня равновероятно ,имхо -это когда каждое число может выпасть с равной вероятностью .для 1из 10 -10% ,а 1 из 1-100% ,естественно .Тоесть сначала вероятность у всех 10% ,потом 11.1 ,12.5 ,14.3, 16.7 ,20 ,25,33.3,50,100. по сравнению с начальной кучей .Тоесть вероятность растет у оставшихся по сравнению с общей кучей (10шт) ,но между собой они имеют равную вероятность быть выташенными ,что 3 из 3 ,что 5 из 5 каждый имеет равную вероятность .Меня не интересует вероятность оставшихся по сравнению с общей кучей ,меня интересует выроятность вытащенных значений (генерации) между собой .Да, цикл (куча) генерится вновь ,поэтому не 1из 1 остается ,а постоянно 1 из 10
rovki, попробуйте понять, что есть 2 различные задачи: "простой ГСЧ" и "ГСЧ без повторений".
То, что описываете вы (игра лото с бочонками, 5 из 36 и т.п.) это "ГСЧ без повторений".

Но не надо лезть с этой своей задачей "ГСЧ без повторений" в тему, где обсуждается простой ГСЧ. Это две разные задачи, со своими границами применений.


2)использование массивов не представляется возможным при разности скоростей приема\передачи в 10раз ,ни какого стека не хватит ,он переполнится .
Можете ещё раз объяснить почему "использование массивов не представляется возможным"? Вот не понимаю ваших опасений про "стек переполнится" и "разности скоростей".
В чём принципиальная проблема выделить 8-128 байт ОЗУ на то, чтобы хранить массив бит?
От таких объёмов в самом ПР ничего не переполнится. Возможно, получится даже сами числа хранить, т.е. массив чисел (word или dword)

rovki
20.07.2016, 18:02
Обьясняю популярно - Массив не важно как организован имеет свойство переполнятся ,как в задаче про бассейн .Если труба что наполняет более толстая ,а та что на сливе тоньше ,то через некоторое время массив переполнится .Если вы будите останавливать генерацию СЧ (не вызывать) после вычисления одного СЧ ,то начав новую генерацию вы получите тоже число .если не будите останавливать генерацию СЧ ,а будите считывать в произвольное время или периодически ,то можете получить последовательность с большим числом "склеек" .Если вам нужно сформировать конечное количество СЧ ,то можно каждое число записать в массив ,а потом хоть год анализировать и считывать ,но такая задача не стоит .
Задачи формирует пользователь ,а не разработчик .Мне нужен такой макрос ,а вы мне предлагаете "простой",да пусть он хоть трижды будет правильным и красивым ,но мне нужен другой ,причем я это сформулировал заранее ,а не на ходу ,что бы вас завести в тупик .Хочу СПОРТЛОТО.;)

Владимир Ситников
20.07.2016, 18:20
Задачи формирует пользователь ,а не разработчик .Мне нужен такой макрос ,а вы мне предлагаете "простой",да пусть он хоть трижды будет правильным и красивым ,но мне нужен другой ,причем я это сформулировал заранее ,а не на ходу ,что бы вас завести в тупик .Хочу СПОРТЛОТО.;)
Заводите свою тему. Ещё раз повторю: эта тема про _простой_ ГСЧ. Если вам нужен "другой" -- создавайте отдельную тему, и не засоряйте тему про ГСЧ.


Обьясняю популярно - Массив не важно как организован имеет свойство переполнятся ,как в задаче про бассейн .Если труба что наполняет более толстая ,а та что на сливе тоньше ,то через некоторое время массив переполнится .Если вы будите останавливать генерацию СЧ (не вызывать) после вычисления одного СЧ ,то начав новую генерацию вы получите тоже число .если не будите останавливать генерацию СЧ ,а будите считывать в произвольное время или периодически ,то можете получить последовательность с большим числом "склеек" .Если вам нужно сформировать конечное количество СЧ ,то можно каждое число записать в массив ,а потом хоть год анализировать и считывать ,но такая задача не стоит .
Вы о чём пишете вообще?
Мой ответ -- rnd1024. Там используется массив. И этот массив не переполняется.
Поэтому все ваши объяснения "массив переполнится" -- мимо.

Я, конечно, могу показать пример на Java/ST с массивом и правильной генерацией, где будет очевидно, что ничего не переполняется. Но вот перенести этот код на ОЛ будет тяжело -- в ОЛ нет нормальных массивов.

rovki
20.07.2016, 18:26
RND1024 для фиксированного количества CЧ ,я же говорю о не прерывной генерации .И если не будет повторений в 1024 числах ,то в следующей генерации все повторится .Если вы этот массив 1024 не успеете обработать и запустится новый процесс генерации ,то этот массив затрется новыми значениями и на стыках могут появится "склейки" из одинаковых чисел .Ну все заканчиваю ,дел по горло ,а с вами каши не сваришь ,только щи из воды...
Да эту тему то же не вы создали и благодаря вам она оказалась на помойке (курилке) ,как и большенство не востребованных ваших тем ждут своей очереди .

Владимир Ситников
20.07.2016, 18:28
RND1024 для фиксированного количества CЧ ,я же говорю о не прерывной генерации .И если не будет повторений в 1024 числах ,то в следующей генерации все повторится .Если вы этот массив 1024 не успеете обработать и запустится новый процесс генерации ,то этот массив затрется новыми значениями .

Так код же в состоянии понять "закончилась ли прошлая генерация или нет".
Там ставится один счётчик (СTU? или как он там?), который и проверяет "начался ли новый цикл".
И ничего не затрётся.

rovki
20.07.2016, 18:33
Генерация то закончилась ,а обработка значений НЕТ!Все ухожу ...

Владимир Ситников
20.07.2016, 20:59
Вы показывали работу ПК, а где скрин с реально работающего плк, обрабатывающий генерацию случайных 32-битных чисел, xorshift не проходит тест. Собственно чего это я, опять сейчас услышу, что законы математики везде одинаковы и кому то достаточно результатов на ПК
ЗЫ если побежали проверять на плк, чтоб не было фраз у меня вышло, договаривайте сколько добавили лишних символов в код, не говорю про строки, всё помещается может и в одну

capzap, я позволю себе НЕ бегать за ПЛК, а найду ошибку в вашем коде. Надеюсь, после этого вы ещё раз подумаете над тем "проходит ли xorshift128 тест frequency".

Вот вы показывали пример, где, якобы, "значение sum выходит за все мыслимые границы":

ну в общем то пару замеров на ночь глядя не показатель, сегодня при 5000 генераций всё нормально, при 10000 с чего то вдруг переменная sum начала принимать значения в 3 раза больше максимально возможных единиц, хотя среднее показывает как обычно в пределах 0.5, от метода не зависит
25467
ЗЫ выложил еще один генератор, как должен был бы выглядеть генератор от И.Петрова

Ошибка в первом условии IF count < idx+1 THEN.
Должно быть <=. Т.е. IF count <= idx+1 THEN

Сейчас получается, что вы значение stuff[idx+1] не записываете, а потом пытаетесь из него читать.

На вашей же картинке ясно видно, что stuff[count] == 16177 и count==idx+1. Ну не может такое число быть результатом операции BOOL_TO_INT.

И, да, переменная sum это сумма -1 или +1. Сумма 10001 таких чисел никак не может выйти за диапазон -10001...+10001. У вас получилось 32144, что должно было вас насторожить, но вы почему-то сделали вывод "генератор плохой", а должны были сделать вывод "в коде ошибка".

Ещё раз картинка, про которую я говорю: 25467

capzap
20.07.2016, 21:12
да в онлайн Вы видите не соответствие якобы. Но на этой картинке обратите внимание на последнюю строчку в окне объявлений она показывает каким индексом должен заканчиваться массив, соответственно stuff[count+1] вызовет ошибку. Тут вернее будет поставить IF count <= idx THEN.
По остальному, ну не может плохой код нормально работать в случае когда в коде меняется одна переменная idx с десяти на пять тысяч и артачиться когда вновь перехожу на 10000. Меня насторожило и я поделился со всеми, а вот Вы могли бы и вспомнить предыдущие мои посты где я упоминал, что не всегда плк готов загружать обновленный проект, если я выставлю максимум массиву более 6000. Может все же начать верить что плк это не ПК и пускай законы математики везде одинаковы но не везде выполняются, мне в принципе не трудно и исходник выложить этого поу. И я опять же говорил что среднее, это переменная maxi соответствует норме, а в случае если бы там было число 16177, оно бы не получилось приближенно равным 0.5

ЗЫ я не устану повторять, что метод прост, соответствует ГСЧ, но плк это особая вещь, возможно мне не хватает цикла, хотя все параметры из модуля статистики говорят об обратном

Владимир Ситников
20.07.2016, 21:33
да в онлайн Вы видите не соответствие якобы. Но на этой картинке обратите внимание на последнюю строчку в окне объявлений она показывает каким индексом должен заканчиваться массив, соответственно stuff[count+1] вызовет ошибку. Тут вернее будет поставить IF count <= idx THEN.

Читаем ещё раз код по слогам: максимально возможный номер элемента в массиве stuff, в который будет запись равен idx.
Т.к. вы пишете через stuff[count], а при count >= idx+1 в ветку записи выполнение не заходит.

А при чтении вы используете FOR t:=0 TO (idx+1) DO.
Т.е. t может принимать значение idx+1, и вы в итоге пытаетесь прочитать значение stuff[idx+1], а это значение не инициализировано.

Давайте вы всё-таки поправите эту ошибку любым удобным вам образом (массив побольше, или убрать idx+1 из границы FOR цикла), и сделаете эксперимент ещё раз?



По остальному, ну не может плохой код нормально работать
Ошибка есть? Есть.
Давайте править, а потом уже обсуждать "как такое может быть"?
Вы же код больше любите, чем теорию.


И, да. Конкретно для теста frequency сам массив не нужен.
Можно просто прибавлять новое значение к sum (+1 или -1) и считать количество (ну, чтобы потом на корень из n поделить). Таким образом можно и 100'000 и больше бит тестировать.


ЗЫ я не устану повторять, что метод прост, соответствует ГСЧ, но плк это особая вещь, возможно мне не хватает цикла, хотя все параметры из модуля статистики говорят об обратном
Давайте всё-таки сначала исправим сам код, а потом уже будем делать выводы?
На всякий случай: эту вашу позицию я услышал, и сразу соглашусь с ней/признаю что был неправ и всё такое, если появятся реальные подтверждения, что ГСЧ на ПЛК работает не так как на ПК (ну, T_PLS_MS не считается -- тут само собой понятно, что на ПК и ПЛК будут отличия).

Да, у вас была неплохая заявка на доказательство, но, к сожалению в коде ошибка.

capzap
20.07.2016, 22:02
да, это ошибка, видимо неудачный копипаст.
Только это как раз очень убедительная заявка, сейчас смотрел двухминутное видео и ни как она не влияла на работу
вот тоже с ПК не могу загрузить видюшный файл

Владимир Ситников
20.07.2016, 22:07
да, это ошибка, видимо неудачный копипаст.
Только это как раз очень убедительная заявка, сейчас смотрел двухминутное видео и ни как она не влияла на работу
вот тоже с ПК не могу загрузить видюшный файл

Выложите проект. Может, там ещё ошибки есть.

capzap
20.07.2016, 22:14
в циклах я убрал единицу

Владимир Ситников
20.07.2016, 22:56
да, это ошибка, видимо неудачный копипаст.
Только это как раз очень убедительная заявка, сейчас смотрел двухминутное видео и ни как она не влияла на работу
вот тоже с ПК не могу загрузить видюшный файл

Так, теперь не понимаю что имеется ввиду под "ошибка никак не влияла на работу".

Каков у вас критерий?
На основе чего решаете "прошёл тест или нет"?
Неужели прямо на первой итерации при использовании xorshift значение freq оказывается меньше 1?

PS. В выложенном проекте по-прежнему ссылка на hill.res. Вы точно именно xorshift, а не hill тестировали после исправления ошибки?

capzap
20.07.2016, 23:15
#173 пост, на скрине результат остановки по невыполнение критерия,а не из-за того что сумма зашкалила, добавленная единица в цикл уже тогда присутствовала, останов тот произошёл где то на пятый шестой прогон. а в этом коде да hill надо убрать,в объявлении я его удалил и заменить на tst или что там у меня. еще забыл в экспорт добавить оскатовский корень


зы там где два скрина выкладывал оба метода показал что останавливаются

Владимир Ситников
20.07.2016, 23:22
#173 пост, на скрине результат остановки по невыполнение критерия,а не из-за того что сумма зашкалила, добавленная единица в цикл уже тогда присутствовала, останов тот произошёл где то на пятый шестой прогон. а в этом коде да hill надо убрать,в объявлении я его удалил и заменить на tst или что там у меня. еще забыл в экспорт добавить оскатовский корень


зы там где два скрина выкладывал оба метода показал что останавливаются

Ну, hill/корень я убрал -- у меня норм работает (в симуляторе).

В #173 (http://www.owen.ru/forum/showthread.php?t=901&p=215428&viewfull=1#post215428) ошибка не исправлена.
stuff заполняется до idx, а читается до idx+1.

Сделайте, пожалуйста, ещё скрин, чтобы там в цикле верхняя граница была idx, и тоже сумма зашкалила.

capzap
20.07.2016, 23:29
это однозначно из-за добавленой единицы в цикле, я раскрывал массив там кроме нулей и единиц другого не было,в конце точно.п просто КДС так вот пропускает когда массив объявлен через переменные, на цифрах он у меня ругается,но их менять во многих местах неудобно

Владимир Ситников
20.07.2016, 23:38
это однозначно из-за добавленой единицы в цикле, я раскрывал массив там кроме нулей и единиц другого не было,в конце точно.п просто КДС так вот пропускает когда массив объявлен через переменные, на цифрах он у меня ругается,но их менять во многих местах неудобно

Т.е. ошибка? Поправите и сделаете эксперимент ещё раз?

capzap
20.07.2016, 23:49
я уже часов шесть не за компом,включал чтоб экспорт сделать.завтра попробую на еще одном плк. И да, симулятор это опять работа на ПК, там и 32-битное число разделиться на верхнюю границу диапазона, а в плк можно и минусовые значения получить, поэтому только завтра смогу узнать в чем была проблема

capzap
21.07.2016, 12:05
да из-за не правильно написанного цикла были эти непонятки, сейчас всё работает. Результаты следующие вичманн-хилл из 51 одного прогона показал результат 22 при ERFC больше 61%, xorshift показал 18 из 51 причем один раз останов был из-за ошибки меньше одного процента, поэтому запускался повторно

Владимир Ситников
21.07.2016, 12:20
да из-за не правильно написанного цикла были эти непонятки, сейчас всё работает. Результаты следующие вичманн-хилл из 51 одного прогона показал результат 22 при ERFC больше 61%, xorshift показал 18 из 51 причем один раз останов был из-за ошибки меньше одного процента, поэтому запускался повторно

Можете переформулировать?
Что значит "xorshift показал 18 из 51"?

Уточню: даже при использовании железного генератора есть шанс, что erfc окажется меньше 1%. Шанс невелик, но он всё равно есть. Поэтому вопрос не в том "возникнет ли случай, что erfc оказалось меньше 1%", а в том "сколько раз такое возникнет".

capzap
21.07.2016, 12:28
менее процента возник один раз, про оскат даже не написал потому что максимум сколько он продержался это пять прогонов на шестом меньше процетнта, на других запусках еще меньше требовалось времни чтоб остановить тест , а вот стремление к равновесию я определил как значение erfc больше 61% у вичманхила выше, не намного конечно, но зато и остановок небыло из-за непрохождения тестов

Владимир Ситников
21.07.2016, 12:32
вичманн-хилл
Раз уж тестируете, то поправьте ошибку в вашей реализации hill'а.

У вас
res:=(UINT_TO_REAL(A)/30269.0 + UINT_TO_REAL(B)/30307.0 + UINT_TO_REAL(C)/30323.0)/3.0;

А должно быть
res:=ДРОБНАЯ_ЧАСТЬ_ОТ(UINT_TO_REAL(A)/30269.0 + UINT_TO_REAL(B)/30307.0 + UINT_TO_REAL(C)/30323.0);

Вариант /3 не проходит Runs и FFT тесты на длиннах в 1'000'000 бит
Вариант дробная_часть_от(a/30269.0 + b/30307.0 + c/30323.0) -- проходит.

Владимир Ситников
21.07.2016, 12:41
менее процента возник один раз, про оскат даже не написал потому что максимум сколько он продержался это пять прогонов на шестом меньше процетнта, на других запусках еще меньше требовалось времни чтоб остановить тест , а вот стремление к равновесию я определил как значение erfc больше 61% у вичманхила выше, не намного конечно, но зато и остановок небыло из-за непрохождения тестов

Запустил hill и xorshift128 с теми константами, которые используются у вас.
Указал "тестировать последовательности из 10001 бит", "тестировать 100'000 последовательностей"

Результат nist:
1) xorshift128 -- ">1% результат оказался у 99018 из 100000 экспериментов". Да, в 100000-99018=982 случаях тест frequency показал "как бы отрицательный результат"
2) hill (не /3, а исправленный алгоритм) -- ">1% результат оказался у 98975 из 100000 экспериментов".

Далее, для принятия решения "прошёл тест frequency или нет" nist пишет, что "для таких входных данных, должно пройти как минимум 98905 тестов"


The minimum pass rate for each statistical test with the exception of the
random excursion (variant) test is approximately = 98905 for a
sample size = 100000 binary sequences.

For further guidelines construct a probability table using the MAPLE program
provided in the addendum section of the documentation.


Т.е. видно, что и xorshift128 и hill тест frequency проходят, несмотря на то, что и у первого и у второго алгоритма есть случаи, когда erfc оказывается менее 1%

Владимир Ситников
21.07.2016, 12:42
Ну, что в итоге?

На ПЛК всё работает так же, как и на ПК?

capzap
21.07.2016, 12:45
если про это https://github.com/jj1bdx/as183-c/blob/master/main3.c я пробовал сначала и так, просто сократил ведь по логике там три значения нормируются к единице и складываются

capzap
21.07.2016, 12:47
Ну, что в итоге?

На ПЛК всё работает так же, как и на ПК?

да, работает

Владимир Ситников
21.07.2016, 12:48
менее процента возник один раз, про оскат даже не написал потому что максимум сколько он продержался это пять прогонов на шестом меньше процетнта, на других запусках еще меньше требовалось времни чтоб остановить тест
К сожалению, то что вы тут пишете не имеет ничего общего с методикой nist тестирования.
Настоящая методика не в том, чтобы найти "сколько тестов продержится алгоритм", а в том, чтобы узнать "какой процент тестов будет успешным при большом количестве этих самых тастов".

Например, запускаем 100 раз по 10001 бит, и смотрим сколько из этих 100 раз значение оказалось <1%.

Владимир Ситников
21.07.2016, 12:51
если про это https://github.com/jj1bdx/as183-c/blob/master/main3.c я пробовал сначала и так, просто сократил ведь по логике там три значения нормируются к единице и складываются

Ну, да, я про это. Нельзя просто так брать и заменять r=r - trunc(r) на r=r/3.0;
Тест FFT показывает, что вариация r/3.0 не просто "не соответствует оригинальному алгоритму", но и она реально портит картину.

capzap
21.07.2016, 13:08
с трунком результаты еще лучше

из ста прогонов по 1001 биту: xorshift одна ошибка меньше процента и 37 высоких результата, wichman-hill 0/52 соответственно
freq:=ERFC(full) * 100.0;
result:=result+BOOL_TO_INT(freq>61);
errors:=errors+BOOL_TO_INT(freq<1);

Владимир Ситников
21.07.2016, 15:07
с трунком результаты еще лучше

из ста прогонов по 1001 биту: xorshift одна ошибка меньше процента и 37 высоких результата, wichman-hill 0/52 соответственно
freq:=ERFC(full) * 100.0;
result:=result+BOOL_TO_INT(freq>61);
errors:=errors+BOOL_TO_INT(freq<1);

И, какой вывод в итоге?

capzap
21.07.2016, 15:21
Петров выбрал правильное направление, только сильно упростил, гсч от оскат не проходит проверку

Владимир Ситников
21.07.2016, 17:21
Петров выбрал правильное направление, только сильно упростил, гсч от оскат не проходит проверку

А что с "направлением Филоненко"?

И на вот это свой взгляд пересмотрели? Ну, я о том, что все мои ссылки были по делу, и что вполне можно тестировать качество ГСЧ на ПК.

я уже объяснял по существу, нечего предложить в качестве ГСЧ или теста этих самых генерторов для плк, не надо здесь высказывать свое мнение что лучше а что нет. Ваши все ссылки касаются программ для других ОС и никак не описаны для контроллеров, поэтому взывать меня гуглить, читать вики и т.п. да еще и на английском, не родном для меня языке, как бы я его не знал, тоже не стоит.

capzap
21.07.2016, 20:00
ни одну ссылку не открывал чтоб изучить, английские пояснения, установка гудвина это всё не моё. Всё было сделано, только по любезно предоставленным Вами выкладкам с кодом.