2012-03-23 2 views
-1

Mac OS X 10.7.3에서 GCC 4.2를 사용하고 있습니다. 내가 그것을 업데이트 할 때까지 모두 잘 작동했다. 왜 더 이상 효과가 없는지 나는 전혀 모른다.rand()는 서로 매우 가까운 값을 제공합니다.

rand()이 매우 서로에 가까운,하지만 동일하지 값을 나에게 다시 제공 : 다음과 같이

문제입니다. 그래서 프로그램을 여러 번 실행하면 대답이 좋아집니다.

의 출력 :

(double)rand()/(double)RAND_MAX. 

0.945264, 
0.945295, 
0.945335 

내가 srand(time(NULL));를 사용하여 종자 (차이는 더 많은 시간이 경과 할 때 커진다.), 그리고 그것은 단지 시간까지 잘 작동했다 전에 내가 그것을 업데이트했을 때. 나는 이제 그것을 20 번 테스트했으며, 모든 출력은 대략적이다. 같은, 이것은 확실히 무작위가 아닙니다. 아이디어가 있으십니까? 편집

#include <stdlib.h> 
main() 
{ 
srand(time(NULL)); 
printf("%f",(double)rand()/(double)RAND_MAX); 
} 

(이, 미안 내가 서식 내 모든 코드를 빨아됩니다.) 당신이 time(NULL)로 볼 경우 내가 시간이 천천히 증가하기 때문에 항상 서로 가까이 될 것으로 예상

+2

게시하시기 바랍니다 얻을 [** 최소 ** 테스트 케이스 (HTTP ://sscce.org). –

+0

* what *을 업데이트 할 때까지? –

+0

컴파일러를 업데이트하기 전까지는 gcc. – ClausW

답변

-3

. 시간이 지남에 따라 난수가 약간 변하는 것을 볼 수 있습니다.

이 시도 :

(double)srand(time(NULL))/(double)RAND_MAX. 

-------- 내 원래의 가정이 잘못된 것처럼 편집 --------

이 보이는 . 나는 이것을 재 시동하지 않고 매우 다른 난수를 얻는다.

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

int main(void) 
{ 
    int i, p; 

    srand(time(NULL)); 

    for(p=0;p<10;p++){ 
    i = rand(); 

    printf ("Your random number is %d\n", i); 

    } 
    return(0); 
} 
+1

반드시 따라야하는 것은 아닙니다. 근처의 시드가 인접한 임의의 숫자로 반드시 변환되는 것은 아닙니다. –

+0

@OliCharlesworth - 맞습니다.하지만 그는 한 번만 시드하고 있다고 생각합니다. 각 난수 가져 오기 시드 대신. 이것은 단지 가정이지만, 그는 충분한 코드를 게시하지 않았습니다. – ProfessionalAmateur

+0

글쎄, ** ** 제대로 작동하고 있으며, 일반적으로'srand (time (NULL))'은 난수를 만드는 올바른 방법입니다. – ClausW

0

이것은 또 다른 possbility 수 있습니다 :

내가이

#include <stdlib.h> 
#include <time.h> 
#include <stdio.h> 
main() 
{ 
    int i; 
    for(i=0;i<4;i++){ 
     srand(time(NULL)); 
     printf("%f\n",(double)rand()/(double)RAND_MAX); 
    } 
    return(0); 
} 

나는이 결과를 얻을 게시 할 때 그것은 당신의 srand

의 게재 위치를 생각

0.314774 
0.314774 
0.314774 
0.314774 

하지만 루프의 srand 외부를 이동할 때 내가 할 다른 무작위 numers

#include <stdlib.h> 
#include <time.h> 
#include <stdio.h> 
main() 
{ 
    int i; 
    srand(time(NULL)); 
    for(i=0;i<4;i++){ 
     printf("%f\n",(double)rand()/(double)RAND_MAX); 
    } 
    return(0); 
} 

나는 이러한 결과는

0.154158 
0.832643 
0.529257 
0.529633 
관련 문제