Страница 14 из 24 ПерваяПервая ... 41213141516 ... ПоследняяПоследняя
Показано с 131 по 140 из 239

Тема: Временная тема

  1. #131
    Пользователь Аватар для rovki
    Регистрация
    03.01.2010
    Адрес
    Чехов
    Сообщений
    12,125

    По умолчанию

    Цитата Сообщение от vladimirisitnikov Посмотреть сообщение
    Т.е. смена расширения всё меняет?
    И это говорит, так называемый, опытный товарищъ (tm)?


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

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

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






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

  2. #132

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    ну и, а теперь все Ваши явовские выкладки примените в КДС и выложите код, где получите РЕАЛ.
    Я под сомнение не ставил, я всегда говорил что ожидаемый результат можно не получить
    Раз пытаетесь уйти от темы, значит решения еще не нашли
    Я никуда не пытаюсь уйти.
    В чём проблема применить операцию 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

  3. #133

    По умолчанию

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

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

  4. #134

    По умолчанию

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

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

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

  5. #135
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,248

    По умолчанию

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

    ЗЫ не вытерпел, хотел послушать Ваши насмешки и совсем забыл что у нас по разному рабочий день начинается, придется долго ждать. Выкладываю картинку, прокомментируете?
    Изображения Изображения
    • Тип файла: png owen.png (2.8 Кб, Просмотров: 26)
    Последний раз редактировалось capzap; 19.07.2016 в 07:43.
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  6. #136

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    я рад, что моя подсказка "куда копать" помогла, а то четыре дня на простой код это очень много для математика
    Пока не пойму куда всё это идёт, но как дойдёт, то, очевидно, capzap окажется в луже.

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

  7. #137
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,248

    По умолчанию

    Цитата Сообщение от vladimirisitnikov Посмотреть сообщение
    Пока не пойму куда всё это идёт, но как дойдёт, то, очевидно, capzap окажется в луже.
    А что тут комментировать?
    Учитываются же только 24 младших бита, и старшие несколько не учитываются.
    Даже (16#00ffffff AND 16777215)/16777216.0 и то будет 0.999...
    В чём проблема?
    тогда вопрос, сколько байт тестируют тесты nist? И когда Вы скармливаете оскатовский вариант, который честно разбрасывает числа по всему четырехбайтовому диапазону, не получается ли что тест выкидывает из обращения утрированно 25% чисел, хотя это старший байт и я не знаю сколько чисел "округляется", может поэтому
    Цитата Сообщение от vladimirisitnikov Посмотреть сообщение
    В общем, шах и мат. Ни "генератор Петрова", "ни генератор OSCAT" не выдерживают тестов.
    xorshift128 тривиально реализуется на ПЛК/ПР (и там и там есть 32bit unsigned int),
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  8. #138

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    тогда вопрос, сколько байт тестируют тесты 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 не работает, то нужно ли проверять больше бит?
    Последний раз редактировалось Владимир Ситников; 19.07.2016 в 10:33.

  9. #139
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,248

    По умолчанию

    Цитата Сообщение от vladimirisitnikov Посмотреть сообщение
    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 тогда теряется некоторая часть случайных значений и вряд ли будут пройдены тесты
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  10. #140

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    опять же не показана реализация флоата в 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);
    }
    Что на этот раз?
    Последний раз редактировалось Владимир Ситников; 19.07.2016 в 10:48.

Страница 14 из 24 ПерваяПервая ... 41213141516 ... ПоследняяПоследняя

Похожие темы

  1. Тема для диплома
    от Gordan007 в разделе Трёп (Курилка)
    Ответов: 13
    Последнее сообщение: 18.01.2014, 13:08
  2. Бродит тема..
    от energohran в разделе Разработки
    Ответов: 3
    Последнее сообщение: 10.04.2012, 13:53
  3. МОДУС: тема защиты прошивки
    от Elka в разделе Модус 5684-0
    Ответов: 1
    Последнее сообщение: 28.11.2011, 23:39
  4. Язык ST. Временная задержка.
    от neoarey в разделе ПЛК1хх
    Ответов: 10
    Последнее сообщение: 26.03.2011, 01:15
  5. Ответов: 61
    Последнее сообщение: 12.09.2008, 10:49

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •