Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как получить случайные числа в C++?

ФермаКактусов Высший разум (182113), закрыт 2 месяца назад
 offer rand_offer() 
{
milliseconds ms = duration_cast(system_clock::now().time_since_epoch());
unsigned __int64 count_ms = ms.count();
Sleep(1);
srand(count_ms);
double price = (rand() % 10) + ((double)rand() / 100);
int count = rand() % 1000;
return { price,count };
}
Лучший ответ
Андрей Высший разум (426560) 2 месяца назад
srand должен вызываться один раз - в начале main. Никаких вызовов srand внутри функции быть не должно.

Но ущербна сама идея использовать srand / rand: это доставшийся в наследство от C низкокачественный генератор. Для генерации случайных чисел в C++ есть намного более совершенные инструменты: https://learn.microsoft.com/ru-ru/cpp/standard-library/random
Остальные ответы
Стас Еролов [❄️] Мыслитель (7126) 2 месяца назад
Случайное, или, более точно, псевдослучайное, число в C++ генерируется с помощью функции rand, эту функцию сначала нужно инициализировать. Инициализацию можно делать в самом начале программы 1-н раз. Подходящая команда для этого srand(time(0)); // инициализация генератора случайных чисел с помощью метки времени 0. После инициализации можно выдавать целые случайные числа в диапазоне от 0 до MAX_RAND.
Николай Веселуха Высший разум (360818) 2 месяца назад
 #include  
#include
#include

using namespace std;

class Random {
public:
Random() {
random_device device;
gen.seed(device());
}
int uniform(int first, int last) {
uniform_int_distribution uid(first, last);
return uid(gen);
}
int poisson(double lambda) {
poisson_distribution pd(lambda);
return pd(gen);
}
private:
mt19937 gen;
};

int main() {
constexpr DWORD delay{ 1500 };
size_t n = 12;
Random rand;
do {
cout << "uniform: " << rand.uniform(1, 100) << '\n';
cout << "poisson: " << rand.poisson(50.0) << "\n\n";
Sleep(delay);
} while (--n);
}
Unknown Unknown Гуру (4368) 2 месяца назад
Самый простой способ - это линейный конгруэнтный метод
Похожие вопросы