마인크래프트에서 exp를 구현하기 위해 테일러 전개를 쓰면


범위에서 멀어질 수록 오차가 매우 심해져서 문제가 생긴다.


그렇다고 차수를 높이면 연산량이 증가해 시간도 오래걸리고

코드가 예쁘지도 않아진다.




이를 해결하기 위해 테일러 전개식에 들어가는 값 자체를 0에 가깝게 만들면

오차도 적어지고 낮은 차수를 사용해도 되게 된다.




이를 위해


$e^x$ex


의 x를 변환시켜주면 되는데


$x=n\ln 2+r$x=nln2+r


(ln<z> 로 할 수도 있음. 그렇게 하면 아래에 2^n을 z^n으로)


요론 식으로 변환시키면 된다. (n은 |r|을 가장 작게 하는 정수)


이 x를 exp에 대입하면


$2^n\cdot e^r$2n·er


가 되는데, 여기서 n은 정수이기에 그냥 거듭제곱 함수 만들어서 계산해주면 되고

r은 0에 가까운 작은 수이기에 테일러 전개식을 통해 근사해주면 된다.


이 때 n과 r을 쉽게 얻기 위해선


$n=\left\lfloor \frac{x}{\ln 2}\right\rfloor $n=xln2


$r=x-n\ln 2$r=xnln2


이런 식으로 구하면 된다.



이걸 구현해주면



24b0d121e09c28a8699fe8b115ef0469903bf6bf


24b0d121e09c28a8699fe8b115ef046f5a4f9e98

왼쪽은 python 실제 연산


이런식으로 나온다.


다만 2^n 부분에서 오버플로우가 발생할 수 있어서

너무 큰 수는 그냥 마인크래프트 한계상 불가능하다



헤에