홈페이지: http://wiki.hping.org/108
bignum은 취급하기 어려운 long형 이상의 큰 수를 처리하는 패키지입니다.(큰 수를 처리 시 제한은 없습니다.) 현재는 그 가능성과 편리함을 인정받아 Tcllib1.7부터 기본으로 포함되어졌습니다.
예제
package require math::bignum
set a [math::bignum::fromstr 18446744073709551615]
set b [math::bignum::fromstr 18446744073709551615]
set c [math::bignum::mul $a $b]
puts [math::bignum::tostr $c]
위의 코드에서는 unsigned long형의 최대치를 서로 곱하는 예제이며, 결과는 340282366920938463426481119284349108225입니다. bignum 패키지는 처음에 문자열로부터 bignum의 데이터 형으로 변환할 필요가 있습니다.
문자열과 bignum과의 상호변환
문자열로부터 bignum 변환
math::bignum::fromstr string ?base?
bignum으로부터 문자열 변환
math::bignum::tostr bignum ?base?
계산을 하기 전에 반드시 문자열을 bignum의 형태로 기수를 지정하여 변환합니다. 이후 임의의 기수로부터 변환하는 작업을 할 수 있습니다.
# 16진수로부터 bignum으로 변환
set a [math::bignum::fromstr fff 16]
# bignum으로부터 2진수로 변환
math::bignum::tostr $a 2
다양한 연산
부호
math::bignum::sign bignum | bignum이 음수이면 1을 리턴한다. |
math::bignum::abs bignum | bignum의 절대치를 리턴한다. |
math::bignum::cmp a b | a == b 일때 0,a > b 일때 1,a < b 일때 -1을 리턴한다. |
math::bignum::iszero bignum | bignum이 0일때 1을 리턴한다. |
비교연산
math::bignum::lt a b | a < b |
math::bignum::le a b | a < = b |
math::bignum::gt a b | a > b |
math::bignum::ge a b | a > = b |
math::bignum::eq a b | a == b |
math::bignum::ne a b | a != b |
산술연산
math::bignum::isodd bignum | bignum이 홀수일때 1을 리턴한다. |
math::bignum::iseven bignum | bignum이 짝수일때 1을 리턴한다. |
math::bignum::add a b | a+b |
math::bignum::sub a b | a-b |
math::bignum::mul a b | a*b |
math::bignum::divqr a b | a/b의 몫, 나머지를 리스트로 리턴한다. |
math::bignum::div a b | a/b |
math::bignum::rem a b | rem |
math::bignum::mod n m | mod |
math::bignum::pow base exp | |
math::bignum::powm base exp m | |
math::bignum::sqrt bignum | bignum의 제곱근중 정수 부분만 리턴한다. |
math::bignum::rand bits | bits를 최고치라 한 난수를 리턴한다. |
bit 연산자
math::bignum::lshift bignum bits | bignum을 왼쪽으로 시프프 |
math::bignum::rshift bignum bits | bignum을 오른쪽으로 시프트 |
math::bignum::setbit bignumVar bit | bit 셋팅 |
math::bignum::clearbit bignumVar bit | bit를 클리어 |
math::bignum::testbit bignum bit | bit가 1 일때는 1, 0 일때는 -1을, 이외는 0을 리턴한다. |
math::bignum::bits bignum | bignum을 표현하는데 필요한 bit수를 리턴한다. |
마치며
이 bignum패키지는 정수만을 취급하며, 소수점을 취급 시에는 bigfloat패키지를 사용하면 됩니다. 사용법은 동일합니다.