Генерация «псевдослучайных» данных.


Часто возникает задача генерации случайных данных, на которых программа испытывается. Система программирования 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;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.007 сек.