- 추억6. MSX-BASIC과 HU-BASIC의 RND() 함수의 차이
- 컴퓨터야그/컴 관련 추억들
- 2008. 2. 4. 09:17
BASIC에서 이러한 기능을 하는 함수는 rnd()입니다.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) 사이의 난수를 생성합니다.
어릴 때 컴퓨터 학원에서는 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; }
'컴퓨터야그 > 컴 관련 추억들' 카테고리의 다른 글
Windows 3.x는 3.2까지 개발되었다 (6) | 2009.08.01 |
---|---|
한메한글 for Windows 2.5에 대한 추억 (5) | 2008.03.03 |
추억5. 원라인 컨테스트 - 월간 마이크로소프트웨어 (0) | 2008.02.03 |
추억4-부록. MSX-BASIC으로 작성해본 그 프로그램 (0) | 2008.01.30 |
추억4. 컴퓨터 경진대회 참가 (4) | 2008.01.30 |
Recent comment