Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.61/64: Рейтинг темы: голосов - 64, средняя оценка - 4.61
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170

Генератор псевдо-случайных чисел, как хэш-функция

28.05.2017, 21:29. Показов 13319. Ответов 50
Метки rand (Все метки)

Студворк — интернет-сервис помощи студентам
Анализируя генератор псевдослучайных чисел

Я пришел к выводу, что (Учитывая что RAND_MAX = 32767)

придумал сам, но может где то подобное писалось (просто я не искал)
C++
1
2
unsigned long NewT((unsigned long (time(NULL) << 10)) + (clock()&1023));
srand(NewT);
Лучше, почему?
Такое же число NewT может появиться только через ~ 48 дней
Оно способно давать псевдослучайное число каждую ~ миллисекунду
Такое же случайное число может получиться через ~32,768 секунд

чем обычное
C++
1
srand(time(NULL));
Такое же число time(NULL) не сгенерируется уже никогда (~135 лет)
способно давать псевдослучайное число - каждую секунду
Такое же случайное число может получиться через ~9 часов 6 минут

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
using namespace std;
 
int i;
const int r(RAND_MAX + 1);
unsigned int m, M, k, R[r];
 
void main()
{
    do{
        srand(k);
        ++R[rand()];
 
        if(!(++k << 8))
        {
            i = 0;
            m = M = R[0];
            while(++i != r)
                if(R[i] < m) m = R[i];
                else
                    if(R[i] > M) M = R[i];
            cout << ((k-1) >> 24) << "> Count RAND(min, max) = [" 
                 << m << ", " << M << "]" << ((m == M)?("\n<"):("\r<"));
        }
    }while(k);
 
    cout << "\nPress ENTER to continue...";
    cin.get();
}
Итог очень интересный:
Кликните здесь для просмотра всего текста
<127> Count RAND(min, max) = [65536, 65536]
<255> Count RAND(min, max) = [131072, 131072]
Press ENTER to continue...

Получается что в некоторых точках функция равномерная (т.е. равномерно распределяется значения)
что есть хорошо)
в конечном результате, как видно получается R[i] = 131072 (каждое)

Если кто уже делал подобное изучение генерации псевдо-случайных чисел, скинуть где прочитать)
(читал, но что то подобных не находил)

Добавлено через 6 минут
Можно конечно использовать:
C++
1
unsigned long NewT((time(NULL)/1000) + (clock()%1000));
НО как мне кажется (деление на 1000)/(остаток от деления на 1000) - не дает
такое же равномерное распределения как и (сдвиг влево на 10)/(маска 0x03ff)

Хотя, для каждого конкретного случая, лучше подбирать свой способ

Добавлено через 9 минут
Например если встряхивается только один раз,
то логичнее писать:
C++
1
srand(time(NULL));
но если нужно встряхнуть в цикле, например раз 10-15, то лучше пользоваться:
Цитата Сообщение от eXPonent Посмотреть сообщение
unsigned long NewT((time(NULL)/1000) + (clock()%1000));
так выполнения одной итерации может занимать меньше одной секунды.

Добавлено через 1 час 11 минут
Теоретическое время выполнения
вот такой проги (9 дней) нужно как нить ускорить
хочу увидеть когда наблюдается равное распределение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
using namespace std;
 
int i;
const int r(RAND_MAX + 1);
unsigned int m, M, k, R[r];
 
void main()
{
    do{
        srand(k);
        ++R[rand()];
 
        i = 0;
        m = M = R[0];
        while(++i != r)
            if(R[i] < m) m = R[i];
            else
                if(R[i] > M) M = R[i];
 
        if( (m == M) || (!(short)k))
            cout << k << "> Count RAND(min, max) = [" << m
            << ", " << M << "]" << ((m == M)?("\n<"):("\r<"));
    }while(++k);
 
    cout << "\rPress ENTER to continue...";
    cin.get();
}
Добавлено через 2 часа 40 минут
Ускорил алгоритм:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
 
int i, r;
const int c(RAND_MAX + 1);
unsigned int m, M, k, R[c], R_count[0x20000+4];
 
void main()
{
    R_count[0] = c;
    do{
        srand(k);
        if(++R_count[r = ++R[rand()]] == 1) M = r;
        if(--R_count[r-1] == 0) m = r;
 
        if( (R_count[r] == c) || !((k+1) << 8))
            cout << "<0x" << hex << k << dec << "> Count RAND(min, max) = ["
                 << m << ", " << M << "]" << ((m == M)?('\n'):('\r'));
    }while(++k);
 
    cout << "\rPress ENTER to continue...";
    cin.get();
}
Итог тот же
Цитата Сообщение от eXPonent Посмотреть сообщение
Итог очень интересный:
Кликните здесь для просмотра всего текста
<0x7fffffff> Count RAND(min, max) = [65536, 65536]
<0xffffffff> Count RAND(min, max) = [131072, 131072]
Press ENTER to continue...
Добавлено через 18 минут
Получается что равномерно распределить значения можно только в двух диапазонах:
[0x00000000..0x7fffffff] и
[0x00000000..0xffffffff] и
и эти диапазоны он трансформирует в [0x0000..0x7fff]

