BC(1) | FreeBSD General Commands Manual | BC(1) |
名称
bc — 任意精度の演算言語とカルキュレイタ (計算機)書式
bc | [ -chlqv][ -e expression][ file ...] |
解説
bc は、C に似ている言語のための会話型プロセッサですが、制限のない精度演算を提供しています。コマンドラインと与えられたファイルから任意の式を入力して、次に、標準入力を読み込みます。利用可能なオプションは、次の通りです:
- -c
- bc は、 dc(1) のためのプリプロセッサで、 -c (コンパイルのみ) オプションが提示されないなら、実際に自動的に呼び出されます。この場合、実行している dc(1) プロセスによって解釈される代わりに、生成される dc(1) の命令は、標準出力に送られます。
- -e expression, - -expression expression
- expression を評価します。複数の -e オプションが指定されるなら、それらは、改行によって区切られたように、与えられた順序で処理されます。
- -h, - -help
- 使用法の情報を印刷 (表示) します。
- -l, - -mathlib
- 任意精度の数学ライブラリの仕様を許可します。ライブラリ中の定義は、コマンドラインの式で利用可能です。
- -v, - -version
- バージョン情報を印刷 (表示) します。
bc プログラムのための構文は、次の通りです: ‘L’は、文字 a-z を意味します。‘E’は、式を意味します。‘S’は、文を意味します。移植性のない拡張として、単一の文字の名前に加えて長い名前を使用することができます。長い名前は、小文字で始まりいくつかの小文字と数字が続くシーケンスです。下線文字 (‘_’) は、文字とみなされます。
コメント
は、/* と */ に囲まれます は、# と次の改行に囲まれます
改行は、それ自体、移植性のない拡張である、行コメントの一部ではありません。
名前
単純な変数: L 配列の要素: L [ E ] 単語 `ibase', `obase' と `scale' 単語 `last' または単一のドット
他のオペランド
オプションの符号と小数点がある任意長の数 ( E ) sqrt ( E ) length ( E ) 有効桁数 scale ( E ) 小数点以下の桁数 L ( E , ... , E )
シーケンス‘\<newline><whitespace>’は、数値内で無視されます。
演算子
次の演算と論理演算子を使用できます。演算子の意味は、C 言語と同じです。それらは、優先順序が減少する順序でリストされています。同じグループの演算子は、同じ優先順序があります。
演算子 | 結合規則 | 説明 |
++ -- | なし | インクリメント, デクリメント |
- | なし | 単項マイナス |
^ | 右 | べき乗 |
* / % | 左 | 乗算, 除算, 剰余 |
+ - | 左 | プラス, マイナス |
= += -= *= /= %= ^= | 右 | 代入 |
== <= >= != < > | なし | 関係演算子 |
! | なし | 論理 not |
&& | 左 | 論理 and |
|| | 左 | 論理 or |
次の項目に注意してください:
- 関係演算子は、すべての式に出現することができます。 IEEE Std 1003.2 (“POSIX.2”) 規格は、‘if’, ‘while’または‘for’文の条件式でのみ許可されています。
- 関係演算子は、代入演算子より低い優先順序があります。これは、式 a = b < c がたぶんプログラマが意図したことでない、 (a = b) < c として解釈されるという、結果をもたらします。
- C 言語と異なって、関係演算子は、すべて同じ優先順序であり、非結合です。式 a < b < c は、構文エラーとなります。
- 論理演算子 (!, && and ||) は、移植性のない拡張です。
- 論理 not (!) 演算子は、C 言語の同じ演算子よりはるかに低い優先順序となります。これは、式 !a < b が !(a < b) として解釈されるという、結果をもたらします。慎重なプログラマは、論理演算子を含む式を書くとき、括弧を使用します。
文
E { S ; ... ; S } if ( E ) S if ( E ) S else S while ( E ) S for ( E ; E ; E ) S null 文 break continue quit 二重引用符で囲まれた文字列 print E ,..., E
文字列は、二重引用符を除いて、どんな文字でも含むことができます。 else 分岐があるif 文は、移植性がない拡張です。 for 文の 3 つの E のすべてが、空であってもかまいません。これは、移植性がない拡張です。 continue と print 文も、移植性がない拡張です。
print 文は、コンマで区切られた式のリストを取ります。リスト中の各式は、評価され、計算された値は、印刷され、変数 `last' に代入します。後続する改行は、印刷されません。また、式は、二重引用符で囲まれた文字列でも使用できます。これらの文字列の中では、次のエスケープシーケンスが、使用されます: ベルのための (警報) ‘\a’、バックスペースのための‘\b’、フォームフィードのための‘\f’、改行のための‘\n’、キャリッジリターンのための‘\r’、タブのための‘\t’、二重引用符のための‘\q’、バックスラッシュのための‘\\’です。バックスラッシュに続くその他の文字は、無視されます。文字列は、`last' に代入されません。
関数定義
define L ( L ,..., L ) { auto L, ... , L S; ... S return ( E ) }
移植性のない拡張として、define 文の左中括弧は、次の行に現れてもかまいません。また、return 文は、次の形式で出現できます:
return return () return E
最初の 2 は、文“return 0”と同等です。最後の形式は、移植性のない拡張です。 return 文を指定しないことは、“return (0)”と書くのと同等です。
コマンドラインに -l フラグを指定することによってロードされる、数学ライブラリで利用可能な関数は、次の通りです。
- s(x)
- サイン
- c(x)
- コサイン
- e(x)
- 指数関数
- l(x)
- 自然対数
- a(x)
- 逆正接関数
- j(n,x)
- Bessel function ベッセル関数
すべての関数の引数は、値渡し (pass by value) です。
式である文の値は、主な演算子が代入でないなら、印刷されます。印刷された値は、特別の変数 `last' に代入されます。これは、移植性のない拡張です。単一のドットは、`last' と同義語として使用されます。セミコロンまたは改行のいずれも、文を切り離します。 scale への代入は、 dc(1) の方法で算術演算に保持されるけた数に影響を与えます。 ibase または obase への代入は、それぞれ入力と出力の数値の基数を設定します。
同じ文字は、同時に、配列、関数と単純変数として使用されます。すべての変数は、プログラムにグローバルです。 `auto' 変数は、関数呼び出しの間にプッシュダウンされ (押し下げられ) ます。関数引数として配列を使用するか、またはそれらを自動的変数と定義するとき、空の角括弧は、配列名に続かなければなりません。
例えば
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 } }
は、指数関数の近似値を計算するための関数を定義し、
for(i=1; i<=10; i++) e(i)
は、最初の 10 の整数の指数関数の近似値を印刷します。
$ bc -l -e 'scale = 500; 2 * a(2^10000)' -e quit
は、円周率 (pi) の近似値を印刷します。
関連ファイル
- /usr/share/misc/bc.library
- 数学ライブラリは、 -l オプションがコマンドラインに指定されるとき、読み込まれます。
規格
bc ユーティリティは、 IEEE Std 1003.1-2008 (“POSIX.1”) 仕様に準拠しています。フラグ[ -ce]は、その仕様の拡張です。
歴史
bc コマンドは、 Version 6 AT&T UNIX ではじめて登場しました。 bc コマンドの完全な書き直しは、 OpenBSD 3.5 ではじめて登場しました。作者
bc コマンドのオリジナルのバージョンは、 と によって書かれました。 bc ユーティリティの現在のバージョンは、 によって書かれました。バグ
‘quit
’は、実行時ではなく、読み込まれるとき、解釈されます。
bc ユーティリティの GNU バージョンにある、いくつかの移植性のない拡張は、 (まだ) 実装されていません。
January 22, 2010 | FreeBSD |