SYNOPSIS

#include <stdlib.h>
int rand(void)

DESCRIPTION

The rand() function returns a pseudo-random integer between 0 and RAND_MAX.
If no seed value is provided, the rand() function is auto-matically seeded with a value of 1.

RETURN VALUE

The rand() function returns a value between 0 and RAND_MAX.

C/C++에서 난수를 발생시키는 함수는 rand() 이고, 0~RAND_MAX(보통 32767) 사이의 난수를 생성합니다.
BASIC에서 이러한 기능을 하는 함수는 rnd()입니다.

어릴 때 컴퓨터 학원에서는 SPC-1000을, 집에서는 MSX를 사용하던 시기가 있었습니다.
학원에서 배운 것을 집에서 종종 시험해보고는 했는데, 두 기종 간의 이질감을 발견한 것이 rnd() 함수였습니다.

MSX에서는 매번 실행할 때마다 같은 난수가 나오기 때문에 난수를 난수답게 나오게 할 무엇인가가 필요했는데, SPC-1000은 언제나 다른 난수가 발생했습니다.
난수의 기본구조 즉, 의사 난수(pseude-random number)를 생성한다는 것을 알고 나서 더 놀랍더군요.
의사 난수라는 개념상, 난수는 어떤 식을 통해 생성된 값이므로 같은 조건에서는 같은 결과가 나오거든요…

아래와 같은 코드를 작성해서 계속 실행하면 두 기종에서는 다른 결과를 보여줍니다.
10 A = RND(1)*100
20 PRINT A


이 비밀(?)을 알게된 것이 MSX에서는 난수의 seed를 무작위로 부여하기 위해서 RND(-TIME)을 호출하는데, SPC-1000에서는 이런 기능 자체가 없다는 것을 알면서 부터였습니다.
(C언어의 srand() 호출 방식/개념과 상당히 유사합니다)

한편, C/C++ 언어는 이 부분이 잘 정의되어 있기 때문에 이러한 혼란(?) 없이 사용할 수 있답니다.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char* argv[])
{
	srand( (unsigned)time( NULL ) ); // 난수를 난수답게
	int i = rand();
	printf("%d\n", i);

	return 0;
}



Disclaimer: 이 글은 전기통신기본법 제47조 1항에 따른 공익을 해할 목적이 전혀 없음은 물론, 저는 지금 허위의 통신을 한다는 일체의 인식이 없음을 밝힙니다.
이 아름다운 정부가 나라 일을 정말 아름답게 해서 국민들 생활을 최고로 아름답게 만들었으니, 이 어찌 아름답지 않을소냐?

Comments

  1. BlogIcon 환타 2008/02/15 18:20

    까만 화면에 파란 텍스트. 전 한 번도 못본 화면이네요.ㅇㅅㅇ
    매트릭스 이후로 처음.....
    몇년도 OS인가요?
    저도 맞트랙백(?)을 ㅎㅎ

    perm. |  mod/del. |  reply.
    • BlogIcon bluenlive 2008/02/15 18:23

      1984년요 ^^;;;
      당시에는 Z-80이라는 3.xx MHz(GHz 아님) 8비트 CPU를 사용하는 PC가 세상을 지배하고 있었더랍니다.

Why So Serious?

댓글 입력 폼

 
 
 
 
 
 
 
     
 
 
 
 
 
     
 
 
 /