컴퓨터는 난수를 만들어 낼 수 없다고 한다.
그래서 내부의 특수한 알고리즘으로 난수를 만든다.
C 언어에서는 아래와 같이 보통 난수를 만든다.
그냥 rand만 쓰면 똑같은 난수가 나오니, 1970년 1월 1일 이후의 시간 값을 seed값(기준값으로 이해하자)을
이용해서 난수를 생성하는 것이다.
그러면 매번 실행할 때마다 다른 난수가 나온다.
#include<stdio.h>
#include<stdlib.h> //rand() 함수 포함 라이브러리
#include<time.h>
int main()
{
//time(NULL) : 1970년 1월 1일 이후 경과된 시간을 초 단위로 변환
//그 값을 seed(씨앗)으로 해서 매번 다른 난수가 생성되도록 함
srand(time(NULL));
int random = (rand() % 45)+1;
printf("%d\n", random);
}
출처 : C 랜덤 - 난수 생성하기 (tistory.com)
이 코드의 맹점이 하나 있다.
나와 다른 사람이 각자의 컴퓨터에서 동시에 실행하면 똑같은 난수가 나온다는 것이다.
그래서 AI에게 헬프를 쳤다.
그러나 이 방법에도 문제는 있다. seed를 똑같은 값을 입력하면 당연히 똑같은 난수가 출력된다는 것이다.
문제는 이건 리눅스 계열에서 돌아가는 코드다.
gcc를 깔아야 할까? 그러기엔 귀찮다.
아숙업한테 물어보자
빙에 직접 검색을 했다.
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main()
{
srand(GetCurrentProcessId());
int random = rand() % 45 + 1;
printf("%d\n", random);
return 0;
}
windows API를 활용하여 만들었다. 역시 리눅스/유닉스 계열에 있는 건 웬만한 건 windows API에 다 있다.
한 학생의 예리한 질문 덕에(두 사람이 동시에 실행하면 같은 랜덤값이 나오나요?)
좋은 코드를 발견했다.
감사하다.
'ai와 놀기' 카테고리의 다른 글
성경의 잠언 속 두 여인 (2) | 2023.08.20 |
---|---|
아직까지는 뚫리지 않는 쿼런틴의 벽 (0) | 2023.08.12 |
스마트폰에 중독된 우리의 모습을 그려 줘 (0) | 2023.06.09 |
미래의 지구, 인간 (0) | 2023.06.09 |
바보 이반을 그려 봐 (0) | 2023.06.09 |