Интересует данная тема (Случайные числа в MVС++ и их генератор). В делфи имеется функция Random в паре с Randomize. Как быть с получением случайных чисел в VС++ ? Может есть свои методы или модули ? Подскажите плз, в каком направлении копать или у кого подобный вопрос уже решался и имеются наработки... // Ну и для извращенцев, интересны технологии создания генератора
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; }
Числа, которые генерируются обоими методами - не случайные. Для генерации числовой последовательности, близкой к случайной, используют специальные сложные железки + апи к ним.
смотря что понимать под случайностью. пусть надо сгенерировать "случайное" двухбайтное число (если меньше то отрубаем результат mod по границе, если например четырехбайтное то аналогично) не используя "железок". под случайным числом будем понимать результат 16-ти бит, такой что кол-во битов установленных в единицу в среднем будет никак не меньше битов установленных в ноль и более того, среднее количество "попаданий" в старший не должно быть меньше или больше чем в младший. полное равноправия битов в среднем, однако расположение их в текущий момент времени должно быть абсолютно случайно по этой причине, пример от Ni0x ну вообще не годится, хотя бы потому, что умножение на число ну никакой случайности не добавляет, а сложение и тем более на случайность выпадения битов. могу предложить только аналогичный вариант, но с циклическим сдвигом результата на половину слова (в данном случае на 8 бит) и двоичного сложения с первоначальным... потому что xor абсолютно демократичен как к 1 так и к 0, а сдвиг добавит равноправия между старшими и младшими битами.
если кому интересно, в библиотеке boost для c++ есть уже готовые решения http://boost.org/libs/random/index.html
Смотря, для каких целей. Если нужно статистическая случайность, то открываешь второй том Дональда Кнута "Искусство программирования" и узнаешь все что необходимо.
Aag Открывать и смотреть, а так же по google лазать - это все понятно! Я личные мнения каждого по теме хотел послушать...
я думал тебе интересны технологии, а тебе блюдечко нужно с голубой каемочкой. А мое мнение таково, что если нужна стандартная вещь, то просто открой справочник (в данном случае Кнута "Искусство программирования" или другой источник).
Как сказал один человек, генерация случайных чисел - слишком важное дело, чтобы оставлять её на волю случая.
Aag Я могу повториться... Это часть процесса познания - гляжу по справочникам, книгам, на wasm много всяких примерчиков, вот здесь спрашиваю.... А на блюдечке с голубой каемочкой можешь пока чаек пить P.S. За Дональда Кнута спс... обязательно гляну...
Lamia А ты знаешь как лучше сделать генератор псевдослучайных чисел на assemblere? Хотя бы примерно случайно и на хорошей реализации на асме... Я бы поглядел с удовольствием!
Генераторы случайных и псевдослучайных я сама реализовывать не пробывала,но в в сети достаточьно исходников различьных вирусов,где они применяются!И не уж то ты считаеш что генератор на Си будел лучше по своей случайности чем на асме!?
Lamia Поэтому и спрашиваю, что да как лучше будет! Какую технологию использовать для реализации на асм? Я слышал и читал только про стековый генератор, но уж слишком загонно!