바로 전 글에서 알고리즘에 대해 주절주절 설명하느라고 코드를 올리지 못했다. 시프트 더하기 16..(몇이었더라)알고리즘을 쓰도록 하겠다. 그전에 먼저 bigint의 길이를 줄여주는 함수를 작성한다.
이 함수는 bigint의 현재 길이에서 필요없는 부분(예를 들어 0000001101101011011에서 앞의 0000000 같은놈)을 잘라내어서 길이를 줄인다. 그리고 원래 길이를 리턴한다. 이 함수를 만든 이유는 계산시에 불필요한 부분을 계산하지 않고 효율성을 높이기 위해서이다. 단, 계산후에는 bigint를 원래 길이로 돌려놓아야한다.
제일 처음에 dcsizemax를 구하는 부분이 나오는데, 이는 src이 10^9진수로 변환했을때 몇자리가 나오는지 구해준다.
별거 없고 그냥 이 식을 이용해서 구한것이다. 소수점아래 4번째자리까지 취했는데, n이 커질수록 오차가 커진다. 따라서 1.0704로 취해서 자리가 남으면 남았지 모자라지 않게 했다.
중간에 이중루프 있는 부분이 시프트 더하기 1647483648 알고리즘을 구현한 부분이다.
이 함수는 bigint의 현재 길이에서 필요없는 부분(예를 들어 0000001101101011011에서 앞의 0000000 같은놈)을 잘라내어서 길이를 줄인다. 그리고 원래 길이를 리턴한다. 이 함수를 만든 이유는 계산시에 불필요한 부분을 계산하지 않고 효율성을 높이기 위해서이다. 단, 계산후에는 bigint를 원래 길이로 돌려놓아야한다.
제일 처음에 dcsizemax를 구하는 부분이 나오는데, 이는 src이 10^9진수로 변환했을때 몇자리가 나오는지 구해준다.
중간에 이중루프 있는 부분이 시프트 더하기 1647483648 알고리즘을 구현한 부분이다.
'프로그래밍 > Multi precision' 카테고리의 다른 글
| 드디어 오류를 잡아냈다. (1) | 2010/09/11 |
|---|---|
| BigInteger를 구현해보자 - 10. 10진수로 입력받기 (5) | 2009/04/30 |
| BigInteger를 구현해보자 - 9. 10진수로 출력하기(코드) (0) | 2009/04/26 |
| BigInteger를 구현해보자 - 8. 10진수로 출력하기(알고리즘) (2) | 2009/04/26 |
| BigInteger를 구현해보자 - 7. 나누기 (2) | 2009/04/25 |
| BigInteger를 구현해보자 - 6. 크기비교 (4) | 2009/04/21 |
| BigInteger를 구현해보자 - 5. 시프트 연산 (0) | 2009/04/12 |
TRACKBACK 0 AND
COMMENT 0

PREV