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; }
까만 화면에 파란 텍스트. 전 한 번도 못본 화면이네요.ㅇㅅㅇ
답글삭제매트릭스 이후로 처음.....
몇년도 OS인가요?
저도 맞트랙백(?)을 ㅎㅎ
trackback from: 난수 발생함수 rand(), 난수 범위 지정하기
답글삭제프로그래밍 카테고리에도 글이 좀 쌓이는 것 같다. (8개?)난수 발생의 범위를 지정하는 방법, 요렇게변수 = rand() % (종료 값 - 시작 값 + 1) + 시작 값100부터 1000 사이의 난수를 발생시키려면변수 = rand() % (1000 - 100 + 1) + 100간단히 하면변수 = rand() % (901) + 100이렇게 되지요.이건 난수 1,000개를 발생시켜서 최소값, 최대값 출력하는 소스. #include <stdio.h...
@환타 - 2008/02/15 18:20
답글삭제1984년요 ^^;;;
당시에는 Z-80이라는 3.xx MHz(GHz 아님) 8비트 CPU를 사용하는 PC가 세상을 지배하고 있었더랍니다.