도박 연구 채널

<서론>

 

 가챠를 돌리다보면, 자신의 ㅈ같은 똥손을 원망하게 될 것이다. 몇몇 사람들은 "그거 랜덤이라 네 잘못 아님."이럴지 모르겠지만, 사실 이것은 당신의 잘못이 맞다.

 

많은 곳에서 쓰이는 랜덤함수는 이렇게 정의할 수 있다.

 

"타이밍이 제일 중요하다"

 

 

<본론1 - 랜덤함수의 기본>

 

 일단 c언어의 랜덤함수 기본 코드를 보자.

 

/----

#include <stdio.h>

#include <stdlib.h>

 

int main() {

 int a = rand();

 

 printf("%d", a);

 

 return 0;

 

----/

 

이다. c언어의 기본은 각자 공부하도록 하자. 여기서 a=rand()에서 a라는 변수가 랜덤값으로 정해진다. 그럼, 랜덤 값은 어떻게 정해지는 것일까?

 

<본론2 - 시드>

 

시드? 게이머들은 많이 들어봤을 것이다. 마치 마인크래프트를 예로 들자면, 많은 사람이 "아~ 지형 정하는거?" 할 수도 있겠다. 사실 시드는 일종의 표 같은 것이다.

 

아까 위에서 본 코드를 돌렸더니 이런 숫자가 나왔다고 치자.

 

5

 

첫 숫자는 5이다. 또 돌려보자.

 

8

 

1

 

7

 

2

 

3

 

5

 

8

 

1

 

7

 

...

 

이런식으로 반복된다. 만약 바보가 아니라면 규칙을 발견할 것이다. 바로 5,8,1,7,2,3 순으로 반복된다는 것이다. 이것을 "시드"라고 하며, 이렇게 정해져있다. 잠깐, 렇다면 이 시드를 이용해 다음 숫자를 알 수 있지 않을까? 저기 7다음에는 무조건 2가 나온다. 그렇다. 시드로 숫자를 예측할 수 있는 것이다. 그런데 왜 우리는 항상 포인트 게임에서 지는 것일까?

 

<본론3 - 완벽한 난수>

 

아까 코드에서 stdlib.h 헤더 파일을 불러온 곳 아래에 이 코드를 추가해보자.

 

/----

#include <time.h>

----/

 

그 다음, 정수형 변수 선언 위에 이 코드를 추가해보자.

 

/----

 srand(time(NULL));

----/

 

자, 이제 진짜 재밌는 곳으로 들어간다. 아까 시드를 이용해 다음 숫자를 예측할 수 있다고 하였다. 시드는 항상 같은 규칙이기 때문에 어쩔 수 없다. 하지만 만약, 시드를 바꿀 수 있다면 어떨까? 아까 5,8,1,7,2,3 규칙을 1,2,3,4,5,6 이런 식으로 바꾸는 것이다. 물론 바꾼 뒤에도 1,2,3,4,5,6이 반복되기 때문에 이 규칙도 예측할 수 있다. 하지만 시드가 계속, 끊임없이 바뀐다면? 그렇다면 완벽한 난수가 될 것이다. 계속 바뀌려면, 똑같이 계속 바뀌는 어떤 수가 있어야한다. time.h란 헤더파일은 시간에 대한 기능을 가지고 있다. 시간, 시간은 멈출 수도 없고, 계속 바뀐다. 시드를 시간에 맞게 설정함으로서 완벽한 난수를 만드는 것이 모든 난수의 핵심이다.

 

<결론 - 마치며>

 

 더 재밌는 것은 이 난수도 예측할 수 있다는 것이다. 각 시간마다의 시드를 다 외운다면 말이다. 세상의 완벽한 랜덤은 없다. 단지 우리가 그렇게 느낄 뿐이다.

 

 

--끝--