.\" -*- coding: UTF-8 -*- '\" t .\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk) .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" References consulted: .\" Linux libc source code .\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991) .\" 386BSD man pages .\" .\" Modified 1993-03-29, David Metcalfe .\" Modified 1993-04-28, Lars Wirzenius .\" Modified 1993-07-24, Rik Faith (faith@cs.unc.edu) .\" Modified 1995-05-18, Rik Faith (faith@cs.unc.edu) to add .\" better discussion of problems with rand on other systems. .\" (Thanks to Esa Hyyti{ (ehyytia@snakemail.hut.fi).) .\" Modified 1998-04-10, Nicolás Lichtmaier .\" with contribution from Francesco Potorti .\" Modified 2003-11-15, aeb, added rand_r .\" 2010-09-13, mtk, added example program .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH rand 3 "15 декабря 2022 г." "Linux man\-pages 6.02" .SH ИМЯ rand, rand_r, srand \- генератор псевдослучайных чисел .SH LIBRARY Standard C library (\fIlibc\fP, \fI\-lc\fP) .SH СИНТАКСИС .nf \fB#include \fP .PP \fBint rand(void);\fP \fBint rand_r(unsigned int *\fP\fIseedp\fP\fB);\fP \fBvoid srand(unsigned int \fP\fIseed\fP\fB);\fP .fi .PP .RS -4 Требования макроса тестирования свойств для glibc (см. \fBfeature_test_macros\fP(7)): .RE .PP \fBrand_r\fP(): .nf Since glibc 2.24: _POSIX_C_SOURCE >= 199506L Glibc 2.23 and earlier _POSIX_C_SOURCE .fi .SH ОПИСАНИЕ Функция \fBrand\fP() возвращает псевдослучайное целое число в диапазоне от нуля до \fBRAND_MAX\fP включительно (т. е., из математического диапазона [0,\ \fBRAND_MAX\fP]). .PP Функция \fBsrand\fP() устанавливает свой аргумент как основу (seed) для новой последовательности псевдослучайных целых чисел, возвращаемых функцией \fBrand\fP(). Эту последовательность можно воспроизвести. Для этого необходимо вызвать \fBsrand\fP() с той же величиной основы. .PP Если основа не задана, то функция \fBrand\fP() автоматически устанавливает её равной 1. .PP Функция \fBrand\fP() не реентерабельная, так как она использует скрытое состояние, которое изменяется с каждым вызовом. Это может быть как просто значение основы, так и что\-то более сложное. Чтобы получить воспроизводимое поведение в многонитевом приложении такое состояние нужно создать явным образом; это можно сделать с помощью реентерабельной функции \fBrand_r\fP(). .PP Как и \fBrand\fP(), \fBrand_r\fP() возвращает псевдослучайное целое число из диапазона [0,\ \fBRAND_MAX\fP]. Аргумент \fIseedp\fP является указателем на число \fIunsigned int\fP, которое используется для хранения состояния между вызовами. Если \fBrand_r\fP() вызывается с одинаковым начальным значением целого, на которое указывает \fIseedp\fP, и это значение не изменяется между вызовами, то результатом будет одинаковая псевдослучайная последовательность. .PP Значение, на которое указывает аргумент \fIseedp\fP для \fBrand_r\fP(), предоставляет только очень малую часть состояния, поэтому данная функция будет очень не случайным псевдослучайным генератором. Используйте вместо неё \fBdrand48_r\fP(3). .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" Функции \fBrand\fP() и \fBrand_r\fP() возвращают значение в промежутке от 0 до \fBRAND_MAX\fP (включительно). Функция \fBsrand\fP() не возвращает результат. .SH АТРИБУТЫ Описание терминов данного раздела смотрите в \fBattributes\fP(7). .ad l .nh .TS allbox; lbx lb lb l l l. Интерфейс Атрибут Значение T{ \fBrand\fP(), \fBrand_r\fP(), \fBsrand\fP() T} Безвредность в нитях MT\-Safe .TE .hy .ad .sp 1 .SH СТАНДАРТЫ Функции \fBrand\fP() и \fBsrand\fP() описаны в SVr4, 4.3BSD, C89, C99, POSIX.1\-2001. Функция \fBrand_r\fP() описана в POSIX.1\-2001. В POSIX.1\-2008 функция \fBrand_r\fP() помечена как устаревшая. .SH ЗАМЕЧАНИЯ Версия функций \fBrand\fP() и \fBsrand\fP() в библиотеке Си для Linux использует тот же генератор чисел, что и в функциях \fBrandom\fP(3) и \fBsrandom\fP(3), так что младшие биты в числе случайны настолько, насколько и старшие. В то же время, в старых реализациях \fBrand\fP() и в текущих реализациях на других системах младшие биты являются гораздо менее случайными, чем старшие. Не используйте эту функцию в переносимых приложениях, для которых требуется большая случайность (вместо неё используйте \fBrandom\fP(3)). .SH ПРИМЕРЫ В POSIX.1\-2001 приведён следующий пример реализации \fBrand\fP() и \fBsrand\fP(), возможно полезный, если требуется одинаковая последовательность на двух разных машинах. .PP .in +4n .EX static unsigned long next = 1; /* предполагается, что RAND_MAX равно 32767 */ int myrand(void) { next = next * 1103515245 + 12345; return((unsigned)(next/65536) % 32768); } void mysrand(unsigned int seed) { next = seed; } .EE .in .PP Следующая программа может использоваться для отображения псевдослучайной последовательности, созданной \fBrand\fP() при указании определённой основы. .PP .in +4n .\" SRC BEGIN (rand.c) .EX #include #include int main(int argc, char *argv[]) { int r; unsigned int seed, nloops; if (argc != 3) { fprintf(stderr, "Использование: %s \en", argv[0]); exit(EXIT_FAILURE); } seed = atoi(argv[1]); nloops = atoi(argv[2]); srand(seed); for (unsigned int j = 0; j < nloops; j++) { r = rand(); printf("%d\en", r); } exit(EXIT_SUCCESS); } .EE .\" SRC END .in .SH "СМ. ТАКЖЕ" \fBdrand48\fP(3), \fBrandom\fP(3) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан aereiae , Azamat Hackimov , Dmitriy S. Seregin , Katrin Kutepova , Lockal , Yuri Kozlov , Баринов Владимир и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .