본문 바로가기

(비정기) Mr.K's Post/Weekly paper

[Bigfloat 지원사격?] 자연수부터 해봅시다 :)


※ 발행할까 말까 고민좀 했는데, 내 정기 포스트가 아니라 일단 발행에 체크 안함 - to 관리자


안녕하십니까 Mr. K입니다


원래 오늘 제 포스트( 행렬 )를 끄적이기로 했던 날입니다만

환타님이 Bigfloat 만드신 것을 보고서 왠지 불타올라서(?)

개인적인 의견도 끄적이고 구현까지 해버렸습니다 -_-;


일단 저는 Talk에 끄적여놓았듯이

Bigfloat을 만들기 위한 기반은 Bigint라는 생각이 들고, Bigint를 만들기 위한 기반은 Unsigned Bigint라는 생각이 들어서


자연수의 역할을 하게 될 Unsigned Big INTeger를 먼저 만들어보았습니다

클래스의 정의부분입니다


자연수의 역할을 하기 때문에 부호를 나타내는 부분은 없고,
숫자열의 역할을 하는 부분은 string을 사용하였습니다

환타님이 포스트에 걸어놓은 링크를 타고 가면 나오는 모 중국인( 이라 추정 )이
Bigint를 구현할 때 string을 사용해놓은 것이 상당히 편리한 것 같아서 그것을 따왔습니다

자연수는 덧셈과 곱셈에 대해서만 닫혀있기 때문에 구현도 덧셈과 곱셈에 대해서만 해놓았습니다

add함수와 multiply함수는 ubint의 기능을 상속받는 bint( Big INTeger )에서 사용하기 위해
input과 output을 string으로 설정하였습니다

그 아래로는 죄다 연산자 오버로딩이므로 패스-



클래스의 구현부분입니다 ( 주의: 스압-_-이 조금 )


길어서 따로 설명은 하지 않겠습니다 -_-;

string함수와 substr함수를 이용하는 것도 위에 언급한 중국인이 사용해놓았습니다만, 따왔습니다

혹시 저작권이나 기타 다른 문제가 발생하지 않을까 조금 걱정이 되긴 합니다만
핵심이 되는 add함수와 multiply함수의 알고리즘은 직접 만든 것이므로 내껍니다 (?)

그리고, 연산자 오버로딩을 할 때
ubint에 음수가 존재하지 않으므로, 피연산되는 int형에 음수가 나오면 절대값을 취해버렸습니다

나머지는 패스-



main함수에서 실행해보았습니다
( 실제 제 workspace에는 더 많이 테스트되어있지만 정리가 안되어있는 관계로 하나만 -_-; )





아주 잘 나오네요 :D





이 포스트는 여기까지입니다/

어제 개인적인 의견을 끄적이고나서부터 만들기 시작해서

오늘 자잘한 버그까지 잡느라 간만에 머리좀 굴렸네요 ㅋㅋ


정기 포스트 대신이라고 봐주시면 감사하겠습니다

싫으셔도 할 수 없어요 :D


혹시나 댓글로 요청이 들어오거나 하면 이것을 기반으로 조금 더 만들어볼 의향은 있습니다만,
왠지 환타님 것을 가로채는게 아닌가 싶어 좀 걱정이 되긴 합니다 =_=


(포스팅 소요시간 : 약 45분)

'(비정기) Mr.K's Post > Weekly paper' 카테고리의 다른 글

Matrix : Part 5  (0) 2009.03.14
Matrix : Part 4  (0) 2009.03.06
Matrix : Part 3  (0) 2009.02.09
Matrix : Part 2  (2) 2009.01.24
Matrix : Part 1  (8) 2009.01.17