Случайные числа в С++. Полиномиальная генерация случайных чисел.

Использование функции 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"; // Выводим случайные числа
    }
}
2023-10-23



Понравилась страница?
Добавить в закладки
Или поделиться!

Связанные темы

Ассемблерный листинг С++
Бенчмарки в С++
Рисование в консоли windows на С++
Функции в С++
Параметры функции в С++
Глоссарий С++. Идентификаторы, квалификаторы, модификаторы, объявление, определение и т.д..
Исключения в С++. Выбрасывание и ловля исключения.
Достоинства и недостатки C++
Сборка приложения без IDE C++ с помощью MinGW и Qt
Перегрузка функций и операторов в С++
Случайные числа в С++. Полиномиальная генерация случайных чисел.
Ссылки в С++
Рекурсия в С++. Примеры рекурсивных программ и без использования.
Шаблоны C++
Наименование переменных и стиль программирования
Версия компилятора С++
Время выполнения программы C++