Добавлено через 3 минуты
Получается подобным методом можно шифровать данные!
Правда размер файла итоговый будет в два раза больше
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.05.2017, 21:29
Ответы с готовыми решениями:

Генератор псевдо случайных чисел повторяет значения
Генерирую доступ случайным образом в массив chars; К примеру 1000 раз, проведя операцию 2 раза, результат один и то же? Как это...

Псевдо генератор случаных чисел
Доброго времени суток! Вот есть такая прорамка #include &lt;math.h&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include...

Как использовать генератор случайных чисел?
Помогите, пожалуйста, разобраться и исправить программу .Как в этой программе добавить генератор случайных чисел? Объясните, пожалуйста, по...

50
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
29.05.2017, 13:09
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от eXPonent Посмотреть сообщение
Именно так
Что именно так? Ты же делаешь не так.

А я кажись начинаю понимать, что же ты сделал - просто сравнил функции y=(time(NULL) << 10)) + (clock()&1023) и y=time(NULL). Зачем сюда вообще приплетать rand я не понимаю.
Я не вижу смысла в необходимости вызывать srand больше одного раза в однопоточной программе. Лучше этим ты не сделаешь, только хуже.

Добавлено через 5 минут
Цитата Сообщение от eXPonent Посмотреть сообщение
только вот pid лежит ли в каких то пределах?
Ага, зависит от ОС. И зачастую для каждого процесса он выбирается случайно.

Цитата Сообщение от eXPonent Посмотреть сообщение
И насколько у него случайный так сказать выпадение числа, при повторном запуске программы
Чтобы при повторном запуске последовательность, выдаваемая rand(), была другой, достаточно просто получить другое семя.
Ты боишься, что при повторном запуске time(NULL) выдаст тоже самое значение, а следовательно и rand() будет выдавать тоже самое? Но...
Цитата Сообщение от nonedark2008 Посмотреть сообщение
(unsigned long (time(NULL) << 10)) + (clock()&1023)
С большой долей вероятности от запуска к запуску программы к моменту установки семени пройдет одинаковое кол-во времени, т.е. clock() вернет одно и то же значение - фигня выходит.
0
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
29.05.2017, 13:18  [ТС]
Цитата Сообщение от nonedark2008 Посмотреть сообщение
А я кажись начинаю понимать, что же ты сделал - просто сравнил функции y=(time(NULL) << 10)) + (clock()&1023) и y=time(NULL)
нет, этого я не делал, я это предположил

Цитата Сообщение от nonedark2008 Посмотреть сообщение
Лучше этим ты не сделаешь, только хуже.
Докажи

Цитата Сообщение от nonedark2008 Посмотреть сообщение
Выбрал семя, вызвал rand пару миллиардов раз. И так для всех семян.
Хорошо, напиши код и покажи что так кардинально поменялось (отличия) от моего алгоритма, банального перебора семян

Добавлено через 3 минуты
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Ага, зависит от ОС. И зачастую для каждого процесса он выбирается случайно.
Я имел ввиду, если запускать на одной и той же ОС
максимально близко друг к другу
Цитата Сообщение от nonedark2008 Посмотреть сообщение
clock() вернет одно и то же значение
а вот time(NULL) вернет уже другое значение, так как пройдет секунда

Добавлено через 2 минуты
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Чтобы при повторном запуске последовательность, выдаваемая rand(), была другой, достаточно просто получить другое семя.
это будет подмножество, уже известной последовательности значений
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
29.05.2017, 13:22
Цитата Сообщение от eXPonent Посмотреть сообщение
Докажи
rand хорош тем, что при фиксированном семени выдает последовательность уникальных чисел с заданным периодом. Вызывая srand в программе несколько раз, это свойство нарушается непредсказыемым образом. Доказал.

Цитата Сообщение от eXPonent Посмотреть сообщение
напиши код и покажи что так кардинально поменялось
Этим я конечно заниматься не буду.

Добавлено через 4 минуты
Цитата Сообщение от eXPonent Посмотреть сообщение
а вот time(NULL) вернет уже другое значение, так как пройдет секунда
А кто сказал, что пройдет секунда?
Цитата Сообщение от eXPonent Посмотреть сообщение
это будет подмножество, уже известной последовательности значений
Это очевидно. А в твоем случае разве не так будет?
0
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
29.05.2017, 13:29  [ТС]
Цитата Сообщение от nonedark2008 Посмотреть сообщение
А кто сказал, что пройдет секунда?
Но тогда
C++
1
time(NULL)
будет выдавать оно и то же число (в течении одной секунды)
Я думаю, это аксиома
Я вызывал clock() несколько раз подряд, у меня были разные значения
близкие друг к другу, но разные
Следовательно вероятность того, что в данную секунду будет то же самое значение clock() (<=1)
А вероятность того, что в данную секунду time(NULL) будет то же самое значение (=1)
Я думаю, это логично

Цитата Сообщение от nonedark2008 Посмотреть сообщение
Это очевидно. А в твоем случае разве не так будет?
Нет, будет браться произвольный элемент из каждого подмножества
и генерироваться новое подмножество

