В с++ хочу сгенерировать рандомное число, но число, которое генерируется с помощью функции rand() с каждым запуском не меняется. Так вот вопрос, как сгенерировать поистине рандомное число, которое с каждым запуском программы будет регенерироваться?
Asked
Active
Viewed 111 times
1 Answers
1
Учитывая, что выделяя динамическую память операционная система обычно не повторяется с адресом: то можно значение этого адреса использовать как зерно распределения, как альтернативный способ:
class Seed {
union {
const char* p;
const unsigned n;
};
public:
Seed() : p(new char) {}
operator unsigned() const
{
return n;
}
~Seed() { delete p; }
};
И пример применения:
srand(Seed());
for (int i = 0; i < 10; ++i)
cout << rand() % 100 << ' ';
Просто можно не подключать дополнительный файл.
AR Hovsepyan
- 15,934
-
1
-
В адресном пространстве процесса адрес первого выделенного объекта всегда будет один и тот же. Физически объект может оказаться где угодно, но операционная система скрывает этот факт от процесса с помощью такой штуки как трансляция адресов (виртуальная память). – Stanislav Volodarskiy Dec 12 '21 at 20:21
-
@wololo, не могу согласиться _ объединение тут не причем и речь только про простых программах, а не для повсеместного использования – AR Hovsepyan Dec 13 '21 at 16:45
srand(time(NULL)). – Stanislav Volodarskiy Dec 11 '21 at 14:52rand()... – Harry Dec 11 '21 at 15:02