2012-07-08 5 views
1

가능한 중복이 서로 다른 난수를 취 내 작업장에서
calling rand() returning non-random results는 C 언어로

나는 2 개 개의 다른 난수를 취 필요하지만이 같은 난수를 얻을.

#include<stdio.h> 
#include<stdlib.h> 
#include<time.h> 
int random1_6(){ 
int k; 
srand(time(0)); 
k=((rand()%6)+1); 
return k; 
} 
int main(void){ 
int a,b; 
    a=random1_6(); 
    printf("%d.\n",a); 
    b=random1_6(); 
    printf("%d.\n",b); 
return 0; 
} 

두 개의 다른 난수를 얻는 방법?

답변

5

RNG (Non-Cryptographic Random Number Generator)는 진정한 랜덤은 아니지만 시드 (seed)를 기반으로 임의의 숫자를 생성합니다.

동일한 씨드로 RNG를 두 번 초기화하면 동일한 결과를 얻을 수 있습니다. RNG를 한 번 시드하십시오 (예 : 프로그램을 시작할 때마다 다른 결과가 나올 것입니다.

편집 : 작동해야 다음과 같은 코드 :

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int random1_6(){ 
    return ((rand() % 6) + 1); 
} 

int main(void){ 
    int a,b; 
    srand(time(NULL)); 

    a = random1_6(); 
    printf("%d.\n",a); 

    b=random1_6(); 
    printf("%d.\n",b); 

    return 0; 
} 
+0

+1 무슨 일이 일어나고 있는지 설명합니다. – ArjunShankar

+0

다른 코드를 편집하여 다른 결과를 얻을 수 있습니까? – Conan9x1111

+0

@ Conan9x1111 수정 된 답변 및 예제 추가 – ckruse

3

모든 호출시에 srand(time(0));을 사용하지 마십시오. 한 번만 호출하십시오.

1

당신은 srand() 한 번에 난수 생성기의 씨앗을 초기화해야합니다 : 각각 같은 씨앗과 RNG를 다시 초기화하는 전화에 그 time(0)에 두 후속 호출이 동일한을 돌려 보낼 가능성이 높습니다 이후 타임 스탬프 (초 수준 정밀도)이므로 rand()는 동일한 수를 두 번 반환합니다.

srand()을 프로그램 시작 부분 (main() 진입 점)에 한 번만 호출하면 rand()를 호출 할 때마다 다른 번호가 반환됩니다.

+0

이와 비슷한가요? – Conan9x1111

0

당신은 항상 같은 씨앗과 난수 생성기를 초기화 같은 임의의 순서를 얻을 수 있습니다, 그래서 어쨌든 의사 랜덤입니다. 일반적으로 처음에는 srand를 호출하여 생성기를 초기화해야합니다.

또한 6 가지 가능한 결과 만 있으므로 동일한 번호를 두 번 얻는 것이 가장 합당하며 1/6 기회가 있습니다.