2012-03-25 4 views
0

C에서 0과 1 사이의 무작위 이중 번호를 생성하고 싶습니다. 다음 코드 을 사용하여 생성했지만 여전히 0.0000으로 p 값을 얻고 있습니까? 아무도 나를 도울 수 있습니까?C 언어의 random.nextDouble 구현 방법

double p; 
int max; 
int min; 
max=1; 
min=0; 

p= (double)(rand() % (max - min + 1) + min); 
+2

모든 정수가 1의 배수이기 때문에 항상'rand() % 1'을 계산하기 때문에 이것은 작동하지 않습니다. –

답변

0

drand48을 사용할 수 있습니다. 최신 C++ 11 표준에는 강력한 표준 임의 라이브러리가 있습니다.

drand48을 사용하지 않으려면 다음과 같이 코드를 작성할 수 있습니다. ((double) (rand() % 10000000)) * 1.0e-6하지만 권장하지 않습니다.

1

가 Tausworthe 기반 PRNG 같은 다음

p = rand()/(double)RAND_MAX; 
+0

또는 원하는 경우'rand()/(RAND_MAX + 1.0)' 1 자체를 제외합니다. – pmg

+0

@chris : 이것조차도 작동하지 않습니다 !!! – tina

+0

@tina, 당신이 얻고있는 결과는 무엇입니까? 나는 여기에 빠른 테스트를했고 그것은 확실히 나를 위해 작동합니다. '두 배로'던지기가 중요하다는 것을 명심하십시오. –

0

뭔가 잘 작동 시도 LuaJIT2 (베타)가 제대로 [0..1 [n..m] 사이에 확장 아주 좋은 변종이있다 ]를 사용하면 LuaJIT의 소스에있는 lib_math.c 파일에서 찾을 수 있습니다.

또한 R here에 의해 RNG를 사용하는 모습을 볼 수도 있습니다.