bcとは
UNIX系で計算を行うときに使う計算言語です。
NAME
bc - An arbitrary precision calculator language
"An arbitrary precision calculator language"を和訳すると「任意精度計算言語」です。
Macのターミナルで`bc`と打ってEnterを押すと、ターミナル上で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'.
bcは特に指定がなければ対話型モードで実行されます。
例えば、
1+2
と入力してEnterを押すと
3
※scale=5
とすることで小数を5桁まで表示するように設定しています。(デフォルトではscale=0
)
オプション
bc
は起動時にオプションを付けることができます。以下はman bc
でオプションを確認した結果です。
OPTIONS
-h, --help
Print the usage and exit.
-i, --interactive
Force interactive mode.
-l, --mathlib
Define the standard math library.
-w, --warn
Give warnings for extensions to POSIX bc.
-s, --standard
Process exactly the POSIX bc language.
-q, --quiet
Do not print the normal GNU bc welcome.
-v, --version
Print the version number and copyright and quit.
英語を全部訳すのは面倒なのでよく使うやつだけ見てみましょう。
-q, --quiet
実行時に最初に出てくるバージョン情報やcopyrightを非表示にしてくれます。bc="bc -q"
みたいなエイリアスを登録してもいいぐらいマストなオプションだと思います。
-l, --mathlib
bc -l
で実行すると、三角関数(sin,cos,arctan)、自然対数(log)、指数関数(exp())が使えるようになります。
-l
をつけた場合、scale
が自動で20に設定されます。(=小数を20桁表示する)
c(0)+1 #c(0) = cos(0)
2.00000000000000000000
s(0) #sin(0)
0
l(1) #log(1)
0
l(2.71828182845904523536) #log(e)
.99999999999999999999
基数計算
ibase, obaseというパラメータをいじると任意の基数での入力・出力が可能になります。
例えば、ibase=10, obase=16
とすると、10進数で入力した計算式を16進数で結果出力します。 (デフォルトではどちらも10なので10進数で表示される)
ibase=10
obase=16
10+5
F
応用:非対話モードで実行
以下のようにリダイレクション<<
を使って非対話モードでbcを実行することができます。
$ bc <<EOF
> scale=3
> 4/3
> EOF
1.333
上記では、EOF
が入力されるまで式の入力を受け付けます。
あるいは、パイプ記号|
を使って以下のように書き換えることもできます。
$ echo "scale=3; 4/3;" | bc
1.333
円周率を任意の桁まで求める
$ bc -lq
scale = 10;
(12*a(1/49)+32*a(1/57)-5*a(1/239)+12*a(1/110443))*4
3.1415926420
a()
はtanの逆関数arctanのことです。
scale
で指定した桁数分の円周率を表示します。
参考