БлогNot. C++: ещё раз о генерации целых и вещественных чисел в заданном диапазоне значени...

C++: ещё раз о генерации целых и вещественных чисел в заданном диапазоне значений

Как сделать функции, подобные random_string из этого листинга, "по-старому", без uniform_int_distribution, но с srand и rand?

1. Подключить к проекту заголовки

#include <cstdlib>
#include <ctime>

2. Один раз до генерации последовательностей псевдослучайных чисел выполнить

srand(time(0));

Если делать перед каждым числом (или несколькими числами), при достаточном быстродействии компьютера может получиться как раз одно и то же (одинаковый seed последовательности, соответствующий метке времени, даст одно и то же первое число последовательности).

3. Если нужные случайные целые числа в диапазоне от a до b включительно, то генерацию очередного числа можно выполнить кодом вида

int n = a + rand() % (b - a + 1); 

Если нужны случайные вещественные числа от a до b включительно, то

double d = a + (double)rand() / RAND_MAX * (b - a);

Вот программка для тестирования испытаний, проверенная в консоли Visual Studo 2015.

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main() {
 const int N = 100; //Количество испытаний
 srand(time(0));

 int a = 1, b = 5, n;
 for (int i = 0; i < N; i++) {
  n = a + rand() % (b - a + 1);
  cout << n << " ";
 }

 cout << endl;
 double A = 1., B = 5., d, min = B, max = A;
 for (int i = 0; i < N; i++) {
  d = A + (double)rand() / RAND_MAX * (B - A);
  if (d < min) min = d;
  else if (d > max) max = d;
  cout << d << " ";
 }
 cout << endl << "min=" << min << ", max=" << max;

 cout << endl << "Press Enter to exit";
 cin.clear();
 cin.ignore(INT_MAX, '\n');
 return 0;
}

теги: c++ random числа

15.02.2021, 12:31; рейтинг: 74