곱셈으로 나눗셈을 대신하는 방법을 보겠습니다.
1/(1-x) 를 먼저 구하여 나눗셈을 하는 방법입니다.
예를 들어서 125/33을 생각해 봅시다. 125는 제껴놓고 먼저
1/33을 생각합니다. 이것은 이렇게 바꾸어 볼수 있습니다.
1/33=(1/64)/(33/64)=(1/64)/[1-(31/64)]로 변환해봅니다.
분모만 보도록 하겠습니다. 1-(31/64)와 같은 꼴이 되었습니다.
1/(1-x)=1+x+x^2+x^3+x^4+x^5+..... 무한대로 더해집니다.
그런데 x가 1/2보다 작다면 x^(big number) ==>> 0 으로 수렴합니다.
따라서 1/(1-x)를 곱셉으로 바꿀수 있습니다.
위의 식에서 x가 0에 가까울수록 더 빨리 0에 수렴하지만
항상 1/2보다 작은 값을 가지도록 할수는 있습니다.
위의 경우에서 분모가 32라면 나눗셈은 아주 쉽습니다.
그래서 2의 누승은 아니라고 가정하겠습니다.
31이 분모라면 x는 1/32 로 택할수 있습니다. 상당히 작은 수 입니다.
x의 값이 32보다 크고 64보다 작은 경우에는 x가 33일때가 가장
까다로운 경우입니다.분모가 34에서 63사이의 값일경우는
x는 30/64 에서 1/64까지의 값을 가지므로 더 빨리 0으로 수렴할 것입니다.
=======================================================================
지금까지 아이디어를 스케치 해보았습니다.
분자/분모 에서 분모보다 큰 2의 누승을 찾습니다.
2^p < 분모 < 2^(p+1) 인 p를 구할수 있다.
그러면 x는 [2^(p+1)-분모]/2^(p+1) 이 된다.
분자/분모 = 분자/[(1-x)*2^(p+1)] = [분자/(2^(p+1))] / (1-x) 가 된다.
즉 나중에 분자를 p+1위치만큼 이동시키면 되는 것이다.
다시정리하면
분자/분모 = [분자/(2^(p+1))] * (1 + x + x^2 + x^3 + x^4 + ....) 가 된다.
x의 누승은 [2^(p+1)-분모]의 누승을 자리이동만 하면 된다.
따라서 모든 계산에서 나눗셈은 곱셈으로 바꿀수 있다.
'알고리즘, 자료구조 > 알고리즘' 카테고리의 다른 글
냉장고 문제 (0) | 2013.06.02 |
---|---|
array searching (0) | 2012.01.14 |
아주 큰수의 나눗셈 알고리즘 (0) | 2011.12.10 |
공 옮기기 (0) | 2011.12.06 |
다음과 같은 출력을 주는 프로그램을 작성하시오. 최대수는 65536까지 입니다.| (0) | 2011.12.06 |