KTUG 한국 텍 사용자 그룹

Menu

KTUG :: 마당정보글 › 몬테카를로 기법으로 파이 구하기: 정수 연산 버전

DohyunKim | 2011.06.15 00:34:41 | 메뉴 건너뛰기 쓰기
\newcount\N   \N=1000000                      % 총시행횟수. 10^n
\newcount\n   \n=0                            % 현재시행횟수
\newcount\hit \hit=0                          % Hit
\newcount\rr  \rr\numexpr10000*10000\relax    % 상수 r^2
\newcount\p   \newcount\q                     % 난수 담을 변수
\def\rand#1{#1=\pdfuniformdeviate10001\relax} % 난수 발생기
\def\dmark#1{#1.}                             % 소수점 찍기
\loop
  \rand\p \rand\q
  \ifnum\numexpr\p*\p+\q*\q\relax>\rr\else\advance\hit by1\fi
  \ifnum\n<\N\advance\n by1
\repeat
$$
\pi \approx \expandafter\dmark\the\numexpr4*\hit\relax
$$
\bye

아래 도은이아빠 글을 보고 자원 소모가 많은 소수점 연산을 안 써도 얼추 가능할 거 같아서 간단히 작성해봤다.


첫줄의 \N 은 10의 제곱수라야 한다. 이 값을 증가시키면 파이 값이 더 정확해진다.

위의 예처럼 1백만 번까지는 그럭저럭 즐겁게 컴파일할 수 있지만 0을 하나 더 붙여 1천만 번을 돌리면 기다리기가 사뭇 지겹다.


굳이 레이텍으로 만들 이유가 없기에 플레인텍으로 작성했다. pdftex 으로 컴파일하면 된다.

댓글 쓰기

목록

KTUG 한국 텍 사용자 그룹