bc は任意精度の数値を扱うことができる計算言語です。
LinuxMLD 7 には 伝統的な bc を拡張した GNU bc Ver.1.06 が標準インストールされています。 MLD 6 には Disc4 に Ver.1.06 が収録されていますので 追加インストールしてください。 MLD 5 では Ver.1.05a が標準インストールされます。
作者: Philip A. Nelson さん他
ホームページ:
http://www.gnu.org/software/bc/bc.html
バージョン: 1.06 (2000/09/12)
ライセンス: GPL
付属ドキュメント README を読む
bc の歴史は古く、Unix Version 7 (1978) のころ、 ベル研の Lorinda Cherry さんが dc (逆ポーランド形式の任意精度計算言語) のフロントエンドとして書いたのが最初です。 GNU bc には dc も含まれていますが、 独立した別々のプログラムになっています。
対話的に使うには、ターミナルから bc で起動します。
$ bc bc 1.06 Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'.
プロンプトは何も出てきません。起動時にオプション -q
を付けると、上記のメッセージも出てきません
(unix の伝統的なプログラムは概ね寡黙です)。
終了は quit と入力するか、または Ctrl-D
(Ctrl キーを押しながら d
を打つ) です。
1 + 2 ← 入力 3 ← 出力
この例では読みやすいように 演算子の前後を空白であけていますがくっつけても構いません。
1234567890123456789 * 1234567890123456789 ← 入力 1524157875323883675019051998750190521 ← 出力
こんなに桁数が多くても計算できます。すごいでしょ。
では小数点以下の桁はどうでしょうか。
1/7 0
これを見て、bc は整数しか計算できないと思うのは早計です。
小数点以下の有効数字は特別な変数 scale
で指定します。
起動時のデフォルトは 0 になっているのです。
scale=40 1/7 .1428571428571428571428571428571428571428
その他の特別な変数としては、入出力の基数を指定する
ibase
、obase
があります。
デフォルトはどちらも 10 です。
ibase=16 BC 188
ibase
は 2 から 16 までが指定可能で、数の入力には
0-9 の数字と A-F の文字 (大文字) を使います。
元の十進数の入力に戻すには、上の例ならば
ibase=A
とすることに注意してください。
obase
は 16 よりも大きく指定もできます。
出力がどうなるか、やってみてください。
bc は C に似た言語ですから次のようなこともできます。
for (i=1;i<=100;i++) a+=i; a 5050
変数名は、1文字目が英字で始まる、英数字とアンダスコア (_
)
の列です。英字は小文字だけが使えます。
2 文字以上の名前が使えるのは GNU の拡張です。
最後に計算した値は .
(ピリオド) または last
で参照できます。これも GNU の拡張です。
起動時のオプションに -l
(小文字の L
) を
付けるとデフォルトの scale が 20 に設定され、
さらに次の数学ライブラリが使えるようになります。
s (x) sin (x の単位はラジアン) c (x) cos (x の単位はラジアン) a (x) atan (返り値の単位はラジアン) l (x) log (自然対数) e (x) exp (指数関数) j (n,x) 整数 n 次のベッセル関数
数学ライブラリの関数名が一文字なのは、伝統的な bc で変数名が英小文字一文字だった名残でしょう。
define sin(x) {return s(x);}のようにすれば「普通」の数学関数名が使えます。 こうした定義を記述したファイルを用意して、環境変数 BC_ENV_ARGS に設定しておけば bc の起動の都度読み込まれます。
.bc
というファイルだとして
$ export BC_ENV_ARGS="-l ${HOME}/.bc"のようにすればよいでしょう (この例ではオプション
-l
を同時に指定しています)。
その他、詳しくは bc のマニュアルページを参照してください。
C に似ているとは言っても、違う点も多い (演算子の優先順位も異なる。特に代入演算子と ! に注意) です。その為か、「もっと C に似た」計算プログラムがいくつか作られています。 下の「その他のアプリケーション」を参照してください。
LinuxMLD 7 および MLD 5 では標準でインストールされています。
MLD 6 では Disc4 から bc-1.06-5.i386.rpm を追加インストールします。
rpm コマンドでインストールするには、Disc4 を
マウントして、
# rpm -i /mnt/cdrom/RPMS/bc-1.06-5.i386.rpm
とします。
Gnome の GUI でインストールすることもできます。
Web 上の参考になるページを御紹介します。
Number Theory 向きの CALC も公開されています。
GTK+ の C++ ラッパーである gtkmm を使った bc の GUI です。
その他のアプリケーション
bc の構文を C にしたようなアプリケーションです。 複素数や多次元の配列 (行列) も扱えます。
任意精度というだけでなく、有理数演算ができるパッケージ (ライブラリとアプリケーション) です。
任意精度ではないし、言語機能もまだない (変数は使えます) ですが、 C とほぼ同じに式を入力して計算できます。 (→ 解説ページ)
数式で計算、結果をいろいろな基数で同時表示します。 Tcl/Tk で書かれています。
わずか 50 行の perl で書かれた (というか、eval してるだけ) コマンドライン計算器。 物理・天文関係の定数があらかじめ定義されているのが特徴で 「自分用の道具の作り方」の見本のようなプログラムです。
その他、 www.ibiblio.org/pub/Linux/apps/math/calc/ にいろいろあります。
引数に式を書いて計算 (任意精度ではない) できるので シェルスクリプトで expr と同じように使えます。
ボタンをクリックするタイプの電卓は GRPN や Calcoo のページを参照してください。