본문 바로가기

Team Projects

Bigfloat II: Integer, BINT


Mr. K입니다

어제 같이 올릴까 말까 했다가 그냥 어제 안올리고 오늘 올립니다


[헤더]

아랫부분을 보시면 뺄셈 연산자 오버로딩에서 fatal error가 뜬다고 주석으로 적어놓았습니다

다 만들고 컴파일하면 이상이 없는데, 실행은 되지 않는 error입니다
실행을 하기 위해서는 저 3줄을 모두 주석처리해야하지요 -_-;

Dlbo군한테 물어보니 VS 2005 이상이면 에러가 뜨지 않을거라고 합니다


[구현cpp]

bint의 핵심은 뺄셈연산과 나눗셈 연산입니다

덧셈과 곱셈은 이미 ubint에서 구현해놓았으니 상속으로 해결하였습니다

그리고,
ubint가 input이 되는 몇몇 함수에서
우변에 놓이는 ubint의 멤버변수를 참조했더니 private이라 안된다고 해서 get함수와 set함수를 ubint에 추가했습니다


subtract함수는 항상 this가 가지고 있는 string이 input으로 들어온 string을 빼도록 해놓았습니다
실제로 subtract함수를 호출할 때는 함수를 호출하는 곳에서 크기에 따라 적당한 조치를 취하지요

그러고나서 뺄셈연산을 오버로딩하고, 덧셈연산을 오버로딩하였습니다
덧셈연산은 ubint에 add가 있기 때문에 그것을 이용해서 해도 상관없지만, 뺄셈을 오버로딩했기 때문에 뺄셈을 통해 구현했습니다

곱셈연산은 ubint에 multiply가 있어서 그것을 그대로 사용하였습니다
부호에 대한 문제는 XOR로 처리했습니다, 그게 제일 간단하거든요 :D


divide함수의 알고리즘은 예전에 혼자 만들던 클래스로는 감히 구현하기 힘든 것이었는데,
숫자열을 char형 배열 또는 short형 배열 대신 string으로 사용함으로써 가능해졌습니다
( 정확히 얘기하면 동적 배열이 필요했는데, string이 딱 그것에 맞게 설계되어있지요 ㄷㄷ )

divide함수를 완성함에 따라 나눗셈연산과 나머지연산을 오버로딩했습니다

그리고나서
덧셈, 뺄셈, 곱셈, 나눗셈, 나머지연산에 대한 축약연산을 오버로딩하고
전위++, 후위++, 전위--, 후위--를 오버로딩하고
출력스트림과 입력스트림을 오버로딩하고
마지막으로 관계연산자를 오버로딩했습니다

그 밑으로는 죄다
bint와 다른 자료형간의 연산자 오버로딩입니다 :D