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; }
15.02.2021, 12:31 [3129 просмотров]