Найти тему

Нормальный random в C++

© wikipedia
© wikipedia

Большинство советов по "рандомайзеру" в C и C++ сводятся к использованию srand(time(NULL));

Используя этот метод можно добиться только того, что "рандомайзер" отрабатывает исключительно с интервалом в 1 секунду для каждого запуска. Это очень неудобно при запуске "рандомайзера" чаще раза в 1 секунду или при запуске нескольких потоков, которые используют один "рандомайзер".

Решение достаточно просто. Подключаем библиотеку <random>, используем функцию random_device, по желанию, приводим ее вывод к типу int и получаем действительно случайность:

# include <iostream>
# include <random>

main int (){
std::random_device rd;
i = srand(static_cast(rd()));
printf("rand: %i", i);
return 0;
}

Для компиляции кода, использующего библиотеку <random> используется ключ -std=c++11.