構文
bc [-c] [-l]
[file ...]
説明
bc は、C に類似した言語の対話型のプロセッサですが、
精度を限定しない演算が可能です。 任意のファイルから入力すると、標準入力を読み込みます。
オプション
bc は次のコマンド行オプションを認識します。
| -c | | bc コンパイルのみ実行します。 bc は、実際には dc のプリプロセッサであり、 dc を自動的に実行します
( dc(1) を参照)。 -c を指定すると、 dc が実行されずに dc 入力が標準出力に送られます。 |
| -l | | 任意の精度の数値演算ライブラリが定義されます。 副作用として、スケールファクタが設定されます。 |
プログラム構文
| L | | a から z までの 1 文字 |
| E | | 式 |
| S | | 文 |
| R | | 関係式 |
名前
名前には次のようなものがあります。
単純変数: L
配列要素: L [ E ]
ワード ibase, obase, scale
スタック: L
その他のオペランド
その他のオペランドには次のようなものがあります。
| オプションの符号および小数点がある任意の長さの数 |
| | | |
| ( E ) | | |
| sqrt ( E ) | | |
| length ( E ) | | 有効桁数 |
| scale ( E ) | | 小数点以下の桁数 |
| L ( E, ... , E ) | | 引用符 (") で囲った ASCII
文字の文字列 |
算術演算子
次の算術演算子の結果は E になります。
| + - * / %
^ | | (% は余り (mod ではない、下記を参照) です。 ^ はべき乗です) |
| ++ -- | | (接頭字および添字。名前に適用されます) |
| = += -= *= /= %= ^= |
| | | |
関係演算子
次の関係演算子を E op E として使用すると、結果は R になります。
文
E
{ S ; ... ; S }
if ( R ) S
while ( R ) S
for ( E ; R ; E ) S
null statement
break
quit
関数定義
define L ( L ,..., L ) {
auto L, ... , L
S; ... S
return ( E )
}
-l 数学ライブラリにおける関数
-l 数学ライブラリの関数には以下のものがあります。
s(x) sin
c(x) cos
e(x) exp
l(x) log
a(x) arctan
j(n,x) Bessel関数
関数の引き数はすべて値で渡します。 三角関数の角度はラジアンで指定します。ただし、2π ラジアンは 360 度です。
式である文の値は、 主な演算子が代入演算子でない限り出力されます。
演算子は文字列には定義されていませんが、 式の結果が出力される コンテキストに文字列が現れた場合、出力されます。
セミコロンか改行で文を区切ることができます。 scale への代入により、 dc(1) の形式で
算術演算に保持される桁数に影響がでます。 ibase または obase への代入は、 dc(1) による定義と同じ形式で それぞれ入力と出力の数の基数を設定します。
同じ英字を同時に配列、関数、および単純変数として使用することができます。
変数はすべてプログラムに対してグローバルです。 "自動"変数は関数呼び出し時にプッシュダウンされます。
配列を関数の引き数として定義するか、 自動変数として定義する際は、 空の大かっこを配列名に続けなければなりません。
% 演算子は整数ではなく、 現在のスケールでの余りを計算します。
したがって、スケール 1 では 7 % 3 は 1 ではなく.1(10 分の 1) です。
これはスケール 1 のとき、 7 / 3 は 2.3 となり、余りは.1 であるためです。
例
指数関数の 近似値を計算する関数を定義します。
scale = 20
define e(x){
auto a, b, c, i, s
a = 1
b = 1
s = 1
for(i=1; 1==1; i++){
a = a*x
b = b*i
c = a/b
if(c == 0) return(s)
s = s+c
}
}
1 から 10 までの整数の 指数関数の近似値を出力します。
for(i=1; i<=10; i++) e(i)
警告
現在 && (AND) や || (OR) に相当するものはありません。
for 文には式が 3 つ必要です。
quit は実行時ではなく、読み込み時に解釈されます。
bc のパーサは、入力エラーへの対応が不十分です。
2+2 のような単純な式で回復させることができます。
代入演算子 =+ =- =* =/ =% =^ は現在使用されていません。
これらの演算子があると構文エラーが発生します。ただし、 =- は = の後ろに単項マイナスが続くものとして解釈されるため、エラーにはなりません。
配列全体や関数も、関数パラメータとして渡すことはできません。
ファイル
| /usr/bin/dc | | 電卓実行可能プログラム |
| /usr/lib/lib.b | | 数学ライブラリ |
参照
bs(1), dc(1).
『Number Processing Users Guide』 の bc チュートリアル