Подсакажите как правильно генерить случайное число в ПЛК1хх?
Подсакажите как правильно генерить случайное число в ПЛК1хх?
Вот основа алгоритма:
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 и высокой скоростью.
uint NextUInt()
{
uint t= (x^(x<<11));
x=y;
y=z;
z=w;
return (w= (w^(w>>19))^(t^(t>>8)));
} - это на сях? а можно в следующие разы листинк из кодесиса как бы раздел форума носит название "Среда программирования CoDeSys" (хотя меня лично устроит и на паскале :-)
^ - это пoбитoвoе исключеннoе OR?
<< - это пoбитoвый сдвиг влевo?
>> - это пoбитoвый сдвиг вправo?
И какие типы переменных t, w, x, y?
P. S. а так хотелось что нибудь по проще :-( но влюбом случае разберёмся :-)
На С.
^ - это пoбитoвoе исключеннoе OR?
<< - это пoбитoвый сдвиг влевo?
>> - это пoбитoвый сдвиг вправo?
Именно так. Число после побитового сдвига - на сколько бит.
Тип всех переменных - DWORD.
Проще - сразу падает качество генерируемых случ. чисел
Забыл сказать - реализуйте не виде функции, а в виде функционального блока, чтобы значения переменных t,x,y,z,w сохранялись!
Большое спасибо за помощь. Пошёл сдвигать биты :-) и тд. и тп.
если у кого-то возникли проблемы - держите.
Значения инициализируются из внутренних часов => работать будет только в ПЛК и с подключенной syslibtime
Последний раз редактировалось Василий Куц; 01.11.2007 в 08:04.
Еще один простенький генератор случайных чисел в CoDeSys.
Чегой-то не работает.
Может смысл его работы подскажете?
Там единственная строка ответственная за генерацию
Чисто математически при любом х ответ 0Код:(*собст-но генератор*) x := x*170 - 251 *(x * 170/251);
______
Хм. Сорри. Работает. (Сначала неправильно скопировал)
Особенности целочисленного округления чтоль...
Последний раз редактировалось Crazy; 21.04.2008 в 13:00.
Игорь, спасибо большое. очень помогло.
Игорь , ваш генератор работает прикольно , но каждые секунд 20 повторение идет - хорошо видно если передавать выход в панель и строить график ....
Последний раз редактировалось вут; 14.07.2016 в 17:56.
С уважением , Денис Кучеренко .
Знание некоторых принципов - легко заменяет не знание некоторых фактов ...