Цитата Сообщение от nonedark2008 Посмотреть сообщение
Вызывая srand в программе несколько раз, это свойство нарушается непредсказуемым образом
и чем же так "непредсказуемый образ" хуже чем
Цитата Сообщение от nonedark2008 Посмотреть сообщение
при фиксированном семени выдает последовательность уникальных чисел с заданным периодом.
Добавлено через 34 секунды
Цитата Сообщение от nonedark2008 Посмотреть сообщение
rand хорош тем, что при фиксированном семени выдает последовательность уникальных чисел с заданным периодом
И где это сказано, что подобное есть хорошо?
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
29.05.2017, 13:37
Цитата Сообщение от eXPonent Посмотреть сообщение
И где это сказано, что подобное есть хорошо?
Цитата Сообщение от eXPonent Посмотреть сообщение
и чем же так "непредсказуемый образ" хуже чем
Тем, что ты используешь линейный конгруэнтный метод.
Цитата Сообщение от eXPonent Посмотреть сообщение
будет браться произвольный элемент из каждого подмножества
Но эти подмножества будут пересекаться, и при этом они все также остаются подмножествами исходного множества.

Добавлено через 1 минуту
Цитата Сообщение от eXPonent Посмотреть сообщение
Я вызывал clock() несколько раз подряд, у меня были разные значения
clock считает в милисекундах. Сколько операций может выполнить компьютер за одну милисекунду? Сколько раз компьютер может вызвать clock, а его значение не изменится?
0
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
29.05.2017, 14:01  [ТС]
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Сколько операций может выполнить компьютер за одну милисекунду?
вообще то я говорю сколько раз пользователь может запустить приложение в секунду
причем здесь то сколько операций совершает процессор?

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

Цитата Сообщение от nonedark2008 Посмотреть сообщение
Тем, что ты используешь линейный конгруэнтный метод.
Так, я показал как улучшить рандомизацию в этом методе

Цитата Сообщение от nonedark2008 Посмотреть сообщение
И где это сказано, что подобное есть хорошо?
и так не понял есть ли ответ, на этот вопрос (твоя версия)
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
29.05.2017, 14:11
Цитата Сообщение от eXPonent Посмотреть сообщение
вообще то я говорю сколько раз пользователь может запустить приложение в секунду
Т.е. твой алгоритм работает только, если программу запускает пользователь?
Ну скажем, вручную я могу за секунду запустить программу пять раз. С большой вероятностью в некоторых из этих пяти программах clock вернет одно и тоже значение.

Цитата Сообщение от eXPonent Посмотреть сообщение
А ты можешь предложить что то лучше?
Использовать другой генератор, использовать нормальный источник (комбинацию источников) энтропии, время - это дерьмовый источник.

Цитата Сообщение от eXPonent Посмотреть сообщение
Так, я показал как улучшить рандомизацию в этом методе
И испортить остальные его свойства. Кстати, можешь одним-двумя предложениями сформулировать то, что ты предлагаешь?

Цитата Сообщение от eXPonent Посмотреть сообщение
и так не понял есть ли ответ, на этот вопрос (твоя версия)
Что моя версия? Коэффициенты генератора подбираются так, чтобы у получившейся последовательности были хорошие статистические свойства (я тебе уже кидал ссылку на вики, где описываются такие свойства). Ты предлагаешь внести некоторые изменения в метод. При этом говоришь, что он стал лучше, но не обращаешь внимание на те самые свойства.
0
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
29.05.2017, 14:24  [ТС]
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Т.е. твой алгоритм работает только, если программу запускает пользователь?
Ну скажем, вручную я могу за секунду запустить программу пять раз. С большой вероятностью в некоторых из этих пяти программах clock вернет одно и тоже значение.
Я запускал, у меня выходили разные значения, близкие, но разные

Цитата Сообщение от nonedark2008 Посмотреть сообщение
Использовать другой генератор, использовать нормальный источник (комбинацию источников) энтропии, время - это дерьмовый источник.
Примеры, можно?

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

Цитата Сообщение от nonedark2008 Посмотреть сообщение
Кстати, можешь одним-двумя предложениями сформулировать то, что ты предлагаешь?
Вместо
C++
1
srand(time(NULL));
в начале программы, использовать что нить иное (можно предложенное мной метод).
Вызвать его можно один раз в проге (что бы сохранить, как вы говорите свойства), а можно несколько раз (как это предлагаю я)
Все зависит, от решаемой задачи.

Цитата Сообщение от nonedark2008 Посмотреть сообщение
Ты предлагаешь внести некоторые изменения в метод.
Я предлагаю внести изменения в генерацию начального семени. Вот и все
Сколько раз встряхивать семя, индивидуальное дело каждого
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
29.05.2017, 14:44
Лучший ответ Сообщение было отмечено eXPonent как решение

Решение

Цитата Сообщение от eXPonent Посмотреть сообщение
покажите хоть контр пример
Я уже показал на примере периода. При этом в твоем случае будет много повторяющихся чисел (так как период последовательности однозначно станет меньше), т.е. распределение бит генерируемых чисел тоже будет нарушено в худшую сторону. Это все вслучае многократного вызова srand.
Цитата Сообщение от eXPonent Посмотреть сообщение
Сколько раз встряхивать семя, индивидуальное дело каждого
А я говорю, что много раз встряхивать семя вредно.
Цитата Сообщение от eXPonent Посмотреть сообщение
Я предлагаю внести изменения в генерацию начального семени
При этом не решается основная проблема, связанная с использованием time(NULL).

