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

使ってみる

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の型変換

  • 文字列から
    fromstr string ?base?
  • 文字列に
    tostr bigfloat
  • 数値に
    todouble bigfloat
  • 型を調べる
    isInt bighoge
    isFloat bighoge

色々な演算

  • 基本的な四則演算とか
    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|Freeze|Diff|Backup|Upload|Copy|Rename|
Last-modified: 2005-05-10 (Tue) 00:00:00 (1199d)
HTML convert time: 0.053 sec.