random(3) - wariua/manpages-ko GitHub Wiki
random, srandom, initstate, setstate - λμ μμ±κΈ°
#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
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()
νΈμΆμ κ²°κ³Όμ¬μΌ νλ€.
random()
ν¨μλ 0μμ RAND_MAX
μ¬μ΄μ κ°μ λ°ννλ€. srandom()
ν¨μλ μ무 κ°λ λ°ννμ§ μλλ€.
initstate()
ν¨μλ μ΄μ μν λ°°μ΄μ λν ν¬μΈν°λ₯Ό λ°ννλ€. μ€λ₯ μ μμΈμ λνλ΄λλ‘ errno
λ₯Ό μ€μ νλ€.
μ±κ³΅ μ setstate()
λ μ΄μ μν λ°°μ΄μ λν ν¬μΈν°λ₯Ό λ°ννλ€. μ€λ₯ μ NULLμ λ°ννλ©° μ€λ₯ μμΈμ λνλ΄λλ‘ errno
λ₯Ό μ€μ νλ€.
EINVAL
-
setstate()
μ μ€state
μΈμκ° NULLμ΄μλ€. EINVAL
-
initstate()
μ 8λ°μ΄νΈλ³΄λ€ μμ μν λ°°μ΄μ μ§μ νμλ€.
μ΄ μ μμ μ¬μ©νλ μ©μ΄λ€μ λν μ€λͺ μ attributes(7)λ₯Ό 보λΌ.
μΈν°νμ΄μ€ | μμ± | κ° |
---|---|---|
random() , srandom() ,initstate() , setstate()
|
μ€λ λ μμ μ± | MT-Safe |
POSIX.1-2001, POSIX.1-2008, 4.3BSD.
λμμ΄ μ¬μ° κ°λ₯ν΄μΌ νλ λ€μ€ μ€λ λ νλ‘κ·Έλ¨μμλ 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"μ΄λ€.
POSIXμ λ°λ₯΄λ©΄ initstate()
κ° μ€λ₯ μ NULLμ λ°νν΄μΌ νλ€. glibc ꡬνμμλ (λͺ
μΈλ λλ‘) μ€λ₯ μ errno
λ₯Ό μ€μ νκΈ°λ νμ§λ§ ν¨μκ° NULLμ λ°ννμ§λ μλλ€.
getrandom(2), drand48(3), rand(3), random_r(3), srand(3)
2019-03-06