Tcllib1.8(?)から付く任意桁数の実数計算です。今のとこSourceForgeからDLできるTcllib1.7には含まれていません。CVSかActiveTcl8.4.9.1からゲットできます。
Tcllib1.8(?)から付く多倍長実数演算です。今のとこSourceForgeからDLできるTcllib1.7には含まれていません。CVSかActiveTcl8.4.9.1からゲットできます。

**使ってみる [#p4cb1110]
 package require math::bigfloat
 #適当に計算
 set a [fromstr 0.0000000000000000000000000000000000010]
 set b [fromstr 0.0000000000000000000000000000000000010]
 puts [tostr [add $a $b]]
 2.e-36
 #円周率
 puts [tostr [pi 50]]
 3.1415926535897932384626433832795028841971693993751

このパッケージは内部でbignumも読んでるので、整数の演算(BigInt)も普通にできます。
 #BigIntの計算
 set a [fromstr 1234000000000000000]
 set b [fromstr 1234567890000000000]
 puts [tostr [mul $a $b]]

あと、なんか知らんけどfromstrで実数を変換する時は最後に0をつけないといけないみたいです。たとえばfromstr 0.1はダメでfromstr 0.10にする。

***bigfloatの型変換 [#k4d12c0b]
-文字列から
 fromstr string ?base?
-文字列に
 tostr bigfloat
-数値に
 todouble bigfloat
-型を調べる
 isInt bighoge
 isFloat bighoge

***色々な演算 [#e8fe763f]
-基本的な四則演算とか
 add x y 
 sub x y 
 mul x y 
 div x y 
 mod x y 
 abs x 
 opp x  ;#符号の反転
 pow x n ;#nはBigIntで無ければならない。(Bigfloatは不可)

-比較
 iszero x
 equal x y 
 compare x y ;#x==yの時0、x>yの時1、x<yの時-1。BigIntとBigFloatは比較不可

-数学関数もつかえる
 sqrt x 
 log x 
 exp x 
 cos x 
 sin x 
 tan x 
 cotan x 
 acos x 
 asin x 
 atan x 
 cosh x 
 sinh x 
 tanh x 
 pi n            ;#n桁の円周率
 rad2deg radians ;#ラジアン->度数
 deg2rad degrees ;#度数->ラジアン

-丸め
 round x 
 ceil x 
 floor x 

あと、この辺の関数は全部グローバルな空間に定義してるので、コンフリクトしないように注意しないといけないです。マニュアルに一応の解決方法が書いてありますけど、できればbignumと名前空間を一緒にするとか統一してほしかった・・・。

----
[[CategoryTclTk]]

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