rand(3) - wariua/manpages-ko GitHub Wiki
rand, rand_r, srand - μ μ¬ λμ μμ±κΈ°
#include <stdlib.h>
int rand(void);
int rand_r(unsigned int *seedp);
void srand(unsigned int seed);
glibc κΈ°λ₯ νμΈ λ§€ν¬λ‘ μ건 (feature_test_macros(7) μ°Έκ³ ):
-
rand_r()
: -
- glibc 2.24λΆν°:
_POSIX_C_SOURCE >= 199506L
- glibc 2.23 λ° μ΄μ :
_POSIX_C_SOURCE
rand()
ν¨μλ 0μμ RAND_MAX
κΉμ§ λ²μμ (κ²½κ³ ν¬ν¨) μ μ¬ λμ μ μλ₯Ό λ°ννλ€. (μ¦, μνμ λ²μκ° [0, RAND_MAX
]μ΄λ€.)
srand()
ν¨μλ κ·Έ μΈμλ₯Ό rand()
κ° μλ‘ λ°νν μ μ¬ λμ μ μ μ΄μ μλλ‘ μ€μ νλ€. κ°μ μλ κ°μΌλ‘ srand()
λ₯Ό νΈμΆνμ¬ κ·Έ μ μ μ΄μ λ°λ³΅ν μ μλ€.
μλ κ°μ μ 곡νμ§ μμΌλ©΄ rand()
ν¨μμμ μλμΌλ‘ 1 κ°μ μλλ‘ μΌλλ€.
rand()
ν¨μλ μ¬μ§μ
κ°λ₯νμ§ μλ€. κ° νΈμΆλ§λ€ λ°λλ μ¨κ²¨μ§ μνλ₯Ό μ¬μ©νκΈ° λλ¬Έμ΄λ€. κ·Έ μνλΌλ κ²μ κ·Έμ λ€μ νΈμΆμμ μ¬μ©ν μλ κ°μΌ μλ μκ³ λ μ κ΅ν 무μΈκ°μΌ μλ μμ κ²μ΄λ€. μ€λ λ μ¬μ© μμ©μμ μ¬μ° κ°λ₯ν λμ λ°©μμ μ»κΈ° μν΄μ μ΄ μνλ₯Ό λͺ
μμ μΌλ‘ λ§λ€μ΄μΌ νλλ°, μ¬μ§μ
κ°λ₯ ν¨μμΈ rand_r()
μ μ¬μ©νλ©΄ λλ€.
rand()
μ λ§μ°¬κ°μ§λ‘ rand_r()
μ [0, RAND_MAX
] λ²μ λ΄μ μ μ¬ λμ μ μλ₯Ό λ°ννλ€. seedp
μΈμλ νΈμΆλ€ κ°μ μν μ μ₯μ μ°μ΄λ unsigned int
μ λν ν¬μΈν°μ΄λ€. seedp
κ° κ°λ¦¬ν€λ μ μμ μ΅μ΄ κ°μ κ°κ² ν΄μ rand_r()
μ νΈμΆνκ³ νΈμΆλ€ μ¬μ΄μμ κ·Έ κ°μ λ³κ²½νμ§ μμΌλ©΄ λμΌν μ μ¬ λμ μ΄μ΄ λμ€κ² λλ€.
rand_r()
μ seedp
μΈμκ° κ°λ¦¬ν€λ κ°μ μμ£Ό μμ μμ μνλ§ μ 곡νλ―λ‘ μ΄ ν¨μλ μ½ν μ μ¬ λμ μμ±κΈ°μΌ κ²μ΄λ€. λμ drand48_r(3)μ μλν΄ λ³΄λΌ.
rand()
λ° rand_r()
ν¨μλ 0μμ RAND_MAX
μ¬μ΄μ (κ²½κ³ ν¬ν¨) κ°μ λ°ννλ€. srand()
ν¨μλ μ무 κ°λ λ°ννμ§ μλλ€.
μ΄ μ μμ μ¬μ©νλ μ©μ΄λ€μ λν μ€λͺ μ attributes(7)λ₯Ό 보λΌ.
μΈν°νμ΄μ€ | μμ± | κ° |
---|---|---|
rand() , rand_r() , srand()
|
μ€λ λ μμ μ± | MT-Safe |
rand()
λ° srand()
ν¨μλ SVr4, 4.3BSD, C89, C99, POSIX.1-2001μ μ€μνλ€. rand_r()
ν¨μλ POSIX.1-2001μμ μ¨ κ²μ΄λ€. POSIX.1-2008μμ rand_r()
μ ꡬμμΌλ‘ νμνκ³ μλ€.
리λ
μ€ C λΌμ΄λΈλ¬λ¦¬μ μλ rand()
λ° srand()
λ²μ μ random(3) λ° srandom(3)κ³Ό κ°μ λμ μμ±κΈ°λ₯Ό μ¬μ©νλ―λ‘ νμ λΉνΈλ€μ΄ μμ λΉνΈλ€λ§νΌ μμμ μΌ κ²μ΄λ€. νμ§λ§ μ€λλ rand()
ꡬνλ€μμλ, κ·Έλ¦¬κ³ λ€λ₯Έ μμ€ν
λ€μ νν ꡬνμμλ νμ λΉνΈλ€μ΄ μμ λΉνΈλ€λ³΄λ€ ν¨μ¬ λ μμμ μ΄λ€. μ΄μμ±μ μλν μμ©μμ μ’μ λμμ±μ΄ νμν λλ μ΄ ν¨μλ₯Ό μ¬μ©νμ§ λ§μμΌ νλ€. (λμ random(3)μ μ¬μ©νλΌ.)
POSIX.1-2001μμ rand()
λ° srand()
μ ꡬν μμλ‘ λ€μμ μ μνκ³ μλ€. μλ‘ λ€λ₯Έ λ¨Έμ μμ λμΌν μμ΄μ΄ νμν λ μ μ©ν μλ μμ κ²μ΄λ€.
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;
}
λ€μ νλ‘κ·Έλ¨μ μ΄μ©ν΄ νΉμ μλκ° μ£Όμ΄μ‘μ λ rand()
κ° λ§λ€μ΄ λ΄λ μ μ¬ λμ μ΄μ νμν μ μλ€.
#include <stdlib.h>
#include <stdio.h>
int
main(int argc, char *argv[])
{
int j, r, nloops;
unsigned int seed;
if (argc != 3) {
fprintf(stderr, "Usage: %s <seed> <nloops>\n", argv[0]);
exit(EXIT_FAILURE);
}
seed = atoi(argv[1]);
nloops = atoi(argv[2]);
srand(seed);
for (j = 0; j < nloops; j++) {
r = rand();
printf("%d\n", r);
}
exit(EXIT_SUCCESS);
}
2019-03-06