Генерация то закончилась ,а обработка значений НЕТ!Все ухожу ...
электронщик до мозга костей и не только
capzap, я позволю себе НЕ бегать за ПЛК, а найду ошибку в вашем коде. Надеюсь, после этого вы ещё раз подумаете над тем "проходит ли xorshift128 тест frequency".
Вот вы показывали пример, где, якобы, "значение sum выходит за все мыслимые границы":
Ошибка в первом условии 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
да в онлайн Вы видите не соответствие якобы. Но на этой картинке обратите внимание на последнюю строчку в окне объявлений она показывает каким индексом должен заканчиваться массив, соответственно stuff[count+1] вызовет ошибку. Тут вернее будет поставить IF count <= idx THEN.
По остальному, ну не может плохой код нормально работать в случае когда в коде меняется одна переменная idx с десяти на пять тысяч и артачиться когда вновь перехожу на 10000. Меня насторожило и я поделился со всеми, а вот Вы могли бы и вспомнить предыдущие мои посты где я упоминал, что не всегда плк готов загружать обновленный проект, если я выставлю максимум массиву более 6000. Может все же начать верить что плк это не ПК и пускай законы математики везде одинаковы но не везде выполняются, мне в принципе не трудно и исходник выложить этого поу. И я опять же говорил что среднее, это переменная maxi соответствует норме, а в случае если бы там было число 16177, оно бы не получилось приближенно равным 0.5
ЗЫ я не устану повторять, что метод прост, соответствует ГСЧ, но плк это особая вещь, возможно мне не хватает цикла, хотя все параметры из модуля статистики говорят об обратном
Последний раз редактировалось capzap; 20.07.2016 в 21:17.
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
Читаем ещё раз код по слогам: максимально возможный номер элемента в массиве 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 не считается -- тут само собой понятно, что на ПК и ПЛК будут отличия).
Да, у вас была неплохая заявка на доказательство, но, к сожалению в коде ошибка.
Последний раз редактировалось Владимир Ситников; 20.07.2016 в 22:02.
да, это ошибка, видимо неудачный копипаст.
Только это как раз очень убедительная заявка, сейчас смотрел двухминутное видео и ни как она не влияла на работу
вот тоже с ПК не могу загрузить видюшный файл
в циклах я убрал единицу
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
Так, теперь не понимаю что имеется ввиду под "ошибка никак не влияла на работу".
Каков у вас критерий?
На основе чего решаете "прошёл тест или нет"?
Неужели прямо на первой итерации при использовании xorshift значение freq оказывается меньше 1?
PS. В выложенном проекте по-прежнему ссылка на hill.res. Вы точно именно xorshift, а не hill тестировали после исправления ошибки?
#173 пост, на скрине результат остановки по невыполнение критерия,а не из-за того что сумма зашкалила, добавленная единица в цикл уже тогда присутствовала, останов тот произошёл где то на пятый шестой прогон. а в этом коде да hill надо убрать,в объявлении я его удалил и заменить на tst или что там у меня. еще забыл в экспорт добавить оскатовский корень
зы там где два скрина выкладывал оба метода показал что останавливаются
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран