상세 컨텐츠

본문 제목

BigFloat로 Pi를 구해보자-1. 구조체 정의, 기초 조작

프로그래밍/Multi precision

by ∫2tdt=t²+c 2012. 10. 16. 00:45

본문



기초적인 BigFloat의 수학적 원리는 다음과 같아요~


십진법은 위와 같은 규칙으로 표현됩니다. 십진법에서의 덧셈은 각 자리수에 해당하는 숫자들끼리 더해서 받아올림을 함으로써 연산됩니다. 이를 32비트 컴퓨터에서 효율적으로 구현하기 위해서는 10진법보다는진법을 사용하는것이 좋겠지요.


이런 모양으로 실수를 표현할수 있을겁니다. 일단 이번 연재의 궁극적인 목표는 Pi값의 계산이니만큼 정수부분이 무지막지하게 큰 정수를 표현해야할 필요는 없습니다. a, b부분은 쳐내고, 다음과 같은 모양으로 표현하는게 괜찮겠네요.

a0은 정수부분을 표현하는 데이터로, a1부터는 소수점 이하를 표현하는 데이터로 활용하면 될것입니다. 자 이제 이걸 바탕으로 우리의 BigFloat자료형이 될 RealReal구조체를 짜봅시다.




frac이 a0, a1, a2 등등을 표현할 배열.

alloced는 frac에 할당된 배열의 길이를 나타낼 것입니다.

size는 우리가 실제로 사용할 frac의 길이를 말하구요. (굳이 alloced와 size를 나눈 이유는 STL vector에서 reserved와 비슷한 기능을 후에 구현하려고 하기 때문이랍니다.)

sign은 양수인지 음수인지 나타내는 부호입니다.


그 밑에 이번에 구현해볼 함수들이 선언되어있습니다~!

하나씩 살펴볼까요




어때요? 참 쉽죠..? (아직까지는ㅋ)

printHex함수는 16진수로 RealReal포맷을 출력해줍니다. 굳이 10진수 대신 16진수로 표현하는 이유는 10진수로 표현하려면 진수변환을 해야하는데, 아직 그러기에는 먼저 구현해야할것이 많기 때문이지요.

관련글 더보기

댓글 영역