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]]
HTML convert time: 0.001 sec.