random

C++에서 랜덤값을 얻어 올려면 보통은 다음처럼 사용한다.

num = lowst + rand() % range

% 연산자를 사용하면 정규화가 만족스럽지 않다고 하더라~~~ (증명할 수 없으니)
그래서 다음과 같이 한면 된다고 하더라....

num =  lowest+int( range*rand()/(RAND_MAX + 1.0) )

위의 공식에서 (RAND + 1.0) 왜, 1은 더 해주는 걸까???
이번장은 하더라로 끝내 버렸다. 증명과 이해가 안되니, 누가 1을 왜 더 하는지 물어보면 할말이 없다.

아시는 분은 자세하게 설명좀 부탁 드립니다.
dreamcast@naver.com으로 메일 주세요.

#include <time.h>

#include <iostream>

 

int main()

{

    srand((unsigned)time(0));

    int lowest = 1, highest = 10;

    int range=(highest-lowest)+1;

 

    for(int k = 0; k < 10; k++)

    {   

        int num =  lowest+int( range*rand()/(RAND_MAX + 1.0) );

        std::cout << num << std::endl;

    }

    return 0;

}

참조:
http://3dprog.tistory.com/m/18
http://www.daniweb.com/software-development/cpp/threads/1769/c-random-numbers
http://minamjun11.egloos.com/m/1252450