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

NAME

rand, rand_r, srand - μœ μ‚¬ λ‚œμˆ˜ 생성기

SYNOPSIS

#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

DESCRIPTION

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)을 μ‹œλ„ν•΄ 보라.

RETURN VALUE

rand() 및 rand_r() ν•¨μˆ˜λŠ” 0μ—μ„œ RAND_MAX μ‚¬μ΄μ˜ (경계 포함) 값을 λ°˜ν™˜ν•œλ‹€. srand() ν•¨μˆ˜λŠ” 아무 값도 λ°˜ν™˜ν•˜μ§€ μ•ŠλŠ”λ‹€.

ATTRIBUTES

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

μΈν„°νŽ˜μ΄μŠ€ 속성 κ°’
rand(), rand_r(), srand() μŠ€λ ˆλ“œ μ•ˆμ „μ„± MT-Safe

CONFORMING TO

rand() 및 srand() ν•¨μˆ˜λŠ” SVr4, 4.3BSD, C89, C99, POSIX.1-2001을 μ€€μˆ˜ν•œλ‹€. rand_r() ν•¨μˆ˜λŠ” POSIX.1-2001μ—μ„œ 온 것이닀. POSIX.1-2008μ—μ„œ rand_r()을 κ΅¬μ‹μœΌλ‘œ ν‘œμ‹œν•˜κ³  μžˆλ‹€.

NOTES

λ¦¬λˆ…μŠ€ C λΌμ΄λΈŒλŸ¬λ¦¬μ— μžˆλŠ” rand() 및 srand() 버전은 random(3) 및 srandom(3)κ³Ό 같은 λ‚œμˆ˜ 생성기λ₯Ό μ‚¬μš©ν•˜λ―€λ‘œ ν•˜μœ„ λΉ„νŠΈλ“€μ΄ μƒμœ„ λΉ„νŠΈλ“€λ§ŒνΌ μž„μ˜μ μΌ 것이닀. ν•˜μ§€λ§Œ 였래된 rand() κ΅¬ν˜„λ“€μ—μ„œλŠ”, 그리고 λ‹€λ₯Έ μ‹œμŠ€ν…œλ“€μ˜ ν˜„ν–‰ κ΅¬ν˜„μ—μ„œλŠ” ν•˜μœ„ λΉ„νŠΈλ“€μ΄ μƒμœ„ λΉ„νŠΈλ“€λ³΄λ‹€ 훨씬 덜 μž„μ˜μ μ΄λ‹€. 이식성을 μ˜λ„ν•œ μ‘μš©μ—μ„œ 쒋은 λ‚œμˆ˜μ„±μ΄ ν•„μš”ν•  λ•ŒλŠ” 이 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€ 말아야 ν•œλ‹€. (λŒ€μ‹  random(3)을 μ‚¬μš©ν•˜λΌ.)

EXAMPLE

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);
}

SEE ALSO

drand48(3), random(3)


2019-03-06

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