Генерация «псевдослучайных» данных.
Часто возникает задача генерации случайных данных, на которых программа испытывается. Система программирования Visual С++ осуществляет поддержку решения поставленной задачи, предлагая функции:
int rand( void) | Генерация псевдослучайного целого числа из интервала от 0 до RAND_MAX (RAND_MAX определен как 0x7fff) |
void srand(unsigned int seed) | Установка начального значения генератора псевдослучайных чисел |
Эти функции описаны в заголовочном файле stdlib.h.
Встроенный генератор позволяет получать серию псевдослучайных целых чисел. Первое обращение к функции rand инициирует начальную установку генератора, эквивалентную исполнению функции srand(1).
Всегда можно повторить проведенный эксперимент, указывая ту же самую начальную установку, или, наоборот, проводить новые эксперименты, задавая разные начальные установки.
В случае, когда хотим получать набор значений из некоторого ограниченного интервала [a,b], достаточно неплохие результаты дает следующий прием:
a+rand()%((b–a)+1),
т.е. вместо самого случайного числа используем остаток от его деления на длину интервала.
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
Void main()
{
int i, j, a = 1, b=3; /* Display 9 numbers. */
for( i = 0; i < 9; i++ ) {
j = rand();
printf( "%2u.%6d %d\n", i+1, j, a+j%(b-a+1) );
}
getch();
}
Результат работы этой программы представлен на рисунке:
В случае, когда необходимо использование вещественных чисел, удобно воспользоваться псевдослучайными числами из интервала [0,1], которые могут быть получены как (double)rand()/(double)RAND_MAX.
Как правило, «грязные» генераторы (псевдо)случайных чисел используются тогда, когда в моделируемый процесс нужно внести некоторую стохастику (хаос), не слишком заботясь о точном соответствии свойств генерируемого распределения математически равномерному. Кроме того, к «грязным» отнесены те генераторы, которые используют свойства представления чисел в конкретном компьютере для оптимального по быстродействия коду. При этом они могут иметь хорошее распределение, а время их работы может быть в десятки раз меньшим, чем время работы чистых.
«Чистые» генераторы обеспечивают равномерное распределение случайных чисел и независимость от конкретной машины. Как плата за это - существенно меньшее быстродействие. Существуют алгоритмы, для которых период генерируемой последовательности оценивается как 1018.
Дата добавления: 2022-02-05; просмотров: 269;