일단은 프로그래머 나부랭이

랜덤 함수에 대하여 본문

기타등등

랜덤 함수에 대하여

하필이면 도대체가 2018. 3. 9. 00:03

프로그래밍을 하다보면 랜덤 함수를 통해 발생된 임의의 값을 이용할 때가 있다.

그런데, '컴퓨터는 논리적인 사고 밖에 하지 못하는데, 난수를 어떻게 발생시킬까?'하는 의문이 생길수도 있는데, 사실 우리가 사용하는 랜덤 함수도 누군가에 의해 설계된 로직(프로그램)이다.


랜덤 함수는 프로그래밍 언어마다 다른데, Java의 경우엔, 1/1000초(혹은 백만분의 1이라고 들은것 같다.) 이하의 값을 가져와서 임의의 값으로 표기 한다고한다. C언어의 경우엔 얼핏 듣기로는 CPU에 정의된 난수 수순에 따라서 정해진 값을 가져오는데, 그 값에 어떠한 변칙적인 값(Seed 값)을 줘서, 그것으로 임의의 값을 얻어낸다고 한다.

(C언어의 seed값도 시간을 이용하며, 실제로, C언어를 프로그래밍할 때 별 생각없이 랜덤함수를 사용해서 코딩하면 매번 정해진 순서대로 값이 나오곤 했던 기억이 있다.)


이러다보니 랜덤함수로 발생한 임의의 값에 대하여 추측이 가능할 수도 있다.

무슨 말이냐면, 만약, Seed값을 계속해서 같은 값으로 지정해줄수만 있다면, 똑같은 패턴의 값이 출력될 수 있다는 것이다.(어떤 로직이든 동일한 값을 입력하면, 동일한 결과가 나오는건 당연한 일이다. 중학교 수학에서 배운 함수를 생각해보자.)

물론, 프로그래머들은 최대한 자연스럽게 보이기 위하여 프로그래밍을 하지만, 실수가 됐든, 우연이 됐든 이러한 것을 추측할 수 있게 되는 경우가 충분히 발생할 수도 있다.(한, 백만분의 1의 확률로..?)


때문에 최대한 자연스러운(?) 임의의 값을 출력하기 위하여 많은 사람들이 노력하는데, 

https://www.random.org/ 이 사이트 같은 경우, 대기의 소음을 측정해서 임의의 값을 발생시킨다고 한다. 이 외에도 자세한 원리는 모르지만, 양자역학을 이용하여 임의의 값을 생성하는 방법도 있다고 한다.

이쯤되면, '임의의 값을 생성하기 위해서, 임의의 값을 입력'하는 모순이 느껴지는데, 컴퓨터는 정해진 로직에 따라 논리적으로만 동작을 하기 때문에 어쩔수 없는 부분이 아닐까 싶다.

인간에게는 단순히 '아무거나'를 선택한다는게 어려운것이 아니지만, 컴퓨터는 논리적으로 구성되어 있기 때문에 임의의 값을 생성한다는것이 무척이나 어렵다. 만약 이게 가능하다면, 기계가 감정을 갖는것도 가능하지 않을까



Comments