tail head cat sleep
QR code linking to this page

Man page  — RANDOM

명칭

random, srandom, srandomdev, initstate, setstate – 뛰어난 난수 제네레이터, 및 제네레이터를 변경하는 routine

내용

프로그램 라이브러리

Standard C Library (libc, -lc)

서식

#include <stdlib.h>

long
random(void);

void
srandom(unsigned long seed);

void
srandomdev(void);

char *
initstate(unsigned long seed, char *state, long n);

char *
setstate(char *state);

해설

random() 함수는, 비선형 가법 피드백 난수 제네레이터를 사용해, 디폴트로 사이즈가 31 의, 롱 정수의 테이블을 채용해, 0 으로부터 231-1 까지의 범위에서 연속한 유사 난수를 되돌립니다. 이 난수 제네레이터의 주기는 매우 크고, 약 16µ(231-1) 입니다.

random() 함수와 srandom() 함수의 호출 순서와 초기화 프로퍼티는, rand(3) 함수와 srand(3) 함수의 것과 (대체로) 같습니다. 차이는, rand(3) 하지만 작성하는 랜덤시퀀스가 꽤 뒤떨어진 것인 것입니다. 실제, rand 가 작성하는 하위가 많은 비트는, 순환 패턴이 됩니다. random() 하지만 작성하는 비트는 모두 사용할 수 있습니다. 예를 들어 'random()&01' 그럼, 랜덤인 바이너리치가 작성됩니다.

rand(3) (와)과 같이, random() (은)는 수치의 순차 순서를 디폴트로 작성합니다. 이 순차 순서는, 종을 ‘1’ (으)로 해 srandom() (을)를 호출하면(자) 재작성할 수 있습니다.

srandomdev() routine는, 암호화에서의 사용에 적절한 난수를 되돌린다 urandom(4) 난수 디바이스를 사용해, 상태 배열을 초기화합니다. 이 초기화 프로시저는, 어떠한 값으로 srandom() (을)를 호출해도 재작성할 수 없는 상태를 작성하는 것에 주의해 주세요. 상태 버퍼내가 연속하는 항은, 고정의 종의 경우에 적용된다 LC 알고리즘에서는 도출할 수 없기 때문입니다.

initstate() routine는, 인수로서 건네받은 상태 배열을, 후의 사용을 위해서(때문에) 초기화합니다. initstate() (은)는, 상태 배열의 사이즈 (바이트 단위)를 사용해, 난수 제네레이터의 복잡함을 결정합니다. 상태를 크게 하면(자), 난수의 질은 오릅니다. (현재로서는, 상태 정보의 양에 「최적」인 값은, 8 바이트, 32 바이트, 64 바이트, 128 바이트, 256 바이트입니다. 그 외의 값은, 가장 가까운 값에 인하할 수 있습니다. 8 바이트보다 작은 값을 사용하면(자) 에러가 됩니다. ) 초기화의 종 (난수 순차 순서의 개시점을 지정해, 같은 점으로부터 재개할 수 있다)도 인수입니다. initstate() 함수는, 이전 상태 정보 배열에의 포인터를 되돌립니다.

상태를 초기화하면(자), setstate() routine로 상태를 재빠르게 교체됩니다. setstate() 함수는, 이전 상태 배열에의 포인터를 되돌립니다. 인수인 상태 배열은, 다음에 initstate() 인가 setstate() (을)를 호출할 때까지, 한층 더 난수를 작성하는데 사용됩니다.

상태 배열을 초기화하면(자), initstate() (을)를 (목적의 종, 상태 배열, 사이즈로) 호출하는지, 혹은 (상태 배열을 지정했다) setstate() (와)과 (목적의 종을 지정했다) srandom() 의 양쪽 모두를 호출하는 것으로, 다른 점으로부터 재개할 수 있습니다. setstate() (와)과 srandom() 의 양쪽 모두를 호출하면(자), 상태 배열의 사이즈를 초기화한 다음에 기억할 필요가 없다 그렇다고 하는 장점을 얻을 수 있습니다.

상태 정보를 256 바이트로 하면(자), 난수 제네레이터의 주기는 269 보다 커집니다. 이 주기로는, 대부분의 목적으로 충분히 대응할 수 있습니다.

저자

Earl T. Cohen

진단

상태 정보를 8 바이트보다 작게 해 initstate() (을)를 호출하거나 상태 정보가 삐뚤어진 것을 setstate() 하지만 검출하거나 하면(자), 에러 메세지가 표준 에러 출력에 출력됩니다.

관련 항목

rand(3), srand(3), urandom(4)

역사

이 함수는, BSD 4.2 그리고 등장했습니다.

버그

처리 속도는, rand(3) 의 약 2/3 입니다.

낡은 실장에서는 초기화의 프로세스가 매우 약하고, 종을 이용해도 랜덤시퀀스는 그다지 바뀌지 않았습니다. 현재의 시스템은, 보다 좋은 유사 난수 제네레이터를 초기 상태의 산출에 채용하고 있습니다.


RANDOM (3) June 4, 1993

tail head cat sleep
QR code linking to this page


Ben Bullock이 유닉스 매뉴얼 페이지에서 서비스에 대한 의견을 주시기 바랍니다. Privacy policy.

There are two major products of Berkeley, CA -- LSD and UNIX. We don't believe this to be strictly by coincidence.
Jeremy S. Anderson