Использование функции rand() для генерации случайных чисел.
#include <iostream> // std::cout, srand(), rand()
#include <ctime> // std::time
#include <iomanip> // std::setw(), std:: left
int main(){
srand(std::time(NULL)); // Используем текущее время для инициализации генератора
std::cout << "RAND_MAX = " << RAND_MAX << "\n"; // Случайное число генерится от 0 до RAND_MAX
for(int n = 0; n < 10; n++){
int ri = rand(); // Генерируем случайное целое число
double rf = static_cast<double> (ri) / RAND_MAX; // Приводим случайное число к double 0...1
std::cout << std::left << std::setw(10) << ri << rf << "\n"; // Выводим случайные числа
}
}
Для генерации, например в диапазоне 0 ... 100 можно применить конструкцию типа.
int ri = rand() % 101; // Генерируем случайное целое число от 0 до 100
#include <iostream> // std::cout
int rng(){ // Генерация случайных чисел в ANSI C от 0 до 2^15
static unsigned long int next = 1; // Нужно задавать случайно, иначе числа повторяются при перезапусках
next = next * 1103515245 + 12345;
return (unsigned int)(next / 65536) % 32768;
}
int main(){
for(int n = 0; n < 1000; n++){
std::cout << rng() << "\n"; // Выводим случайные числа
}
}
XorShift алгоритм
#include <iostream> // std::cout
struct seed_t{
unsigned x = 1; // начальные значения могут быть любыми
unsigned y = 123;
unsigned z = 456;
unsigned w = 768;
};
unsigned XorShift128(){
static seed_t s;
unsigned t = s.x^(s.x<<11);
s.x = s.y;
s.y = s.z;
s.z = s.w;
s.w = (s.w^(s.w>>19)) ^ (t^(t>>8));
return s.w;
}
int main(){
for(int n = 0; n < 1000; n++){
std::cout << XorShift128() << "\n"; // Выводим случайные числа
}
}