bc コマンド
目的
任意精度の算術計算言語のインタープリターを提供します。
構文
説明
bc コマンドは、任意精度の算術計算を提供する対話式処理です。 bc コマンドは、まず File パラメーターで指定された入力ファイルを読み取ってから、標準入力を読み取ります。 入力ファイルは、bc コマンドで読み取りかつ実行できるコマンド、ステートメント、または関数定義のシーケンスが入ったテキスト・ファイルでなければなりません。
bc コマンドは、 dc コマンドのプリプロセッサーです。 -c (コンパイルのみ) フラグが指定されていない限り、 dc コマンドを自動的に呼び出します。 -c フラグを指定すると、bc コマンドからの出力は標準出力に送られます。
bc コマンドを使用すると、演算の入出力基数を 10 進、8 進、または 16 進で指定できます。 デフォルトは 10 進です。 また、このコマンドは 10 進小数点表記のスケーリングを提供します。 bc コマンドは常に以下を使用します。 (ピリオド) は、現行ロケールの一部として指定された小数点文字に関係なく、基数点を表します。
bc コマンドの構文は、C 言語の構文に似ています。 bc コマンドを使うと、ibase キーワードを入力基数に割り当て、obase キーワードを出力基数に割り当てることによって、基数どうしを変換できます。 ibase キーワードの値には、2 から 16 の範囲が有効です。 obase キーワードの範囲は、2 から、 /usr/include/sys/limits.h ファイルに定義された BC_BASE_MAX 値によって設定された制限までです。 ibase と obase の設定値に関係なく、bc コマンドは A から F までの文字を 16 進値の 10 から 15 として認識します。
bc コマンドの出力は、読み取られるプログラムによって制御されます。 出力は、割り当てを除くすべての実行式の値が入っている 1 行または複数行からなっています。 出力の基数と精度は、obase および scale キーワードの値によって制御されます。
bc コマンドがソース・ファイルの情報をどのように処理するかについては、以下のセクションに記載されています。
文法
以下の文法では、 bc プログラムの構文について説明します。program有効なプログラムを表します。
%token EOF NEWLINE STRING LETTER NUMBER
%token MUL_OP
/* '*', '/', '%' */
%token ASSIGN_OP
/* '=', '+=', '-=', '*=', '/=', '%=', '^=' */
%token REL_OP
/* '==', '<=', '>=', '!=', '<', '>' */
%token INCR_DECR
/* '++', '--' */
%token Define Break Quit Length
/* 'define', 'break', 'quit', 'length' */
%token Return For If While Sqrt
/* 'return', 'for', 'if', 'while', 'sqrt' */
%token Scale Ibase Obase Auto
/* 'scale', 'ibase', 'obase', 'auto' */
%start program
%%
program : EOF
| input_item program
;
input_item : semicolon_list NEWLINE
| function
;
semicolon_list : /* empty */
| statement
| semicolon_list ';' statement
| semicolon_list ';'
;
statement_list : /* empty */
| statement
| statement_list NEWLINE
| statement_list NEWLINE statement
| statement_list ';'
| statement_list ';' statement
;
statement : expression
| STRING
| Break
| Quit
| Return
| Return '(' return_expression ')'
| For '(' expression ';'
relational_expression ';'
expression ')' statement
| If '(' relational_expression ')' statement
| While '(' relational_expression ')' statement
| '{' statement_list '}'
; function : Define LETTER '(' opt_parameter_list ')'
'{' NEWLINE opt_auto_define_list
statement_list '}'
;
opt_parameter_list:/* empty */
| parameter_list
;
parameter_list : LETTER
| define_list ',' LETTER
;
opt_auto_define_list
: /* empty */
| Auto define_list NEWLINE
| Auto define_list ';'
;
define_list : LETTER
| LETTER '[' ']'
| define_list ',' LETTER
| define_list ',' LETTER '[' ']'
;
opt_argument_list : /* empty */
| argument_list
;
argument_list : expression
| argument_list ',' expression
;
relational_expression
: expression
| expression REL_OP expression
;
return_expression : /* empty */
| expression
;
expression : named_expression
| NUMBER
| '(' expression ')'
| LETTER '(' opt_argument_list ')'
| '-' expression
| expression '+' expression
| expression '-' expression
| expression MUL_OP expression
| expression '^' expression
| INCR_DECR named_expression
| named_expression INCR_DECR
| named_expression ASSIGN_OP expression
| Length '(' expression ')'
| Sqrt '(' expression ')'
| Scale '(' expression ')'
;
named_expression : LETTER
| LETTER '[' expression ']'
| Scale
| Ibase
| Obase
;字句規則
bc コマンドには、次の字句規則が適用されます。
- bc コマンドは、特定のポイントから始まる、可能な最長の字句トークンまたは区切り文字を認識します。
- コメントは/* (スラッシュ、アスタリスク) で始まり、*/ (アスタリスク、スラッシュ) で終わります。 コメントには、字句トークンを区切る以外の効果はありません。
- 改行文字は NEWLINE トークンとして認識されます。
- STRING トークンは、ストリング定数を表します。 文字列の前後は " (二重引用符) で囲まれています。 引用符で囲まれたすべての文字は、字句ごとに取り出されます。 " (二重引用符) を含む文字列を指定する方法はありません。 各文字列の長さは、BC_STRING_MAX の値で設定された最大バイト数に制限されます。この値は、limits.h ファイル内で定義されます。
- ブランク文字は、 STRING トークンに現れる場合、または字句トークンを区切るために使用される場合を除き、効果はありません。
- ¥ n (円記号、改行) 文字:
- は字句トークンを区切ります。
- は、 STRING トークン内の文字シーケンスとして解釈されます。
- は、複数行の NUMBER トークンの一部の場合は無視されます。
- NUMBER トークンは以下の文法を使用します。
NUMBER トークンの値は、ibase 内部レジスター値で指定された基数の数値として解釈されます。NUMBER : integer | '.' integer | integer '.' |integer '.' integer ; integer : digit | integer digit ; digit : 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F ; - NUMBER トークンの値は、 ibase 内部レジスターの値によって指定された基数の数字として解釈されます。 各数字は上記の順序で 0 から 15 までの値を持ち、ピリオド文字は小数点を表します。 トークン内に ibase レジスターの値以上の数字があると、動作は不定になります。 ただし、ibase および obase レジスターそのものに 1 桁の値を割り当てる場合は例外です。
- 以下のキーワードは、トークンとして認識されます。
auto for length return sqrt break ibase obase scale while define if quit - キーワード内を除き、以下の文字はいずれも LETTER トークンと見なされます。
a b c d e f g h i j k l m n o p q r s t u v w x y z - 以下の 1 文字と 2 文字のシーケンスは、 ASSIGN_OP トークンとして認識されます。
- = (等号)
- + = (正符号、等号)
- -= (マイナス、等号)
- * = (アスタリスク、等号)
- /= (スラッシュ、等号)
- % = (パーセント、等号)
- ^ = (脱字記号、等号)
- 以下の単一文字は、 MUL_OP トークンとして認識されます。
- * (アスタリスク)
- /(スラッシュ)
- % (パーセント)
- 以下の 1 文字と 2 文字のシーケンスは、 REL_OP トークンとして認識されます。
- == (二重等号)
- < = (より小、等号)
- > = (より大、等号)
- ! = (感嘆符、等符号)
- < (より小)
- > (より大)
- 以下の 2 文字のシーケンスは、 INCR_DECR トークンとして認識されます。
- + + (二重正符号)
- -- (二重ハイフン)
- 以下の単一文字はトークンとして認識されます。 トークンには文字と同じ名前が付いています。
- <newline>
- ( (左括弧)
- ) (右括弧)
- , (コンマ)
- + (正符号)
- - (負符号)
- ; (セミコロン)
- [ (左大括弧)
- ] (右大括弧)
- ^ (脱字記号)
- { (左中括弧)
- } (右中括弧)
- 入力の終わりに達すると、 EOF トークンが戻されます。
ID と演算子
bc コマンドでは、通常の ID、アレイ ID、 およびファンクション ID という 3 種類の ID が認識されます。 3 種類とも、単一の小文字からなっています。 アレイ ID の後ろには [ ] (左右の大括弧) が付いています。 引数内または自動リスト内を除き、配列添え字が必要です。 アレイは 1 次元であり、BC_DIM_MAX の値で指定された量まで入れることができます。索引は 0 から始まります。 索引付けは 0 から始まります。 したがって、配列のインデックスは0からBC_DIM_MAX -11で定義される値までとなる。 添え字は整数に切り捨てられます。 関数ファンクション ID の後ろには ( ) (左右の括弧) を付け、場合によっては前後に引数を付けなければなりません。 3 種類の ID は競合しません。
次の表に示す bc プログラム内の演算子は、すべての演算子の優先順位と結合順序に関するルールをまとめたものです。 同じ行の演算子は同じ優先順位を持っています。 各行は降順になっています。
| オペレーター | 結合順序 |
|---|---|
| ++, - - | 適用外 |
| 単項 - | 適用外 |
| ^ | 右から左へ |
| *, /, % | 左から右へ |
| +、バイナリー- | 左から右へ |
| =, +=, -=, *=, /=, ^= | 右から左へ |
| ==, <=, >=, !=, <, > | なし |
個々の式または名前付き式にはスケール があります。スケールとは、式の小数部分として保持される 10 進数の 桁数のことです。
名前付き式 とは、値が格納される場所のことです。 名前付き式は、代入式の左辺に有効です。 名前付き式の値は、指定された場所に保管値です。 単純な ID と配列エレメントは名前付き式なので、初期値は 0 で初期スケールは 0 です。
内部レジスター scale、ibase、および obase は、いずれも名前付き式です。 これらのレジスターの 1 つの名前で構成される式の位取りは 0 です。 これらのレジスターのいずれかに割り当てられた値は、整数に切り捨てられます。 scale レジスターには、式のスケールの計算に使用するグローバル値が入っています (以下の説明を参照してください)。 scale レジスターの値は 0 < = scale < = {BC_SCALE_MAX} に制限され、デフォルト値は 0 です。 ibase レジスターと obase レジスターは、それぞれ入力と出力の数値基数です。 ibase の値は、2 < = ibase < = 16 に制限されます。 obase の値は、2 < = obase = {BC_BASE_MAX} に制限されます。
ibase または obase レジスターのいずれかに、 「字句規則」 で説明されているリストから 1 桁の値が割り当てられると、その値は 16 進数と見なされます。 次に例を示します。
ibase=A この式は、ibase レジスターの現行値に関係なく、基数 10 に設定されます。 それ以外の場合、ibase レジスターの値以上の数字が入力に含まれていると、動作が不定になります。 ibase および obase レジスターの初期値は、どちらも 10 です。
内部計算では、入出力の基数に関係なく、10 進であるものとして、指定された桁の 10 進数が得られます。 以下のように、正確な結果が得られない場合があります。
scale=0; 3.2/1
この場合、bc コマンドは結果を切り捨てます。
obase レジスターの数値はすべて、次に示すルールに従って出力されます。
- 値が 0 より小さい場合は、-(ハイフン) を出力します。
- 数値に応じて、以下のいずれかを出力します。
- 数値の絶対値が 1 以上の場合は、値の整数部分を obase レジスターに適した一連の数字として出力します (ステップ 3 で説明します)。 次に、最上位のゼロ以外の桁が出力され、それに続いて下位の桁が出力されます。
- 数値の絶対値が 1 より小さく、0 より大きく、数値のスケールが 0 より大きい場合、文字 0 が出力されるかどうかは指定されません。
- 数値が 0 の場合、文字 0 を出力します。
- 値のスケールが 0 より大きい場合は、a を出力します。 (ピリオド) の後に、以下の obase レジスター値に適した一連の数字が続きます。 各桁は値の小数部の最上位部をあらわし、
s は出力される値のスケールを表します。
- obase の値が 10 の場合は、 s 桁が出力されます。
- obase の値が 10 より大きい場合は、 s以下の数値が出力されます。
- obase の値が 10 より小さい場合は、 s以上の数値が出力されます。
- obase の値が 10 以外の場合は、 10sの精度を表すのに必要な桁数でなければなりません。
- obase の値が 2 から 16 の場合、有効な数字は単一文字の最初の obase です。
この場合、それぞれ値 0 から 15 までを表します。0 1 2 3 4 5 6 7 8 9 A B C D E F - 16 より大きい基数の場合、各桁は別個の複数桁の 10 進数として書き込まれます。 最上位小数桁を除き、各桁の前にはスペース文字が 1 個ずつ付いています。 基数が 17 から 100 までの場合、bc コマンドは 2 桁の 10 進数を書き込み、基数が 101 から 1000 までの場合、bc コマンドは 3 桁の 10 進数を書き込みます。 例えば、基数が 25 の 10 進数 1024 は、以下のように書き込まれます。
01 15 24基数が 125 であれば、以下のように書き込まれます。
008 024
式
数値定数は式です。 スケールは、定数を表す入力内の小数点に続く桁数、または小数点が表示されない場合は 0 です。
シーケンス (expression) は、expression と同じ値とスケールを持つ式です。 小括弧を使うと、通常の優先順位を変更できます。
単項演算子と 2 項演算子には、次のセマンティクスがあります。
| 項目 | 説明 |
|---|---|
| -expression | 結果は、式に負符号を付けた値です。 結果のスケールは式のスケールです。 単項の増分演算子と減分演算子は、演算対象の名前付き式のスケールを変更しません。 結果のスケールは、その名前付き式のスケールです。 |
| + +名前付き式 | 指定された式は 1 ずつ増分されます。 結果は、増分後の名前付き式の値になります。 |
| --named_expression | 指定された式は 1 ずつ減分されます。 結果は、減分後の名前付き式の値になります。 |
| 名前付き式+ + | 指定された式は 1 ずつ増分されます。 結果は、増分前の名前付き式の値になります。 |
| named_expression-- | 指定された式は 1 ずつ減分されます。 結果は、減分前の名前付き式の値になります。 |
指数演算子 ^ (脱字記号) は、右から左にバインドします。
| 項目 | 説明 |
|---|---|
| 式 ^式 | 結果は、第 1 の expression を第 2 の expression 乗じた値です。 第 2 の式が整数でなければ、動作は不定になります。 指定する場合は、a左側の式のスケールです。b右側の式の絶対値です。結果の位取りは以下のようになります。 |
乗算演算子 * (アスタリスク)、/ (スラッシュ)、および % (パーセント) は、左から右にバインドします。
| 項目 | 説明 |
|---|---|
| expression * 式 | 結果は、2 つの式の積になります。 指定する場合は、aおよびb2 つの式のスケールです。結果のスケールは以下のようになります。 |
| expression / 式 | 結果は、2 つの式の商になります。 結果のスケールは scale の値です。 |
| expression % 式 | 式のaおよびb,a % bこれは、以下のステップと同等に評価されます。
|
加算演算子 + (正符号) と - (負符号) は、左から右にバインドします。
| 項目 | 説明 |
|---|---|
| expression + 式 | 結果は、2 つの式の和です。 結果のスケールは、式のスケールの最大値です。 |
| expression - 式 | 結果は、2 つの式の差です。 結果のスケールは、式のスケールの最大値です。 |
次に示す代入演算子は、右から左にバインドします。
- = (等号)
- += (正符号、等号)
- -= (負符号、等号)
- *= (アスタリスク、等号)
- /= (スラッシュ、等号)
- %= (パーセント、等号)
- ^= (脱字記号、等号)
| 項目 | 説明 |
|---|---|
| named-expression = 式 | この式では、右辺の式の値が左辺の名前付き式に代入されます。 名前付き式とその結果のスケールは、式のスケールになります。 |
複合代入フォーマット:
named-expression <演算子 > = 式
これは、次に示す式と同等です。
named-expression = named-expression <演算子 > 式
ただし、名前付き式は一度しか計算されません。
他のすべての演算子と違って、次に示す関係演算子は if または while ステートメントのオブジェクトとして、または for ステートメント内でのみ有効です。
- < (より小)
- > (より大)
- <= (より小、等号)
- >= (より大、等号)
- == (二重等号)
- != (感嘆符、等号)
| 項目 | 説明 |
|---|---|
| expression1 < expression2 | expression1 の値が厳密に expression2 の値より小さければ、この関係は真です。 |
| expression1 > expression2 | expression1 の値が厳密に expression2 の値より大きければ、この関係は真です。 |
| expression1 <= expression2 | expression1 の値が expression2 の値以下であれば、この関係は真です。 |
| expression1 >= expression2 | expression1 の値が expression2 の値以上であれば、この関係は真です。 |
| expression1 == expression2 | expression1 の値と expression2 の値が等しければ、この関係は真です。 |
| expression1 != expression2 | expression1 の値と expression2 の値が等しくなければ、この関係は真です。 |
ステートメント
ステートメントが式フォーマットの場合、メイン演算子が代入演算子でない限り、ステートメントを実行すると式の値に続いて改行文字が書き込まれます。
ステートメントが文字列の場合、ステートメントを実行すると文字列の値が書き込まれます。
セミコロンまたは改行文字で区切られたステートメントは、順次に実行されます。 bcコマンドの対話的な呼び出しでは、文法的な生成を満たす改行文字が読み込まれるたびに、改行文字が読み込まれる:
input_item : semicolon_list NEWLINEsemicolon_list を構成するステートメントの順次リストが即座に実行され、その実行結果として生成される出力はバッファー遅延なしに書き込まれます。
if ステートメント (if (relation) statement) の場合、関係が真であれば statement が実行されます。
while ステートメント (while (relation) statement) は、relation を検査するループを実行します。 relation が真であるたびに statement が実行され、relation が再検査されます。 relation が偽であれば、statement のあとから実行が再開されます。
for ステートメント (for (expression; relation; expression) statement) は、次に示すステートメントと同じです。
first-expression
while (relation) {
statement
last-expression
}3 つの式がすべて存在しなければなりません。
break ステートメントは、 for または while ステートメントを終了させます。
auto ステートメント (auto identifier [,ID ] ...) ID の値がプッシュダウンされます。 ID として、通常の ID またはアレイ ID を使えます。 アレイ ID を指定するには、後ろにアレイ名を空の大括弧で囲んで指定します。 auto ステートメントは、関数定義内の最初のステートメントでなければなりません。
define ステートメントは、以下のことを行います。
define LETTER ( opt_parameter_list ) {
opt_auto_define_list
statement_list
}関数を定義します。LETTER. 以下の場合、LETTER関数が以前に定義されている場合は、 define ステートメントが以前の定義を置き換えます。 式は次のとおりです。
LETTER ( opt_argument_list )呼び出しLETTER関数。 呼び出し時の引数の数が定義内のパラメーターの数と一致しなければ、動作は不定になります。 各関数は、呼び出される前に定義されます。 関数はその本体内で定義済みと見なされるので、再帰呼び出しは有効です。 関数内の数値定数の値は、その関数の呼び出し時に ibase レジスターの値で指定した基数で解釈されます。
return ステートメント (return および return(expression)) は、関数を終了させ、その auto 変数をポップして、関数の結果を指定します。 第 1 の書式は return (0) と同等です。 関数の呼び出しの値とスケールは、小括弧内の式の値とスケールです。
quit ステートメント (quit) は、関数定義内、あるいは if、for、while ステートメント内で使用した場合でも、入力内にこのステートメントが発生した時点で bc プログラムの実行を停止します。
関数呼び出し
関数呼び出しは、関数名と、それに続く、括弧で囲まれてコンマで区切られた式のリストからなっています。各式は、関数の引数です。 引数として渡されるアレイ全体を、アレイ名とそれに続く [ ] (左右の大括弧) で指定します。 すべての関数の引数は、値で渡されます。 結果として、仮パラメーターに対して行われた変更は、実引数には影響を与えません。 関数が return ステートメントを実行して終了すると、その関数の値は return ステートメントの括弧内の式の値になりますが、式が与えられていない場合、または return ステートメントがない場合は 0 になります。
sqrt(expression) の結果は、式の平方根です。 結果は、最下位の小数桁まで切り捨てられます。 結果のスケールは、式のスケールまたは scale の値のうち、どちらか大きい方です。
length(expression) の結果は、式の有効 10 進数の桁の総数です。 結果のスケールは 0 です。
scale(expression) の結果は、式のスケールです。 結果のスケールは 0 です。
bcプログラムには、グローバルと自動(ローカル)の2つのストレージクラスしかない。 関数に対してローカルになる ID のみを、auto キーワードで宣言する必要があります。 関数の引数は、その関数に対してローカルです。 他のすべての ID はグローバルと見なされ、すべての関数に使えます。 すべての ID (グローバルおよびローカル) の初期値は 0 です。 auto として宣言された ID は、関数への入り口で割り振られ、関数からの戻り時に解放されます。 したがって、この種の ID は関数呼び出しの間で値を保持しません。 auto アレイは、アレイ名とそれに続く [ ] (左右の大括弧) で指定します。 関数に入る時に、パラメーターおよび自動変数として表示される名前の古い値は、スタックにプッシュされます。 関数が値を戻すまで、これらの名前への参照は新しい値のみを参照します。
また、この関数から呼び出される他の関数からこれらの名前への参照も、いずれかの関数がローカル変数に同じ名前を使うまで、新しい値を参照します。
-l 数学ライブラリー内の関数
-l フラグを指定すると、次の関数が定義されます。
| 項目 | 説明 |
|---|---|
| s (式) | expressionx の正弦を指定します。expression の単位はラジアンです。 |
| c (式) | expressionx の余弦を指定します。expression の単位はラジアンです。 |
| a (式) | expressionx の逆正接を指定します。expression の単位はラジアンです。 |
| l (式) | expression の自然対数を指定します。 |
| e (式) | expression の指数を指定します。 |
| j (expression,expression) | 整数順のベッセル関数を指定します。 |
上記の各関数の呼び出しのスケールは、関数呼び出し時の scale キーワードの値です。 数学関数のドメインの外側にある引数を指定して上記のいずれかの関数を呼び出すと、 動作は不定になります。
フラグ
| 項目 | 説明 |
|---|---|
| -c | File パラメーターをコンパイルしますが、dc コマンドは呼び出しません。 |
| -l | (小文字の L) 数学関数のライブラリーを定義し、scale 変数を 20 に設定します。 |
終了状況
このコマンドは、以下の終了値を戻します。
| 項目 | 説明 |
|---|---|
| 0 | 正常終了。 |
| 1 | 構文エラーが発生したか、入力ファイルにアクセスできませんでした。 |
| 未指定 | 他のエラーが発生しました。 |
例
- bc コマンドを計算器として使うことができます。 scale 変数を設定するかどうか、およびどの値に設定するかに応じて、分数が表示されます。 次のように入力します。
表示のみ。0scale 変数を設定し、コメントを追加するには、次のように入力します。bc 1/4
画面が表示されます。0.2. 入力:scale = 1 /* Keep 1 decimal place */ 1/4
表示0.250. 入力:scale = 3 /* Keep 3 decimal places */ 1/4
表示28.600. 入力16+63/5
表示15.800. 入力(16+63)/5
表示11.833.71/6bc コマンドは、Enter キーを押すと代入を除く各式の値を表示します。
bc コマンドの式をキーボードから直接入力する場合、bc コマンド・セッションを終了してシェル・コマンド・ラインに戻るには、ファイルの終わり (Ctrl-D) キー・シーケンスを押します。
- C のようなプログラムを作成して実行する場合は、次に示すようなコマンドを入力します。画面が表示されます。7.38905609893065022723. 次のように入力すると、
画面が表示されます。120. 次のように入力すると、f(5) /* 5 factorial */
画面が表示されます。3628800.f(10) /* 10 factorial */このシーケンスは、prog.bc ファイル内に保存された bc プログラムを解釈し、 さらにキーボードから bc コマンド・ステートメントを読み取ります。 -l フラグを指定して bc コマンドを開始すると、数学ライブラリーが使用可能になります。 この例では、数学ライブラリーの e (指数) 関数を使用します。fprog.bc プログラム・ファイルに次のように定義されています。
for または while ステートメントの次のステートメントは、同じ行で始めなければなりません。 bc コマンドの式をキーボードから直接入力する場合、bc コマンド・セッションを終了してシェル・コマンド・ラインに戻るには、ファイルの終わり (Ctrl-D) キー・シーケンスを押します。/* compute the factorial of n */ define f(n) { auto i, r; r = 1; for (i=2; i<=n; i++) r =* i; return (r); } - 挿入式を逆ポーランド表記法 (RPN) に変換する場合は、次のように入力します。bc -c画面には次のように表示されます。
(a * b) % (3 + 4 * c)lalb* 3 4lc*+%ps.このシーケンスは、bc コマンドの挿入表記式をコンパイルして、 dc コマンドが解釈できる式に変換します。 dc コマンドは、拡張 RPN 式を計算します。 コンパイルされた出力では、l各変数名の前には、変数の値をスタックにロードする dc サブコマンドを指定します。 このp値をスタックの先頭に表示します。s.最上部の値をレジスターに保管することによって破棄します.(ドット) で現行作業行を指定します。 このコマンドの標準出力をリダイレクトすることにより、RPN 式をファイルに保存して、dc コマンドに後で計算させることができます。 bc コマンドの式をキーボードから直接入力する場合、bc コマンド・セッションを終了してシェル・コマンド・ラインに戻るには、ファイルの終わり (Ctrl-D) キー・シーケンスを押します。
- シェル内で pi の最初の 10 桁の近似値を変数 x に代入するには、次のように入力します。
次に示す bc プログラムは、pi の同じ近似値にラベルを付けて、標準出力に出力します。x=$(printf "%s\n" 'scale = 10; 104348/33215' | bc)scale = 10 "pi equals " 104348 / 33215 - 指数関数の近似値を計算する関数 (-l (小文字の L) オプションを指定すると、この種の関数が事前定義されます) を定義するには、次のように入力します。
最初の 10 個の整数の指数関数の近似値を出力するには、以下のように入力します。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) }
ファイル
| 項目 | 説明 |
|---|---|
| /usr/bin/bc | bc コマンドが入っています。 |
| /usr/lib/lib.b | 数学ライブラリーが入っています。 |
| /usr/bin/dc | 卓上計算機が入っています。 |