Цитата Сообщение от eXPonent Посмотреть сообщение
Примеры, можно?
В комментариях к одной из твоих ссылок ссылаются на это.
На википедии есть список хардварных генераторов, для каждого можно найти результаты исследований и посмотреть, что они используют в качестве источника энтропии. Но чтобы это все понять нужно на продвинутом уровне знать математику и матстат, я тоже не рискую туда смотреть - совсем не моя область.
1
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
29.05.2017, 15:10  [ТС]
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Я уже показал на примере периода. При этом в твоем случае будет много повторяющихся чисел (так как период последовательности однозначно станет меньше), т.е. распределение бит генерируемых чисел тоже будет нарушено в худшую сторону. Это все вслучае многократного вызова srand.
Хорошо, допустим это так (это вкладывается в обычное понимание)
Но на мой взгляд, если функция периодичная, то можно предположить значение в определнной точке, что как мне кажется не очень хорошо.

Цитата Сообщение от nonedark2008 Посмотреть сообщение
А я говорю, что много раз встряхивать семя вредно.
Допустим это так, но тогда можно встряхнуть два-три раза в середине и в конце
что бы сбить периодичность например

Цитата Сообщение от nonedark2008 Посмотреть сообщение
В комментариях к одной из твоих ссылок ссылаются
Хорошо, почитаю

Цитата Сообщение от nonedark2008 Посмотреть сообщение
При этом не решается основная проблема, связанная с использованием time(NULL).
Что значит не решается?

Добавлено через 9 минут
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Я рад, что выдаваемые числа близки к равномерному распределению, но... на сколько они случайны?
Для этого я написал программу, которая считает и запоминает при каких одинаковых семенах,
получаются одни и те же (первые) значения [по поводу вторых и последующих, я ещё не заморочился]

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <map>
#include <iostream>
using namespace std;
 
void main()
{
    unsigned int i(0), k(0), t(0);
    map<unsigned int, unsigned int> temp;
 
    do{
        t = 0;
    do{
        srand(k);
        if(rand() == i)
        {
//          cout << "+" << k - t << ((t)?('\t'):('\n'));
            ++temp[k-t];
//          if(k - t > 50000) cout << endl;
            t = k;
        }
        if(!(k << 8)) cout << (k >> 24) << '\r';
    }while(++k);
        cout << "i = " << i << endl;
        for(map<unsigned int, unsigned int>::iterator it(temp.begin()); it != temp.end(); ++it)
            cout << "[" << it->first << "] = " << it->second << '\t';
        temp.clear();
        cout << endl;
    }while(++i);
 
    cout << "\nPress ENTER to continue...";
    cin.get();
}
(Если убрать комментарии в двух строчках 16 и 18,
то посыпятся последовательности, которые ЯВНО имеют очень маленький период)
Осталось её только ускорить, за счет съедания памяти
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
29.05.2017, 15:27
Цитата Сообщение от eXPonent Посмотреть сообщение
то можно предположить значение в определнной точке
Конечно можно, поэтому конгруэнтный метод не считается криптоустойчивых. Для криптографии используются более математически сложные генераторы с хорошим источником энтропии.

Цитата Сообщение от eXPonent Посмотреть сообщение
Что значит не решается?
Ты же говорил, что time(NULL) плох тем, что меняется только раз в секунду, т.е. при единовременном запуске нескольких экземпляров программы генерируемая последовательность будет идентичной. Но ранее я объяснил почему при использовании clock() ситуация будет примерно аналогичной.
0
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
29.05.2017, 15:56  [ТС]
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Но ранее я объяснил почему при использовании clock() ситуация будет примерно аналогичной.
но все же вероятность ниже
Проблема в другом, если алгоритм запустить через 48 дней
Цитата Сообщение от eXPonent Посмотреть сообщение
Такое же число NewT может появиться только через ~ 48 дней
Да и:
Цитата Сообщение от eXPonent Посмотреть сообщение
Такое же случайное число может получиться через ~32,768 секунд
накладывает ограничения, возрастает вероятность появления того же числа за один сеанс проги, если она проработает больше ~32,768 секунд

Добавлено через 2 минуты
В то время как
Цитата Сообщение от nonedark2008 Посмотреть сообщение
time(NULL) плох тем, что меняется только раз в секунду, т.е. при единовременном запуске нескольких экземпляров программы генерируемая последовательность будет идентичной
НО
Цитата Сообщение от eXPonent Посмотреть сообщение
Такое же случайное число может получиться через ~9 часов 6 минут
если запускать не более чем раз в 1 секунду

