Страница 15 из 24 ПерваяПервая ... 51314151617 ... ПоследняяПоследняя
Показано с 141 по 150 из 239

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

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

    По умолчанию

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

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

  2. #142

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    оно к сожалению у Вас тоже постоянное, а не значение предыдущей итерации как это делал я
    Где постоянное?

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

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


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

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

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

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

    Значения 0..1 тоже генерируются, проблем не вижу.
    Последний раз редактировалось Владимир Ситников; 19.07.2016 в 11:26.

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

    По умолчанию

    да, не заметил.

    можно ведь и так задавать T_PLS_MS http://ru.stackoverflow.com/question...83%D0%BD%D0%B4

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

    код показали, я правильно понимаю, что для тестов нужен такой "\t\tBITSREAD = %d 0s = %d 1s = %d\n" формат файла? Или можно произвольный?
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  4. #144

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    можно ведь и так задавать T_PLS_MS http://ru.stackoverflow.com/question...83%D0%BD%D0%B4
    А смысл?
    Есть же алгоритм xorshift128, который не зависит от качества генератора времени.
    Обясните: зачем цепляться за OSCAT?
    Если для вас это вопрос веры, а не здравого смысла, то так и скажите. Мне этого будет достаточно. Обращать вас в веру "общемировой математики" я не собираюсь.

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

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

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

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


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

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

    По умолчанию

    Цитата Сообщение от vladimirisitnikov Посмотреть сообщение
    Я расчехлил КДС, сделал там REAL, всё работает как я и ожидал.
    ну это только с Ваших слов всё получилось в один присест, никогда раньше не упоминалось про 24 бита, а значит со стандартными 32 битами не выходило написать код, без лишних кусков кода
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  6. #146

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    ну это только с Ваших слов всё получилось в один присест, никогда раньше не упоминалось про 24 бита, а значит со стандартными 32 битами не выходило написать код, без лишних кусков кода
    Чьёрт побери!
    Вы спросили "как сделать float" -- я процитировал фрагмент из java (это было сообщение 132):
    http://www.owen.ru/forum/showthread....l=1#post215249

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

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

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

    По умолчанию

    Цитата Сообщение от vladimirisitnikov Посмотреть сообщение
    Это я помню. "на контроллерах законы математики не действуют", ага.



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

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

    На вскидку, есть 2 варианта:
    1) java.util.Random.nextFloat -- для REAL

    Код:
    public float nextFloat() {
       return next(24) / ((float)(1 << 24));
    }
    2) java.util.Random.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). У Вас имя Володя, из этого следует что Вы Путин или Ленин?
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

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

    По умолчанию

    Цитата Сообщение от vladimirisitnikov Посмотреть сообщение
    После этого вас прорвало:
    сообщение 138 "ожидаемый результат можно не получить"
    и сообщение 144 "куда копать".
    а чего Вы это нетактично умолчали про пост #129, тогда я не знал что Вы оказывается будете иметь ввиду 24 бита и ждал результатов в КДС из 32-битного результата
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  9. #149

    По умолчанию

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

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

  10. #150

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    куда смотреть, да вижу знакомые цифры, есть next(24), а так же есть тext(26), next(27). У Вас имя Володя, из этого следует что Вы Путин или Ленин?
    Смотреть на эту часть моего сообщения:
    Цитата Сообщение от vladimirisitnikov Посмотреть сообщение
    next(n) -- это "очередное число длины n бит". Т.е.
    Код:
    next(n) == xorshift128() & ((1 << n)-1)
    Тут и по русски, и на C/Java сказано что такое next(n).
    Более того, я сразу сказал, что говорю про java -- можно посмотреть что там подразумевается под next(n) (если хотите перепроверить мои слова).
    Более того, я всегда говорил, что если мои слова неясны, то меня можно спросить. Я никогда не называю дураком человека, который спрашивает.

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

Похожие темы

  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

Ваши права

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