メインコンテンツに移動

Calc

任意精度計算機calcの使い方を説明します.作者が,どうやら説明する気がないみたいですので.

いや,こんなスーパーウルトラ超高性能スクリプト計算機,他には無いだろう?!

calc を起動して利用

これ使えば?べんりだし. あ?簡単に言うと 2+3[RETURN]で 5が表示されます.a=1とかしてa+2とかもできます.他にもまあ, 関数使ったりとかで矢印キーでポコポコ計算します.電卓ソフト?関数電卓?いや,あり得ねえだろう.式打ったら計算できて矢印キーで訂正できたほうが楽に決まっている

% calc
C-style arbitrary precision calculator (version 2.14.1.2)
Calc is open software. For license details type:  help copyright
[Type "exit" to exit, or "help" for help.]
; 2+3
     5
; exit

A=2+3 とか代入すると変数が使える. sinとかcosとか数学関数も使える. ユーザー関数を定義したりできる. 2進数とかも得意. ちなみに任意精度計算なので, 計算精度は任意に高い. 助かりたければhelpと入力すれば良い.

calc をスクリプトで利用

スクリプトの最初はこんな感じ:

#!/usr/local/bin/calc -df
#  倍精度の15桁では足りないので, 100桁で計算
config("display",100);
config("epsilon",1e-100);
#  試しに, pi を計算してみる
pi=4*atan2(1,1);
# 3.14159265358979323846264338327950288419716939937510
# 582097494459230781640628620899862803482534211706 あってるわー
# では exp[i pi]=-1 を確認してみよう. 複素数も使えるしな
z=pi*1i;
exp(z);

関数を定義

Joukowski変換と, その逆関数を定義してみよう.

define jf(z) {
   if (abs(z)<=1) abort "Joukowski: Domain error"; # 単位円の外側だけで行きます
   return z+1/z;
}
define jf_i(zeta) {
    local az=abs(zeta)^2-4;
    local s=(az+sqrt(az^2+16*im(zeta)^2))/2;
    local r=(sqrt(s)+sqrt(s+4))/2;
    local th=atan2(im(zeta)/sqrt(s),re(zeta)/sqrt(s+4));
    return r*exp(1i*th);
}
#テスト
z=0.5+1i*1;
zeta=jf(z);
ret=jf_i(zeta);
printf("z= %f    returned to %f\n",z,ret);

ま,こんな感じですね. 実行してみると

z= 0.5+1i    returned to 0.500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000+1.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000i

なるほど精密ですね.

線形代数を計算

行列も使えるだべよ.

ビルド

ビルドするには, まずreadlineをインストールします.でここから

cd x86_64
tar zxf ../calc-2.14.1.2.tar.bz2
cd calc-2.14.1.2
make
fswatch -x /usr/local/ >  files.log &
sudo make install
kill %1
fswatch_analyze.sh -c _binary files.log