나누기 부분이 제일 오래 걸렸습니다.
뭐.. 어떻게 해야할지를 모르니.. 오래 걸린것이겠죠.. 

Matt씨의 나누기 함수를 처음 봤을 때,
무슨 소리인지 하나도 몰랐습니다..
'진짜 이렇게 하면 나누기가 되는건가!?'
라고 생각했었죠..

그래서 다른 자료를 참고하여 다르게 만들었습니다!
물론 작동도 잘됬구요.
그러다.. BigInteger형을 다 만들어갈 무렵..
문득.. '내가 만든건 빠를까??'라는 생각이 들었습니다.

그래서 몇가지 테스트 코드를 만든 후, Matt씨가 만든것과
제가 만든것의 속도를 비교해보았습니다..
그. 런. 데..
하.. 정말.. 1g의 거짓없이..
똑같은 테스트코드를 도는데 50배 느렸습니다.. ㅋㅋㅋ
새로 만든 의미가 없었습니다.
엄청 허탈했지요..
테스트 한 부분은 출력 부분이였습니다.
(미리 말하자면, 저나 Matt것이나
나누기 함수가 출력 함수에서 메인역할을 하기 때문에,
출력 속도에 많은 영향을 미칩니다.)

출력 부분을 조금 손바줬더니.. 두배 빨라져서 25배 느려졌습니다..
이러면 안될것 같아서 출력 함수를 대대적으로 바껐습니다.
1자리씩 출력하게 하던걸 9자리씩 출력하게 만들었습니다.
그러니 9배 빨라졌습니다. 이 때, 재보니 4~5배 정도 느렸습니다.
더 이상 출력 부분에서 바꿀 부분이 안보였습니다.
숫자 출력 방법의 기본방향을 바꾸지 않는 이상 더이상의 진전은 보이지 않았습니다.
포기하고 그냥 여기서 만족할려던 찰나!!!!
'나누기 알고리즘을 바꿔볼까?'
'빨라질려나...?'라는 호기심반 절망감반으로 divideWithRemainder함수만 바꿔보았습니다.
헐 !!!!!!!!!!!!!!!!
엄청 빠르더만요..ㅋㅋㅋ
이제는 제것이 무려 7~8배 정도 빠르게 출력하는 것이였습니다!!
그래서 현재 Matt씨의 방법을 그래도 사용하고 있습니다.

나눗셈 부분은 두 부분으로 나누어
처음 제가 생각했던 알고리즘과
Matt씨의 알고리즘 두개를 모두 설명드리는 식으로 하겠습니다.
(글 쓰고 있는 지금도 Matt씨것의 원리를 모릅니다. 얼핏보니 같은 알고리즘이지만,
그 방법에서 많은 차이가 있는것 같습니다.) 

'프로젝트 > 큰수 클래스(Big Numerics)' 카테고리의 다른 글

[BigInteger - 16] 나눗셈(Part 3)  (0) 2011.07.11
[BigInteger - 15] 나눗셈(Part 2)  (0) 2011.07.09
[BigInteger - 13] 곱셈  (0) 2011.07.08
[BigInteger - 12] 뺄셈  (0) 2011.07.08
[BigInteger - 11] 덧셈  (0) 2011.07.07
Posted by 투명테잎