NAME

drand48, erand48, lrand48, nrand48, mrand48, jrand48, srand48, seed48, lcong48 - 균일하게 분포하는 유사 난수 생성하기

SYNOPSIS

#include <stdlib.h>

double drand48(void);
double erand48(unsigned short xsubi[3]);

long lrand48(void);
long nrand48(unsigned short xsubi[3]);

long mrand48(void);
long jrand48(unsigned short xsubi[3]);

void srand48(long seedval);
unsigned short *seed48(unsigned short seed16v[3]);
void lcong48(unsigned short param[7]);

glibc 기능 확인 매크로 요건 (feature_test_macros(7) 참고):

위 함수들 모두:
_XOPEN_SOURCE
|| /* glibc 2.19부터: */ _DEFAULT_SOURCE
|| /* glibc <= 2.19: */ _SVID_SOURCE

DESCRIPTION

이 함수들은 선형 합동 알고리즘과 48비트 정수 연산을 이용해 유사 난수를 생성한다.

drand48()erand48() 함수는 [0.0, 1.0) 구간에 균일하게 분포하는 음수 아닌 배정밀도 부동소수점 값을 반환한다.

lrand48()nrand48() 함수는 [0, 2^31) 구간에 균일하게 분포하는 음수 아닌 긴 정수를 반환한다.

mrand48()jrand48() 함수는 [-2^31, 2^31) 구간에 균일하게 분포하는 부호 있는 긴 정수를 반환한다.

srand48(), seed48(), lcong48() 함수는 초기화 함수이며 drand48(), lrand48(), mrand48() 사용 전에 호출해야 한다. erand48(), nrand48(), jrand48() 함수에는 초기화 함수를 먼저 호출할 필요가 없다.

모든 함수들은 다음 선형 합동 식에 따라 48비트 정수 Xi의 열을 생성하여 동작한다.

Xn+1 = (aXn + c) mod m, 여기서 n >= 0

매개변수 m = 2^48이며, 그래서 48비트 정수 연산을 수행한다. lcong48()을 호출한 경우가 아니면 ac에 다음 값을 준다.

a = 0x5DEECE66D
c = 0xB

함수 drand48(), erand48(), lrand48(), nrand48(), mrand48(), jrand48() 중 뭔가로 반환하는 값을 계산하기 위해 먼저 열의 다음 48비트 Xi를 생성한다. 그리고 반환할 데이터 항목의 타입에 따라 적절한 수의 비트를 Xi의 상위 비트들에서 복사해서 반환 값으로 변환한다.

drand48(), lrand48(), mrand48() 함수에서는 마지막으로 생성한 48비트 Xi를 내부 버퍼에 저장해 둔다. erand48(), nrand48(), jrand48() 함수에서는 연속한 Xi 값을 저장할 공간을 호출 프로그램이 xsubi 배열 인자로 제공해야 한다. 처음 함수를 호출하기 전에 그 배열에 Xi의 초기값을 넣어서 그 함수들을 초기화한다.

초기화 함수 srand48()Xi의 상위 32비트에 인자 seedval을 설정한다. 하위 16비트는 임의 값 0x330E로 설정한다.

초기화 함수 seed48()Xi의 값을 배열 인자 seed16v에 지정된 48비트 값으로 설정한다. Xi의 이전 값이 어떤 내부 버퍼로 복사되고 이 버퍼의 포인터를 seed48()이 반환한다.

초기화 함수 lcong48()은 사용자가 Xi, a, c의 초기값을 지정할 수 있게 해 준다. 배열 인자의 param[0-2] 항목들이 Xi를 지정하고, param[3-5]a를 지정하고, param[6]c를 지정한다. lcong48()을 호출한 다음에 srand48()이나 seed48()을 호출하면 ac의 표준 값이 다시 살아나게 된다.

ATTRIBUTES

이 절에서 사용하는 용어들에 대한 설명은 attributes(7)를 보라.

인터페이스 속성
drand48(), erand48(), lrand48(), nrand48(),
mrand48(), jrand48(), srand48(), seed48(),
lcong48()
스레드 안전성 MT-Unsafe race:drand48

위 함수들은 난수 생성기를 위한 전역 상태 정보를 기록하며, 따라서 스레드에 안전하지 않다.

CONFORMING TO

POSIX.1-2001, POSIX.1-2008, SVr4.

SEE ALSO

rand(3), random(3)


2021-03-22