상세 컨텐츠

본문 제목

[진짜 BigFloat 구현하기] 3. 곱셈 구현하기

프로그래밍/Multi precision

by ∫2tdt=t²+c 2013. 11. 26. 12:05

본문

앞서서 덧셈과 뺄셈을 구현해보았는데요, 이미 둘을 구현했다면 곱셈을 구현하는 것은 생각보다 간단합니다. 알고리즘에 대해서는 다음을 참조하시면 됩니다.


2012/10/18 - [프로그래밍/Multi precision] - BigFloat로 Pi를 구해보자-3. 곱셈 구현 + 10진수로 출력하기


제일 단순한 방법으로 곱셈을 구현하면 n길이인 정수에 대해 O(n^2) 시간에 계산을 완료할 수 있습니다. 더 빠른 알고리즘 구현은 일단 추후로 미루고ㅋ



당연하겠지만 지수부와 정수배열로 표현된 두 수의 곱은 정수배열끼리는 곱하고 지수부는 더하면 됩니다. 부호연산은 자명하니 설명이 필요없구요. 바로 코드를 보시죠.




곱셈만 구현하고 끝낼수 없죠. 곱셈한 결과를 더해주는 FMA(Fused Multiply-Add)를 구현해봅시다. 이 연산이 은근히 유용합니다.



수식으로 정리하면 위 처럼 되겠죠? 실제 구현에서는 절대값을 더해주는 경우와 빼주는 경우로 나눠서 구현을 해야합니다.



진짜 FMA를 하는 함수는 위 함수를 이용해서 다음과 같이 심플하게 짤수 있겠죠.



이제 곱셈이 완료되었으니, 10진수로 출력하는 함수를 만들수 있습니다. 그건 다음으로 패스!




관련글 더보기

댓글 영역