Добавлено через 3 минуты
Цитата Сообщение от eXPonent Посмотреть сообщение
накладывает ограничения, возрастает вероятность появления того же числа за один сеанс проги, если она проработает больше ~32,768 секунд
Но эти ограничения можно обойти, если использовать не первые 10 бит, а например меньше 9 или 8
а результат умножать на 2 или 4 соответственно,
но тогда новое значение будет получаться через ~2 или ~4 миллисекунды соответственно
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
29.05.2017, 16:20
Цитата Сообщение от eXPonent Посмотреть сообщение
Проблема в другом
Я пока не вижу проблемы, можешь ее как-то подробнее описать?
Цитата Сообщение от eXPonent Посмотреть сообщение
накладывает ограничения, возрастает вероятность появления того же числа за один сеанс проги, если она проработает больше ~32,768 секунд
Эмм, а чего ты хочешь от ГПСЧ? В любом случае последовательность чисел когда-нибудь повторится. Я не вижу проблемы в том, что числа будут повторяться - случайность она такая.
Цитата Сообщение от eXPonent Посмотреть сообщение
Такое же случайное число может получиться через ~9 часов 6 минут
Почему? Ты же сам писал, что time(NULL) будет выдавать уникальные значения на ближайшие 100+ лет? Это ведь куча миллиардов секунд?
Цитата Сообщение от eXPonent Посмотреть сообщение
Учитывая что RAND_MAX = 32767
Можно сказать, что, сгенерировав всего 32768 чисел, в полученном множестве обязательно будут повторяющиеся числа.
Т.е. если генерировать по числу каждую милисекунду, то повторяющееся число появится через 33 секунды в любом случае.

Добавлено через 9 минут
Цитата Сообщение от eXPonent Посмотреть сообщение
но все же вероятность ниже
Почему я собственно ссылался раньше на кол-во операций в милисекунду, которое может выполнить процессор.
Пусть, ты запустил два экземпляра программы в одну и туже секунду. Вероятность того, что каждый процесс получит различное семя, равна вероятности того, что в каждом процессе функция clock() вернет различные значения. Т.е. она зависит от того, на сколько быстро процессор выполнит все операции, предшествующие вызову clock. Если рассмотреть идеальный случай, когда у нас два ядра процессора, которые ничем не заняты кроме наших процессов, то семя они получат одно и тоже в независимости сколько раз мы внутри будет дергать srand.
0
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
29.05.2017, 17:23  [ТС]
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Почему? Ты же сам писал, что time(NULL) будет выдавать уникальные значения на ближайшие 100+ лет? Это ведь куча миллиардов секунд?
Да, но вот rand() будет эти уникальные последовательные значения переделывать в меньший диапазон: [0x0000..0x7fff]
А там повторение 100% именно, через этот промежуток времени (~9 часов 6 минут), при генерации чисел каждую секунду

Цитата Сообщение от nonedark2008 Посмотреть сообщение
Пусть, ты запустил два экземпляра программы в одну и туже секунду. Вероятность того, что каждый процесс получит различное семя, равна вероятности того, что в каждом процессе функция clock() вернет различные значения. Т.е. она зависит от того, на сколько быстро процессор выполнит все операции, предшествующие вызову clock. Если рассмотреть идеальный случай, когда у нас два ядра процессора, которые ничем не заняты кроме наших процессов, то семя они получат одно и тоже в независимости сколько раз мы внутри будет дергать srand.
Четыре ядра, не заняты ничем
C++
1
2
3
4
5
6
7
8
9
#include <time.h> 
#include <iostream>
using namespace std;
 
void main()
{
    cout << clock();
    cin.get();
}
запустил одновременно 15 копий
Первые 7 запущенных приложений показали различные 7 значений в пределах от [50-100]
последующие 8 показали значение либо 0 либо 1, видимо он как то оптимизировал вызов функции (хотя это для меня загадка)
можете протестировать на своей машине, посмотрим какой будет результат.
У меня последующие результаты либо 0 либо 1
вне зависимости сколько я запускаю приложений
(запуск любого кол-ва приложений от 1 до 50 тестировал)

