random(3) - wariua/manpages-ko GitHub Wiki

NAME

random, srandom, initstate, setstate - λ‚œμˆ˜ 생성기

SYNOPSIS

#include <stdlib.h>

long int random(void);

void srandom(unsigned int seed);

char *initstate(unsigned int seed, char *state, size_t n);

char *setstate(char *state);

glibc κΈ°λŠ₯ 확인 맀크둜 μš”κ±΄ (feature_test_macros(7) μ°Έκ³ ):

random(), srandom(), initstate(), setstate():
_XOPEN_SOURCE >= 500
|| /* glibc 2.19λΆ€ν„°: */ _DEFAULT_SOURCE
|| /* glibc 버전 <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE

DESCRIPTION

random() ν•¨μˆ˜λŠ” λΉ„μ„ ν˜• κ°€μ‚° ν”Όλ“œλ°± λ‚œμˆ˜ 생성기λ₯Ό μ‚¬μš©ν•˜μ—¬ 0μ—μ„œ RAND_MAXκΉŒμ§€ λ²”μœ„μ—μ„œ μ—°μ†μœΌλ‘œ μœ μ‚¬ λ‚œμˆ˜λ₯Ό λ°˜ν™˜ν•œλ‹€. μƒμ„±κΈ°μ—μ„œλŠ” 기본적으둜 31개 μ •μˆ˜ 크기의 ν…Œμ΄λΈ”μ„ μ‚¬μš©ν•œλ‹€. 이 λ‚œμˆ˜ μƒμ„±κΈ°μ˜ μ£ΌκΈ°λŠ” μ•„μ£Ό κΈΈλ‹€. λŒ€λž΅ 16 * ((2^31) - 1)이닀.

srandom() ν•¨μˆ˜λŠ” κ·Έ 인자λ₯Ό random()이 μƒˆλ‘œ λ°˜ν™˜ν•  μœ μ‚¬ λ‚œμˆ˜ μ •μˆ˜ μ—΄μ˜ μ‹œλ“œλ‘œ μ„€μ •ν•œλ‹€. 같은 μ‹œλ“œ κ°’μœΌλ‘œ srandom()을 ν˜ΈμΆœν•˜μ—¬ κ·Έ μ •μˆ˜ 열을 λ°˜λ³΅ν•  수 μžˆλ‹€. μ‹œλ“œ 값을 μ œκ³΅ν•˜μ§€ μ•ŠμœΌλ©΄ random() ν•¨μˆ˜μ—μ„œ μžλ™μœΌλ‘œ 1 값을 μ‹œλ“œλ‘œ μ‚ΌλŠ”λ‹€.

initstate() ν•¨μˆ˜λ₯Ό μ΄μš©ν•˜λ©΄ random()μ—μ„œ μ‚¬μš©ν•˜λ„λ‘ μƒνƒœ λ°°μ—΄ stateλ₯Ό μ΄ˆκΈ°ν™” ν•  수 μžˆλ‹€. initstate()μ—μ„œλŠ” μƒνƒœ λ°°μ—΄μ˜ 크기 n을 μ‚¬μš©ν•΄ μ–Όλ§ˆλ‚˜ λ³΅μž‘ν•œ λ‚œμˆ˜ 생성기λ₯Ό μ‚¬μš©ν•΄μ•Ό ν• μ§€ κ²°μ •ν•œλ‹€. μƒνƒœ 배열이 클수둝 λ‚œμˆ˜κ°€ 더 μ’‹μ•„μ§€κ²Œ λœλ‹€. μƒνƒœ λ°°μ—΄ 크기 n에 λŒ€ν•œ ν˜„μž¬μ˜ "졜적" 값은 8, 32, 64, 128, 256λ°”μ΄νŠΈμ΄λ‹€. λ‹€λ₯Έ 양은 κ°€μž₯ κ°€κΉŒμš΄ μ •ν•΄μ§„ μ–‘μœΌλ‘œ λ‚΄λ¦Ό ν•˜κ²Œ λœλ‹€. 8λ°”μ΄νŠΈλ³΄λ‹€ μž‘κ²Œ μ‚¬μš©ν•˜λ € ν•˜λ©΄ 였λ₯˜κ°€ λ°œμƒν•œλ‹€. seedλŠ” μ΄ˆκΈ°ν™”λ₯Ό μœ„ν•œ μ‹œλ“œμ΄λ‹€. λ‚œμˆ˜ μ—΄μ˜ μ‹œμž‘μ μ„ λ‚˜νƒ€λ‚΄λ©° 동일 μ§€μ μ—μ„œ λ‹€μ‹œ μ‹œμž‘ν•  수 있게 ν•΄ μ€€λ‹€.

setstate() ν•¨μˆ˜λŠ” random() ν•¨μˆ˜κ°€ μ“°λŠ” μƒνƒœ 배열을 λ°”κΎΌλ‹€. λ‹€μŒ 번 initstate() λ‚΄μ§€ setstate() 호좜 λ•ŒκΉŒμ§€ λ‚œμˆ˜ 생성에 μƒνƒœ λ°°μ—΄ stateλ₯Ό μ‚¬μš©ν•œλ‹€. stateλŠ” initstate()λ₯Ό μ΄μš©ν•΄ λ¨Όμ € μ΄ˆκΈ°ν™” ν•œ κ²ƒμ΄κ±°λ‚˜ 이전 setstate() 호좜의 κ²°κ³Όμ—¬μ•Ό ν•œλ‹€.

RETURN VALUE

random() ν•¨μˆ˜λŠ” 0μ—μ„œ RAND_MAX μ‚¬μ΄μ˜ 값을 λ°˜ν™˜ν•œλ‹€. srandom() ν•¨μˆ˜λŠ” 아무 값도 λ°˜ν™˜ν•˜μ§€ μ•ŠλŠ”λ‹€.

initstate() ν•¨μˆ˜λŠ” 이전 μƒνƒœ 배열에 λŒ€ν•œ 포인터λ₯Ό λ°˜ν™˜ν•œλ‹€. 였λ₯˜ μ‹œ 원인을 λ‚˜νƒ€λ‚΄λ„λ‘ errnoλ₯Ό μ„€μ •ν•œλ‹€.

성곡 μ‹œ setstate()λŠ” 이전 μƒνƒœ 배열에 λŒ€ν•œ 포인터λ₯Ό λ°˜ν™˜ν•œλ‹€. 였λ₯˜ μ‹œ NULL을 λ°˜ν™˜ν•˜λ©° 였λ₯˜ 원인을 λ‚˜νƒ€λ‚΄λ„λ‘ errnoλ₯Ό μ„€μ •ν•œλ‹€.

ERRORS

EINVAL
setstate()에 μ€€ state μΈμžκ°€ NULLμ΄μ—ˆλ‹€.
EINVAL
initstate()에 8λ°”μ΄νŠΈλ³΄λ‹€ μž‘μ€ μƒνƒœ 배열을 μ§€μ •ν•˜μ˜€λ‹€.

ATTRIBUTES

이 μ ˆμ—μ„œ μ‚¬μš©ν•˜λŠ” μš©μ–΄λ“€μ— λŒ€ν•œ μ„€λͺ…은 attributes(7)λ₯Ό 보라.

μΈν„°νŽ˜μ΄μŠ€ 속성 κ°’
random(), srandom(),
initstate(), setstate()
μŠ€λ ˆλ“œ μ•ˆμ „μ„± MT-Safe

CONFORMING TO

POSIX.1-2001, POSIX.1-2008, 4.3BSD.

NOTES

λ™μž‘μ΄ μž¬μ—° κ°€λŠ₯ν•΄μ•Ό ν•˜λŠ” 닀쀑 μŠ€λ ˆλ“œ ν”„λ‘œκ·Έλž¨μ—μ„œλŠ” random() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€ 말아야 ν•œλ‹€. 그런 μš©λ„μ—λŠ” random_r(3)을 μ‚¬μš©ν•˜λΌ.

λ‚œμˆ˜ 생성은 λ³΅μž‘ν•œ μ£Όμ œμ΄λ‹€. Numerical Recipes in C: The Art of Scientific Computing (William H. Press, Brian P. Flannery, Saul A. Teukolsky, William T. Vetterling; New York: Cambridge University Press, 2007, 3rd ed.) 7μž₯ "Random Numbers"μ—μ„œ λ‚œμˆ˜ μƒμ„±μ˜ ν˜„μ‹€μ  λ¬Έμ œλ“€μ„ νƒμ›”ν•˜κ²Œ λ…Όν•œλ‹€.

더 이둠적인 λ…Όμ˜μ™€ ν•¨κ»˜ μ—¬λŸ¬ ν˜„μ‹€μ  μ‚¬μ•ˆλ“€λ„ 깊이 닀루고 μžˆλŠ” 곳이 Donald E. Knuth의 The Art of Computer Programming 2ꢌ(Seminumerical Algorithms) 2판(Reading, Massachusetts: Addison-Wesley Publishing Company, 1981)의 3μž₯ "Random Numbers"이닀.

BUGS

POSIX에 λ”°λ₯΄λ©΄ initstate()κ°€ 였λ₯˜ μ‹œ NULL을 λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€. glibc κ΅¬ν˜„μ—μ„œλŠ” (λͺ…μ„Έλœ λŒ€λ‘œ) 였λ₯˜ μ‹œ errnoλ₯Ό μ„€μ •ν•˜κΈ°λŠ” ν•˜μ§€λ§Œ ν•¨μˆ˜κ°€ NULL을 λ°˜ν™˜ν•˜μ§€λŠ” μ•ŠλŠ”λ‹€.

SEE ALSO

getrandom(2), drand48(3), rand(3), random_r(3), srand(3)


2019-03-06

⚠️ **GitHub.com Fallback** ⚠️