powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / гсч и random seed: что делать если srand(time(NULL)) не устраивает
13 сообщений из 13, страница 1 из 1
гсч и random seed: что делать если srand(time(NULL)) не устраивает
    #39842621
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
написала следующее, но может есть стандартное решение?

rseed.h
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
#ifndef RSEED_H_
#define RSEED_H_

#include <iostream>
#include <chrono>

class RandomSeed {
    private:
        static std::chrono::nanoseconds get_ns();
    public:
        static long get_rseed();
};

#endif /* RSEED_H_ */



rseed.cpp
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
#include <iostream>
#include <chrono>

#include "math.h"
#include "rseed.h"

std::chrono::nanoseconds RandomSeed::get_ns() {
    std::chrono::nanoseconds ns = std::chrono::duration_cast<std::chrono::nanoseconds>
        (std::chrono::system_clock::now().time_since_epoch());

    return ns;
}

long RandomSeed::get_rseed() {
    return RandomSeed::get_ns().count() % INT32_MAX;
}

...
Рейтинг: 0 / 0
гсч и random seed: что делать если srand(time(NULL)) не устраивает
    #39842625
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
гсч и random seed: что делать если srand(time(NULL)) не устраивает
    #39842639
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab,

там трабла именно в начале последовательности. посему можно поступить до безобразия тупо...
запросить составную часть времени - например мкс. И взять это как кол-во для холостого хода rand()...

удачи вам
(круглый)
...
Рейтинг: 0 / 0
гсч и random seed: что делать если srand(time(NULL)) не устраивает
    #39842690
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cerebrum, kolobok0
спасибо!
...
Рейтинг: 0 / 0
гсч и random seed: что делать если srand(time(NULL)) не устраивает
    #39842735
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот код тестировался где-нибудь? Системные часы оперируют дискретностью в десятки миллисекунд, как следствие наносекуды это просто добавление ноликов в конец, т.е. можно получать одно и тоже на протяжении нескольких миллисекунд .... но могу ошибаться, техника идет вперед ...
...
Рейтинг: 0 / 0
гсч и random seed: что делать если srand(time(NULL)) не устраивает
    #39842737
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TСистемные часы оперируют дискретностью в десятки миллисекунд, как следствие наносекуды это
просто добавление ноликов в конец, т.е. можно получать одно и тоже на протяжении
нескольких миллисекунд ....

Именно поэтому только нубы вызывают srand() больше одного раза за всё время работы программы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
гсч и random seed: что делать если srand(time(NULL)) не устраивает
    #39843102
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TСистемные часы оперируют дискретностью в десятки миллисекунд, как следствие наносекуды это просто добавление ноликов в конец, т.е. можно получать одно и тоже на протяжении нескольких миллисекунд .... но могу ошибаться, техника идет вперед ...
это неверно, системные часы на современных ОС оперируют с точностью от 100нс
вот ссылка на статью и тесты : https://www.modernescpp.com/index.php/the-three-clocks

точность 100нс означает, что ошибка измерения может составить до 100нс - т.е. ноликов там нет
...
Рейтинг: 0 / 0
гсч и random seed: что делать если srand(time(NULL)) не устраивает
    #39843106
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov Именно поэтому только нубы вызывают srand() больше одного раза за всё время работы программы.

и что же делать, если программу генерирующую случайную последовательность нужно вызвать 1000 раз подряд?
...
Рейтинг: 0 / 0
гсч и random seed: что делать если srand(time(NULL)) не устраивает
    #39843111
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
почитала документацию: основные ошибки были с определением переменных
проблема называется initialization of random number generator (random seed) to some distinctive run-time value :-)
т.е мне нужно было, чтобы ре-инициализация гсч проходила чаще чем 1 раз в секунду

поменяла наносекунды на микросекунды (хотя это, скорее всего, избыточно и миллисекунд было бы достаточно)

пока остановилась на этом
rseed.h
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
#ifndef RSEED_H_
#define RSEED_H_

#include <iostream>
#include <chrono>

class RandomSeed {
    private:
        static unsigned long get_current_time();

    public:
        static unsigned int get_rseed();
};

#endif /* RSEED_H_ */



rseed.cpp
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
#include <iostream>
#include <chrono>

#include "math.h"
#include "limits.h"
#include "rseed.h"

unsigned long RandomSeed::get_current_time() {
    std::chrono::microseconds mcs = std::chrono::duration_cast<std::chrono::microseconds>
        (std::chrono::steady_clock::now().time_since_epoch());

    return mcs.count();
}

unsigned int RandomSeed::get_rseed() {
    return RandomSeed::get_current_time() % UINT_MAX;
}

...
Рейтинг: 0 / 0
гсч и random seed: что делать если srand(time(NULL)) не устраивает
    #39843123
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblabи что же делать, если программу генерирующую случайную последовательность нужно вызвать
1000 раз подряд?

В пределах одной секунды? Передавать ей сид снаружи или использовать "настоящий" ГСЧ (из
/dev/urand, например).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
гсч и random seed: что делать если srand(time(NULL)) не устраивает
    #39843704
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как было выше замечено - не надо инициализировать ГПСЧ более одного раза. Это же псевдо -случайная последовательность. Зная что инициализация может произойти раз в секунду 100-1000 вариантами элементарно восстановить 100-1000 последовательностей и все их общитать.
...
Рейтинг: 0 / 0
гсч и random seed: что делать если srand(time(NULL)) не устраивает
    #39843816
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblabDimitry Sibiryakov Именно поэтому только нубы вызывают srand() больше одного раза за всё время работы программы.

и что же делать, если программу генерирующую случайную последовательность нужно вызвать 1000 раз подряд?пользоваться нормальными генераторами, особенно если это какое-то моделирование - тынц
и ещё хуже если это криптография - тынц

но точно не стандартым
...
Рейтинг: 0 / 0
гсч и random seed: что делать если srand(time(NULL)) не устраивает
    #39844101
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это для симуляции шоу Монти Хола, поэтому качество встроенного гсч более чем достаточно, проблема была с частотой инициализации
:-)
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / гсч и random seed: что делать если srand(time(NULL)) не устраивает
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]