Цитата Сообщение от nonedark2008 Посмотреть сообщение
Можно сказать, что, сгенерировав всего 32768 чисел, в полученном множестве обязательно будут повторяющиеся числа.
Т.е. если генерировать по числу каждую миллисекунду, то повторяющееся число появится через 33 секунды в любом случае.
Да, я согласен, я об этом и говорил (даже скорее ещё раньше
учитывая вот эти закономерности:
0
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
29.05.2017, 17:38  [ТС]
Цитата Сообщение от eXPonent Посмотреть сообщение
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Я рад, что выдаваемые числа близки к равномерному распределению, но... на сколько они случайны?
Для этого я написал программу, которая считает и запоминает при каких одинаковых семенах,
получаются одни и те же (первые) значения [по поводу вторых и последующих, я ещё не заморочился]
Программа проработала ~ 15 часов (объем используемой памяти до 0,5 Мб), вот её результат (для первых 152-х чисел):
Кликните здесь для просмотра всего текста
i = 0
[20057] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 1
[10023] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 2
[20069] = 11870 [30092] = 1 [30103] = 95861 [50172] = 23340
i = 3
[20058] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 4
[10024] = 1 [20069] = 11870 [30103] = 95862 [50172] = 23339
i = 5
[20069] = 11870 [30093] = 1 [30103] = 95861 [50172] = 23340
i = 6
[20059] = 1 [20069] = 11870 [30103] = 95862 [50172] = 23339
i = 7
[20069] = 11870 [30103] = 95862 [40128] = 1 [50172] = 23339
i = 8
[10025] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 9
[20069] = 11870 [30103] = 95862 [50163] = 1 [50172] = 23339
i = 10
[20060] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 11
[10026] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 12
[20069] = 11870 [30095] = 1 [30103] = 95861 [50172] = 23340
i = 13
[20061] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 14
[10027] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 15
[20069] = 11870 [30096] = 1 [30103] = 95861 [50172] = 23340
i = 16
[20062] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 17
[10028] = 1 [20069] = 11870 [30103] = 95862 [50172] = 23339
i = 18
[20069] = 11870 [30097] = 1 [30103] = 95862 [50172] = 23339
i = 19
[20063] = 1 [20069] = 11869 [30103] = 95862 [50172] = 23340
i = 20
[20069] = 11870 [30103] = 95862 [40132] = 1 [50172] = 23339
i = 21
[10029] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 22
[20069] = 11870 [30098] = 1 [30103] = 95861 [50172] = 23340
i = 23
[20064] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 24
[10030] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 25
[20069] = 11870 [30099] = 1 [30103] = 95861 [50172] = 23340
i = 26
[20065] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 27
[10031] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 28
[20069] = 11870 [30100] = 1 [30103] = 95861 [50172] = 23340
i = 29
[20066] = 1 [20069] = 11870 [30103] = 95862 [50172] = 23339
i = 30
[10032] = 1 [20069] = 11869 [30103] = 95862 [50172] = 23340
i = 31
[20069] = 11870 [30101] = 1 [30103] = 95862 [50172] = 23339
i = 32
[20067] = 1 [20069] = 11869 [30103] = 95862 [50172] = 23340
i = 33
[20069] = 11870 [30103] = 95862 [40136] = 1 [50172] = 23339
i = 34
[10033] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 35
[20069] = 11870 [30102] = 1 [30103] = 95861 [50172] = 23340
i = 36
[20068] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 37
[10034] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 38
[0] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 39
[20069] = 11871 [30103] = 95861 [50172] = 23340
i = 40
[10035] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 41
[1] = 1 [20069] = 11870 [30103] = 95862 [50172] = 23339
i = 42
[20069] = 11870 [20070] = 1 [30103] = 95862 [50172] = 23339
i = 43
[10036] = 1 [20069] = 11869 [30103] = 95862 [50172] = 23340
i = 44
[20069] = 11870 [30103] = 95862 [30105] = 1 [50172] = 23339
i = 45
[2] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 46
[20069] = 11870 [20071] = 1 [30103] = 95861 [50172] = 23340
i = 47
[10037] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 48
[3] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 49
[20069] = 11870 [20072] = 1 [30103] = 95861 [50172] = 23340
i = 50
[10038] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 51
[4] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 52
[20069] = 11870 [20073] = 1 [30103] = 95861 [50172] = 23340
i = 53
[10039] = 1 [20069] = 11870 [30103] = 95862 [50172] = 23339
i = 54
[5] = 1 [20069] = 11869 [30103] = 95862 [50172] = 23340
i = 55
[20069] = 11870 [20074] = 1 [30103] = 95862 [50172] = 23339
i = 56
[20069] = 11870 [30103] = 95862 [40143] = 1 [50172] = 23339
i = 57
[10040] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 58
[6] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 59
[20069] = 11870 [20075] = 1 [30103] = 95861 [50172] = 23340
i = 60
[10041] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 61
[7] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 62
[20069] = 11870 [20076] = 1 [30103] = 95861 [50172] = 23340
i = 63
[10042] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 64
[8] = 1 [20069] = 11870 [30103] = 95862 [50172] = 23339
i = 65
[20069] = 11870 [20077] = 1 [30103] = 95861 [50172] = 23340
i = 66
[10043] = 1 [20069] = 11870 [30103] = 95862 [50172] = 23339
i = 67
[20069] = 11870 [30103] = 95862 [30112] = 1 [50172] = 23339
i = 68
[9] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 69
[20069] = 11870 [30103] = 95862 [40147] = 1 [50172] = 23339
i = 70
[10044] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 71
[10] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 72
[20069] = 11870 [20079] = 1 [30103] = 95861 [50172] = 23340
i = 73
[10045] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 74
[11] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 75
[20069] = 11870 [20080] = 1 [30103] = 95861 [50172] = 23340
i = 76
[10046] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 77
[12] = 1 [20069] = 11870 [30103] = 95862 [50172] = 23339
i = 78
[20069] = 11870 [20081] = 1 [30103] = 95861 [50172] = 23340
i = 79
[10047] = 1 [20069] = 11870 [30103] = 95862 [50172] = 23339
i = 80
[20069] = 11870 [30103] = 95862 [30116] = 1 [50172] = 23339
i = 81
[13] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 82
[20069] = 11870 [30103] = 95862 [40151] = 1 [50172] = 23339
i = 83
[10048] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 84
[14] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 85
[20069] = 11870 [20083] = 1 [30103] = 95861 [50172] = 23340
i = 86
[10049] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 87
[15] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 88
[20069] = 11870 [20084] = 1 [30103] = 95861 [50172] = 23340
i = 89
[10050] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 90
[16] = 1 [20069] = 11870 [30103] = 95862 [50172] = 23339
i = 91
[20069] = 11870 [20085] = 1 [30103] = 95862 [50172] = 23339
i = 92
[10051] = 1 [20069] = 11869 [30103] = 95862 [50172] = 23340
i = 93
[20069] = 11870 [30103] = 95862 [30120] = 1 [50172] = 23339
i = 94
[17] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 95
[20069] = 11870 [20086] = 1 [30103] = 95861 [50172] = 23340
i = 96
[10052] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 97
[18] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 98
[20069] = 11870 [20087] = 1 [30103] = 95861 [50172] = 23340
i = 99
[10053] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 100
[19] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 101
[20069] = 11870 [20088] = 1 [30103] = 95861 [50172] = 23340
i = 102
[10054] = 1 [20069] = 11870 [30103] = 95862 [50172] = 23339
i = 103
[20] = 1 [20069] = 11869 [30103] = 95862 [50172] = 23340
i = 104
[20069] = 11870 [20089] = 1 [30103] = 95862 [50172] = 23339
i = 105
[20069] = 11870 [30103] = 95862 [40158] = 1 [50172] = 23339
i = 106
[10055] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 107
[21] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 108
[20069] = 11870 [20090] = 1 [30103] = 95861 [50172] = 23340
i = 109
[10056] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 110
[22] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 111
[20069] = 11870 [20091] = 1 [30103] = 95861 [50172] = 23340
i = 112
[10057] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 113
[23] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 114
[20069] = 11870 [20092] = 1 [30103] = 95861 [50172] = 23340
i = 115
[10058] = 1 [20069] = 11870 [30103] = 95862 [50172] = 23339
i = 116
[24] = 1 [20069] = 11869 [30103] = 95862 [50172] = 23340
i = 117
[20069] = 11870 [20093] = 1 [30103] = 95862 [50172] = 23339
i = 118
[20069] = 11870 [30103] = 95862 [40162] = 1 [50172] = 23339
i = 119
[10059] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 120
[25] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 121
[20069] = 11870 [20094] = 1 [30103] = 95861 [50172] = 23340
i = 122
[10060] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 123
[26] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 124
[20069] = 11870 [20095] = 1 [30103] = 95861 [50172] = 23340
i = 125
[10061] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 126
[27] = 1 [20069] = 11870 [30103] = 95862 [50172] = 23339
i = 127
[20069] = 11870 [20096] = 1 [30103] = 95861 [50172] = 23340
i = 128
[10062] = 1 [20069] = 11870 [30103] = 95862 [50172] = 23339
i = 129
[20069] = 11870 [30103] = 95862 [30131] = 1 [50172] = 23339
i = 130
[28] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 131
[20069] = 11870 [30103] = 95862 [40166] = 1 [50172] = 23339
i = 132
[10063] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 133
[29] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 134
[20069] = 11870 [20098] = 1 [30103] = 95861 [50172] = 23340
i = 135
[10064] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 136
[30] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 137
[20069] = 11870 [20099] = 1 [30103] = 95861 [50172] = 23340
i = 138
[10065] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 139
[31] = 1 [20069] = 11870 [30103] = 95862 [50172] = 23339
i = 140
[20069] = 11870 [20100] = 1 [30103] = 95862 [50172] = 23339
i = 141
[10066] = 1 [20069] = 11869 [30103] = 95862 [50172] = 23340
i = 142
[20069] = 11870 [30103] = 95862 [30135] = 1 [50172] = 23339
i = 143
[32] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 144
[20069] = 11870 [20101] = 1 [30103] = 95861 [50172] = 23340
i = 145
[10067] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 146
[33] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 147
[20069] = 11870 [20102] = 1 [30103] = 95861 [50172] = 23340
i = 148
[10068] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 149
[34] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
i = 150
[20069] = 11870 [20103] = 1 [30103] = 95861 [50172] = 23340
i = 151
[10069] = 1 [20069] = 11870 [30103] = 95862 [50172] = 23339


Можно предположить, что при любом I наблюдаются подобные закономерности.
А это хорошо?
Миниатюры
Генератор псевдо-случайных чисел, как хэш-функция  
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
29.05.2017, 17:46
Цитата Сообщение от eXPonent Посмотреть сообщение
можете протестировать на своей машине, посмотрим какой будет результат.
На моем ноутбуке постоянно 0. Если добавить в код задержку в одну милисекунду, то 1-2 без исключений.
Это говорит о том, что при отсутствии каких-то явных задержек в программе все копии получат одно и тоже семя.
Цитата Сообщение от eXPonent Посмотреть сообщение
одинаковых семенах,получаются одни и те ж
Может имелись в ввиду различные семена?
Цитата Сообщение от eXPonent Посмотреть сообщение
t = k;
Это зачем?
Цитата Сообщение от eXPonent Посмотреть сообщение
i = 0
[20057] = 1 [20069] = 11870 [30103] = 95861 [50172] = 23340
Если кратко, что каждое из этих чисел значит?
0
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
29.05.2017, 17:47  [ТС]
Вот загрузил более крупного разрешения log:
Миниатюры
Генератор псевдо-случайных чисел, как хэш-функция  
0
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
29.05.2017, 18:04  [ТС]
Цитата Сообщение от nonedark2008 Посмотреть сообщение
На моем ноутбуке постоянно 0. Если добавить в код задержку в одну милисекунду, то 1-2 без исключений.
Это говорит о том, что при отсутствии каких-то явных задержек в программе все копии получат одно и тоже семя.
Следовательно это накладывает, что встряхивание желательно сделать после ~1 секунды работы проги

Цитата Сообщение от nonedark2008 Посмотреть сообщение
одинаковых семенах,получаются одни и те ж
можете более подробно описать? Что вы имеете ввиду
А то я уже запутался в контексте предложений

Цитата Сообщение от nonedark2008 Посмотреть сообщение
Это зачем?
Сохраняем значение k, когда найдено новое значение
нужно, для расчета разности (то бишь суммы +(k-t))

Цитата Сообщение от nonedark2008 Посмотреть сообщение
Если кратко, что каждое из этих чисел значит?
Каждое число означает сколько раз встречается СУММА (назовем её T - период), т.е. прибавление к любому числу для семени где получается тождество:
C++
1
2
3
4
srand(uint x); 
h=rand();
srand(uint x + T);
h == rand(); //true!
Добавлено через 7 минут
Цитата Сообщение от eXPonent Посмотреть сообщение
i = 39
[20069] = 11871 [30103] = 95861 [50172] = 23340
Обратите внимание на это i = 39
в нем нет уникального первого значения!
Вместо этого количество значений 20069 на один больше во как
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
29.05.2017, 18:06
Цитата Сообщение от eXPonent Посмотреть сообщение
после ~1 секунды
Но если в каждом исполняемом файле пройдет ровно по одной секунде, то опять же везде clock() вернет практически одно и тоже значение. В чем тогда смысл?
Цитата Сообщение от eXPonent Посмотреть сообщение
Каждое число означает сколько раз встречается СУММА
Ага. Думаю, что если попросту решить сравнение, задаваемое вот этой функцией, относительно семени
Цитата Сообщение от eXPonent Посмотреть сообщение
C++
1
2
3
4
int __cdecl rand ( void ) {
 _ptiddata ptd = _getptd();
 return( ((ptd->_holdrand = ptd->_holdrand * 214013L + 2531011L) >> 16) & 0x7fff ); 
}
то ты должен получить примерно те же самые значения. Но я, если быть честным, не понимаю зачем ты это исследуешь.

Добавлено через 37 секунд
Цитата Сообщение от eXPonent Посмотреть сообщение
после ~1 секунды
Но если в каждом исполняемом файле пройдет ровно по одной секунде, то опять же везде clock() вернет практически одно и тоже значение. В чем тогда смысл?
Цитата Сообщение от eXPonent Посмотреть сообщение
Каждое число означает сколько раз встречается СУММА
Ага. Думаю, что если попросту решить сравнение, задаваемое вот этой функцией, относительно семени
Цитата Сообщение от eXPonent Посмотреть сообщение
C++
1
2
3
4
int __cdecl rand ( void ) {
 _ptiddata ptd = _getptd();
 return( ((ptd->_holdrand = ptd->_holdrand * 214013L + 2531011L) >> 16) & 0x7fff ); 
}
то ты должен получить примерно те же самые значения. Но я, если быть честным, не понимаю зачем ты это исследуешь.
0
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
29.05.2017, 18:16  [ТС]
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Но если в каждом исполняемом файле пройдет ровно по одной секунде, то опять же везде clock() вернет практически одно и тоже значение. В чем тогда смысл?
В том то и дело что не одно и то же
например можно поставить отслеживания нажатия Enter на клавиатуре, от начала работы проги
Это и будет начальное семя

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

Добавлено через 2 минуты
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Ага. Думаю, что если попросту решить сравнение, задаваемое вот этой функцией, относительно семени
Ты сам алгоритм понял?
или тебе скинуть самые первые версии алгоритма, где выводятся числа, ищутся закономерности
и показываются периоды...
а так же рассчитывается разность между двумя элементами (то бишь T), собственно что и делает моя прога

Добавлено через 1 минуту
Я в проге просто для краткости решил оставить последнне
Цитата Сообщение от eXPonent Посмотреть сообщение
рассчитывается разность между двумя элементами (то бишь T)
Но и то модифицировал, не выводил все T, а именно кол-во каждого T

Добавлено через 1 минуту
В комментах к алгоритму ты сможешь найти что бы выводились, а не только подсчитывались каждый период
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.05.2017, 18:16
Помогаю со студенческими работами здесь

Как сделать генератор случайных чисел?
как правильно сделать генератор случайных чисел?? Приведите пожалуйста примеры??

Как сделать генератор случайных чисел?
Привет всем. Возник очередной вопрос за это утро. Как сделать генератор случайных чисел? В учебнике написано так: &quot;Для этого...

Как создать генератор случайных чисел
Здравствуйте!Я работаю в dev c++ 4.9.9.2 киньте готовый исходник.Зарание спасибо!

Генератор случайных чисел. Как прикрепить?
Как к генератору случайных чисел прикрепить &quot;Введите размер массива&quot;? #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include...

Как создать генератор случайных чисел ?
Доброго всем времени суток. У меня возник вопрос, как создать генератор случайных чисел. Написал такой код: a = rand() +...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru