c언어로 끄적이다가 srand함수로 무작위 숫자를 뽑아 좌표값을 설정하려는데
기존에 있던 좌표랑 곂치면 다시 반복하겠끔 반무한루프 형식으로 하였는데 여기서 너무
처리 속도가 느려서 찾던 도중
well함수가 있다는 걸 찾았다
well함수는 기존MT(메르센 트위스터) 보다 40% 빠른 알고리즘이라는 것이다
메르센 트위스터 설명 : https://ko.wikipedia.org/wiki/%EB%A9%94%EB%A5%B4%EC%84%BC_%ED%8A%B8%EC%9C%84%EC%8A%A4%ED%84%B0
그런데 이 메르센 트위스터가 기존 rand보다 매우 빠르다고 알려져있다.
그러니 well 알고리즘의 속도면은 딱히 설명안해도..ㅎㅎ
well 알고리즘 소스 : http://www.iro.umontreal.ca/~panneton/WELLRNG.html
위에 사이트 가서 헤더파일 추가하고 사용 하면 될듯하다
int number = 0;
unsigned int reset[32] = { 0, };
for (int i = 0;i < 32; i++)
reset[i] = rand() << 16 | rand();
InitWELLRNG512a(reset);
number = (int /* or double*/)(WELLRNG512a() * (MAX - MIN +1)) + MIN;
대충 이렇게 사용을 하고 number은 MIN~MAX값 사이 수로 나온다
알고리즘 소스를 보면 double형이 기본형이기 때문에 소수점도 얼마든지 가능하다
위에서는 그냥 정수를 원할경우 쓰면 될듯하다.
그리고 결과로 저렇게 코드를 바꾸고 나서 속도 저하로 인한 스트레스는 없어졌다
'개발잡담 > 기타' 카테고리의 다른 글
Git 명령어 사용법 - 기본 1 (0) | 2024.01.15 |
---|---|
파일 및 폴더 탐색할때는 Files.walk() (2) | 2024.01.01 |
Git commit 메세지 템플릿 설정 (0) | 2023.11.07 |
Yolo v5를 이용한 간단하게 AI 이미지 인식 (0) | 2023.05.05 |
낙서시작 (0) | 2016.02.22 |