Случайные числа [ Vc++ ]

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by GlOFF, 11 Jul 2007.

  1. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    Интересует данная тема (Случайные числа в MVС++ и их генератор). В делфи имеется функция Random в паре с Randomize. Как быть с получением случайных чисел в VС++ ? Может есть свои методы или модули ? Подскажите плз, в каком направлении копать или у кого подобный вопрос уже решался и имеются наработки...

    // Ну и для извращенцев, интересны технологии создания генератора
     
    #1 GlOFF, 11 Jul 2007
    Last edited: 11 Jul 2007
    2 people like this.
  2. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    для псевдослучайных используют функцию rand() из RTL.
     
    2 people like this.
  3. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    xqwerx, вот тебе исходник по теме:
    Code:
    #include <windows.h>
    #include <stdio.h>
    unsigned long rs_randseed;
    
    void _srand()
    {
      rs_randseed = GetTickCount();
    }
    
    unsigned long _rand()
    {
      rs_randseed++;
      return (rs_randseed*0xF02CE551) + 0x7FF2742B;
    }
    int main()
    {
    int a;
    _srand();
    a=_rand();
    char *pa;
    printf("This: ",itoa(a,pa,10));
    return 0;    
    }
    
     
  4. iv.

    iv. Elder - Старейшина

    Joined:
    21 Mar 2007
    Messages:
    1,183
    Likes Received:
    438
    Reputations:
    107
    Числа, которые генерируются обоими методами - не случайные. Для генерации числовой последовательности, близкой к случайной, используют специальные сложные железки + апи к ним.
     
  5. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    Ni0x С часиками интересно получилось! Главное фантазия :) А я то загонялся со стековым генератором ....
     
  6. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    iv. , я не говорю что получаются случайные числа, я вроде написал для псевдослучайных
     
    1 person likes this.
  7. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    ТС: srand/rand читай описание к CRT.
     
    1 person likes this.
  8. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    Реализовать генератор можно проще... Rdtsc и все дела.
     
    1 person likes this.
  9. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    смотря что понимать под случайностью. пусть надо сгенерировать "случайное" двухбайтное число (если меньше то отрубаем результат mod по границе, если например четырехбайтное то аналогично) не используя "железок". под случайным числом будем понимать результат 16-ти бит, такой что кол-во битов установленных в единицу в среднем будет никак не меньше битов установленных в ноль и более того, среднее количество "попаданий" в старший не должно быть меньше или больше чем в младший. полное равноправия битов в среднем, однако расположение их в текущий момент времени должно быть абсолютно случайно:) по этой причине, пример от Ni0x ну вообще не годится, хотя бы потому, что умножение на число ну никакой случайности не добавляет, а сложение и тем более на случайность выпадения битов. могу предложить только аналогичный вариант, но с циклическим сдвигом результата на половину слова (в данном случае на 8 бит) и двоичного сложения с первоначальным... потому что xor абсолютно демократичен как к 1 так и к 0, а сдвиг добавит равноправия между старшими и младшими битами.
     
    2 people like this.
  10. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    если кому интересно, в библиотеке boost для c++ есть уже готовые решения
    http://boost.org/libs/random/index.html
     
  11. Aag

    Aag Elder - Старейшина

    Joined:
    26 Jul 2005
    Messages:
    60
    Likes Received:
    19
    Reputations:
    8
    Смотря, для каких целей. Если нужно статистическая случайность, то открываешь второй том Дональда Кнута "Искусство программирования" и узнаешь все что необходимо.
     
    1 person likes this.
  12. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    Aag Открывать и смотреть, а так же по google лазать - это все понятно!
    Я личные мнения каждого по теме хотел послушать...
     
  13. Aag

    Aag Elder - Старейшина

    Joined:
    26 Jul 2005
    Messages:
    60
    Likes Received:
    19
    Reputations:
    8
    я думал тебе интересны технологии, а тебе блюдечко нужно с голубой каемочкой.
    А мое мнение таково, что если нужна стандартная вещь, то просто открой справочник (в данном случае Кнута "Искусство программирования" или другой источник).
     
    #13 Aag, 11 Jul 2007
    Last edited: 11 Jul 2007
  14. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    Как сказал один человек, генерация случайных чисел - слишком важное дело, чтобы оставлять её на волю случая.
     
    #14 Ni0x, 11 Jul 2007
    Last edited: 5 Dec 2007
  15. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    Aag Я могу повториться... :) Это часть процесса познания - гляжу по справочникам, книгам, на wasm много всяких примерчиков, вот здесь спрашиваю....
    А на блюдечке с голубой каемочкой можешь пока чаек пить ;)

    P.S. За Дональда Кнута спс... обязательно гляну...
     
  16. Lamia

    Lamia Elder - Старейшина

    Joined:
    11 Jul 2007
    Messages:
    186
    Likes Received:
    77
    Reputations:
    -9
    А асм вставку разве нельзя зделать!
     
  17. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    Lamia А ты знаешь как лучше сделать генератор псевдослучайных чисел на assemblere? Хотя бы примерно случайно и на хорошей реализации на асме... Я бы поглядел с удовольствием!
     
  18. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    напиши на асме генератор случайных чисел, именно случайных.
     
  19. Lamia

    Lamia Elder - Старейшина

    Joined:
    11 Jul 2007
    Messages:
    186
    Likes Received:
    77
    Reputations:
    -9
    Генераторы случайных и псевдослучайных я сама реализовывать не пробывала,но в в сети достаточьно исходников различьных вирусов,где они применяются!И не уж то ты считаеш что генератор на Си будел лучше по своей случайности чем на асме!?
     
    1 person likes this.
  20. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    Lamia Поэтому и спрашиваю, что да как лучше будет! Какую технологию использовать для реализации на асм? Я слышал и читал только про стековый генератор, но уж слишком загонно!