RSS

Category Archives: Programming

uniform random number generation

0 과 1 사이의 uniform random number를 발생시키기 위해, 기존에 쓰던 코드를 그대로 쓰다가 낭패를 봐서 기록해 두고자 한다.

기존에 쓰던 코드는

(float)rand() / (float)RAND_MAX;

였다. 보통의 uniform random number가 0 <= x < 1 인 소수 x를 구하는 경우가 많아서 위의 코드가 그에 해당하는 코드라고 만 생각했다.
그런데 알고 보니, 위의 코드는 0 <= x <= 1 사이의 값을 리턴해 주는 코드였다. 다시 말해서 결과로 1이 나올 수도 있는 것이다. 아, 그것도 모르고 개삽질 했다.
내가 원하는 대로 0 <= x < 1 사이의 값을 구하려면

(float)rand() / (float)(RAND_MAX + 1);

을 해줘야 했다. 즉 rand() 함수는 0 <= rand() <= RAND_MAX 의 값을 리턴해 주는 함수인 것이다.
그렇다면, 0 < x < 1 사이의 random number가 필요할 경우에는 어떻게 해야 할까?

(float)(rand() + 1) / (float)(RAND_MAX + 2);

이렇게 해주면 되지 않을까?

결과적으로 요약해 보자면

0 <= x <= 1

(float)rand() / (float)(RAND_MAX);

0 <= x < 1


(float)rand() / (float)(RAND_MAX + 1);

0 < x < 1

(float)(rand() + 1) / (float)(RAND_MAX + 2);

돌려 보니까, 대충 맞는거 같다.

2015.12.16 추가 :

0 <= x < 1 의 경우를 위해 다른 방법으로 하는 코드를 발견했다.

(float)(rand() % RAND_MAX) / (float)RAND_MAX;
 
Leave a comment

Posted by on August 6, 2014 in Programming

 
Link

A High Schooler’s Comp. Sci Blog: Extended Kalman Filter Example With Code

 

 
Leave a comment

Posted by on July 28, 2014 in Computer Vision, Programming

 
Link

Perspective 3-Point (P3P) Algorithm

 
Leave a comment

Posted by on June 18, 2014 in Computer Vision, Programming

 
Link

https://code.google.com/p/visual-rbm/

 
Leave a comment

Posted by on June 17, 2014 in Deep Learning, Programming

 
Link

https://github.com/sansuiso/LBDReconstruction

 
Leave a comment

Posted by on June 13, 2014 in Computer Vision, Programming

 
Link

OpenDTAM

 
Leave a comment

Posted by on June 12, 2014 in Computer Vision, Programming

 
Link

Semi-Direct Visual Odometry

 
Leave a comment

Posted by on June 2, 2014 in Computer Vision, Programming