Tcllib1.7で桁数制限の無いbignumが使えるようになりました。元々は[[ここ:http://wiki.hping.org/108]]で公開されていた拡張を取り込んだみたです。

**使ってみる
 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型の最大値を掛けています。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    ,baseのexp乗
,math::bignum::powm base exp m ,mを法としたbaseのexp乗
,math::bignum::sqrt bignum     ,bignumの平方根の整数部分だけ返す。
,math::bignum::rand bits       ,bitsを上限とした乱数を返す

-ビット演算
-ビット演算(まだうまく動かないとこアリ)
,math::bignum::lshift bignum bits      ,bignumを左シフト
,math::bignum::rshift bignum bits      ,bignumを右シフト
,math::bignum::setbit bignumVar bit
,math::bignum::clearbit bignumVar bit
,math::bignum::testbit bignum bit
,math::bignum::bits bignum
,math::bignum::setbit bignumVar bit    ,bitをセット(bit位置のビットを1にする)
,math::bignum::clearbit bignumVar bit  ,bitをクリア(bit位置のビットを0にする)
,math::bignum::testbit bignum bit      ,bitが1の時は1を、0の時は-1を、範囲外の時は0を返す
,math::bignum::bits bignum             ,bignumを表現するのに必要なビット数を返す
----
[[CategoryTclTk]]

|New|Edit|Diff|History|Attach|Copy|Rename|
HTML convert time: 0.001 sec.