7.1 Краткий обзор
7.1.1 В настоящем стандарте использованы алгоритмы, приведенные в [1], [7] и [13]. Эти алгоритмы обладают математическими и статистическими свойствами, необходимыми для обеспечения случайного отбора выборки, создания программ на различных языках программирования и компьютерах, позволяющих проводить верификацию и ревизию отобранных значений, используемых для проверок, контроля, аудита. Текст основных элементов программы на языке программирования Си приведен в приложении В.
7.1.2 В алгоритмах использованы два основных элемента:
a) алгоритм инициализации, генерирующий квазислучайное начальное целое число на основе времени, прошедшего с указанной даты;
b) генератор случайных чисел.
7.1.3 При использовании для верификации или аудита алгоритм инициализации, упомянутый в 7.1.2 а) и описанный в 7.2, может быть заменен введением начального значения вручную. Это значение должно быть целым числом из интервала от 1 до 2147483398 включительно. Это значение необходимо сохранять и указывать в отчете (при составлении). Однако при использовании для контроля качества и при планировании эксперимента должна быть предусмотрена возможность не использовать компьютерный выбор начального значения, который может быть выбран по умолчанию.
Примечание - Этапы алгоритмов приведены в более формализованном виде, что может быть полезно при программировании методов. Текст программы со ссылками на подразделы настоящего стандарта приведен в приложении В.
7.2 Алгоритм инициализации
7.2.1 Алгоритм инициализации включает:
a) алгоритм вычисления времени, прошедшего с указанной даты;
b) алгоритм генерации случайных чисел на основе равномерного распределения, использующий случайное число, полученное на этапе а).
7.2.2 Приведенный алгоритм позволяет определить количество секунд с 2000-01-01 00:00:00 до текущих даты и времени.
Описание алгоритма.
a) Определяют системные дату и время компьютера в виде символьной переменной, сохраняют значение этой переменной и указывают в отчете, а затем анализируют переменную по компонентам (год, месяц, день, час, минута, секунда).
b) Вычисляют количество полных дней , начиная с указанной даты, используя для текущей даты числовые значения года (с четырьмя цифрами), месяца и дня , обработанные следующим образом:
если 3, то , ,
.
Примечание - Формула для может быть упрощена для календарных лет до 2099 года включительно заменой членов после на "-730441".
c) Вычисляют общее количество секунд , начиная с указанной даты, используя расчеты в соответствии с b) и время дня (в 24-часовом формате "hh:mm:ss"), указанное в символьной переменной в соответствии с а) на основе формулы
,
где , и - часы, минуты и секунды соответственно.
Примечание 1 - В некоторых языках программирования есть встроенные функции для вычисления непосредственно. Перед использованием такие встроенные функции должны быть проверены для обеспечения учета влияния високосных лет, летнего/зимнего времени (в зависимости от обстоятельств).
Примечание 2 - В 32-битовой реализации этого алгоритма значение увеличивается до переполнения соответствующей ячейки. В программе необходимо предусмотреть проверки того, что это число находится в интервале от 1 до 2147483398 включительно.
d) Значение, полученное в соответствии с с), является начальным числом для генератора начального числа и используется для получения заключительного начального числа. Это значение хранят в виде отдельной переменной и указывают в отчете.
e) Количество обращений к генератору случайных чисел является случайным целым от 1 до 100, полученным на основе двух наименее существенных цифр значения, полученного в соответствии с перечислением с), увеличенного на 1, и может быть рассчитано по формуле
.