source

0과 1 사이의 난수를 생성하는 방법은?

manysource 2023. 10. 12. 23:22

0과 1 사이의 난수를 생성하는 방법은?

(0,1) 사이의 난수를 생성하고자 합니다.저는 다음을 시도하고 있습니다.

double r2()
{
    return((rand() % 10000) / 10000.0);
}

int SA()
{
    double u;
    u = r2();
}

하지만 기대했던 결과를 만들어내지는 못합니다.어떻게 고치죠?

버전에서rand() % 10000사이의 정수를 산출할 것입니다.0그리고.9999. RAND_MAX는 32767 정도로 작을 수 있고, 이것이 10000으로 정확히 구분되지 않고 10000에 비해 크지 않기 때문에 결과의 '무작위'에 상당한 편의가 있을 것이며, 또한 최대값은 1.0이 아닌 0.9999가 될 것이며, 불필요하게 값을 소수점 네 자리로 제한했습니다.

이것은 단순한 산술이며, 난수를 가능한 최대 난수로 나눈 값은 0에서 1까지의 숫자를 포함하며, RNG의 전체 해상도와 분포를 이용합니다.

double r2()
{
    return (double)rand() / (double)RAND_MAX ;
}

사용하다(double)rand() / (double)((unsigned)RAND_MAX + 1)의도적으로 1.0을 제외한 경우.

다음은 특정 범위의 난수를 생성하는 일반적인 절차입니다.

int randInRange(int min, int max)
{
  return min + (int) (rand() / (double) (RAND_MAX + 1) * (max - min + 1));
}

사용되는 PRNG 알고리즘에 따라%연산자를 사용하면 매우 random이지 않은 숫자 시퀀스가 발생할 수 있습니다.

당신이 먼저 srand에 전화를 하지 않은 것 같습니다.여기 사용 예시.

double r2()
{
   return (rand() % 10001) / 10000.0;
}

다음을 사용하여 시드를 설정합니다.srand(). 또한 최대 값을 지정하지 않았습니다.rand(), 사용하고 있습니다.RAND_MAX. 10,000개인지는 모르겠지만...왜 그냥 명시하지 않습니까?하지만 우리는 당신의 "기대한 결과"가 무엇인지 모릅니다.난수 발생기입니다.무엇을 기대하고 있으며, 무엇을 보고 있습니까?

또 다른 댓글에 언급된 것처럼.SA()아무것도 명백하게 돌려주지 않는 겁니다

http://pubs.opengroup.org/onlinepubs/009695399/functions/rand.html http://www.thinkage.ca/english/gcos/expl/c/lib/rand.html

C에서 [-1, 1] 사이의 난수 생성? ((float)rand())/RAND_MAX[0,1]의 부동 소수점 번호를 반환합니다.

(rand() % 10000) / 10000.0), (rand() % 2)로 교체해 보았습니까?이거 나한테 통했어요!

그래서 당신은 다음과 같은 일을 할 수 있습니다.

double r2()
{
     srand(time(NULL));
     return(rand() % 2);
}

언급URL : https://stackoverflow.com/questions/6218399/how-to-generate-a-random-number-between-0-and-1