Manpages

名 称

bc - 任 意 精 度 の 計 算 言 語

書 式

bc [ -hlwsqv ] [long-options] [ file ... ]

バ ー ジ ョ ン

こ の マ ニ ュ ア ル は GNU bc version 1.06 に つ い て 記 述 し て あ り ま す 。

解 説

bc は 、 任 意 の 精 度 の 数 値 を 扱 う 事 が で き 、 プ ロ グ ラ ミ ン グ 言 語 C の 文 法 に よ く 似 た 形 の 入 力 を 対 話 的 に 実 行 す る 言 語 で す 。 コ マ ン ド ラ イ ン の オ プ シ ョ ン の 指 定 に よ り 、 標 準 数 学 ラ イ ブ ラ リ を 使 用 す る こ と も で き ま す 。 こ れ を 指 定 し た 場 合 は 、 ど の フ ァ イ ル を 処 理 す る よ り も 前 に 数 学 ラ イ ブ ラ リ が 定 義 さ れ ま す 。 bc は 動 作 を 開 始 す る と ま ず 最 初 に コ マ ン ド ラ イ ン で 指 定 し た フ ァ イ ル を 順 に 処 理 し ま す 。 す べ て の フ ァ イ ル を 処 理 し た 後 は 、 bc は 標 準 入 力 か ら の 読 み 込 み を 行 い ま す 。 す べ て の コ ー ド は 、 そ れ が 読 み 込 ま れ た 時 点 で 実 行 さ れ て い き ま す 。 (も し 、 フ ァ イ ル 中 に プ ロ セ ッ サ を 止 め る コ マ ン ド が 含 ま れ て い た 場 合 は 、 標 準 入 力 か ら の 読 み 込 み は 行 わ れ ま せ ん 。 ) 本 バ ー ジ ョ ン の bc は 、 伝 統 的 な bc の 実 装 お よ び POSIX の ド ラ フ ト 規 格 よ り も 拡 張 さ れ て い ま す 。 コ マ ン ド ラ イ ン オ プ シ ョ ン に よ り 、 こ れ ら の 拡 張 に 対 し て 警 告 を 表 示 し た り 拒 絶 し た り す る こ と が 可 能 で す 。 本 ド キ ュ メ ン ト で は 、 こ の プ ロ セ ッ サ が 受 理 す る 言 語 に つ い て 説 明 し ま す 。 拡 張 機 能 に つ い て は そ の 旨 明 記 し ま す 。 オ プ シ ョ ン
-h, --help 使 用 方 法 を 表 示 し 、 終 了 し ま す 。
-i, --interactive 対 話 モ ー ド を 強 制 し ま す 。
-l, --mathlib 標 準 数 学 ラ イ ブ ラ リ を 定 義 し ま す 。
-w, --warn

POSIX bc に 対 す る 拡 張 機 能 が 入 力 さ れ た 場 合 は 警 告 を 出 し ま す 。

-s, --standard

POSIX bc の 言 語 仕 様 に 厳 密 に 従 っ て 処 理 し ま す 。

-q, --quiet

GNU bc 導 入 メ ッ セ ー ジ を 表 示 し ま せ ん 。

-v, --version バ ー ジ ョ ン 番 号 と 著 作 権 を 表 示 し て 終 了 し ま す 。
bc
に お け る 最 も 基 本 的 な 要 素 は ’数 ’ で す 。 数 は 、 整 数 部 と 小 数 部 が あ り 、 任 意 の 精 度 を と る こ と が で き ま す 。 す べ て の 数 は 、 内 部 で は 10 進 数 で 表 現 さ れ て お り 、 計 算 も 10 進 数 で 行 わ れ ま す 。 (本 バ ー ジ ョ ン で は 、 除 算 と 乗 算 で 結 果 に 切 捨 て が 起 こ り ま す 。 ) 数 に は length と scale と い う 2 つ の 属 性 が あ り ま す 。 length は 10 進 で の 有 効 桁 数 で 、 scale は 小 数 点 以 下 の 10 進 で の 有 効 桁 数 で す 。 例 え ば 、

.000001 は 、 lengthが 6 で 、 scale も 6 で す 。
1935.000 は 、 lengthが 7 で 、 scale が 3 で す 。 変 数 数 は 、 単 純 変 数 と 配 列 の 2 種 類 の 変 数 に 保 存 さ れ ま す 。 単 純 変 数 と 配 列 変 数 に は 共 に 名 前 が 付 け ら れ ま す 。 こ の 名 前 は 、 最 初 の 1 文 字 目 が ア ル フ ァ ベ ッ ト で 、 後 は 、 ア ル フ ァ ベ ッ ト 、 数 字 お よ び ア ン ダ ス コ ア を 任 意 の 文 字 数 組 み 合 わ せ て 使 う こ と が で き ま す 。 す べ て の ア ル フ ァ ベ ッ ト は 小 文 字 で な け れ ば な り ま せ ん 。 (ア ル フ ァ ベ ッ ト と 数 字 を 使 っ た 名 前 の 機 能 は 拡 張 機 能 で す 。 POSIX bc で は 、 変 数 に 英 小 文 字 1 文 字 し か 許 さ れ ま せ ん 。 ) 配 列 変 数 の 名 前 に は 必 ず ブ ラ ケ ッ ト ([]) が つ く の で 、 変 数 の 型 は 文 脈 に お い て は っ き り し て い ま す 。 特 殊 な 変 数 と し て scale, ibase, obase, last の 4 つ の 変 数 が あ り ま す 。 scale で 計 算 時 の 小 数 点 以 下 の 有 効 桁 数 を 指 定 し ま す 。 scale の デ フ ォ ル ト は 0 で す 。 ibaseobase で 入 力 お よ び 出 力 の 変 換 基 数 を 指 定 し ま す 。 デ フ ォ ル ト で は 、 入 力 、 出 力 の 基 数 は 共 に 10 で す 。 last は 、 最 後 に bc が 出 力 し た 数 を 保 持 し て い ま す (こ れ は 拡 張 機 能 で す )。 こ れ ら に つ い て は 、 後 で 適 切 な と こ ろ で 詳 し く 説 明 し ま す 。 こ れ ら の 変 数 に は 、 式 で 使 わ れ る 代 入 と 同 様 の 代 入 を 行 う こ と が 可 能 で す 。 コ メ ン ト

bc は 、 /* か ら */ の 間 を コ メ ン ト と し て 扱 い ま す 。 コ メ ン ト は ど こ か ら 始 ま っ て い て も よ く 、 1 文 字 の 空 白 と し て 扱 わ れ ま す 。 (こ れ に よ り 、 コ メ ン ト は そ の 前 後 の 入 力 ア イ テ ム を 切 り 離 し ま す 。 た と え ば 、 変 数 名 の 途 中 に コ メ ン ト を 置 く こ と は で き ま せ ん 。 ) コ メ ン ト の 中 に は い く つ 改 行 が あ っ て も か ま い ま せ ん 。

bc を ス ク リ プ ト と し て も 使 え る よ う に す る た め 、 1 行 コ メ ン ト が 拡 張 機 能 と し て 追 加 さ れ ま し た 。 1 行 コ メ ン ト は # で 始 ま り 、 次 の 改 行 ま で 有 効 で す 。 そ の 改 行 文 字 自 体 は コ メ ン ト の 一 部 と は み な さ れ ず 、 普 通 に 処 理 さ れ ま す 。
’数 ’ は 、 式 お よ び 文 に よ っ て 操 作 さ れ ま す 。 こ の 言 語 は 対 話 的 に な る よ う に 設 計 さ れ て い る た め 、 文 お よ び 式 は 可 能 な 限 り 即 座 に 実 行 さ れ ま す 。 "main" プ ロ グ ラ ム と い っ た も の は な く 、 そ の か わ り 、 コ ー ド は そ れ に 出 く わ し た 時 点 で 実 行 さ れ ま す 。 (後 で 述 べ る ’関 数 ’は 、 そ れ に 出 く わ し た 時 点 で 定 義 さ れ ま す 。 ) 式 の 最 も 単 純 な も の は 、 た だ の 定 数 で す 。 bc は 、 入 力 さ れ た 定 数 を 、 変 数 ibase で 指 定 さ れ る 現 在 の 基 数 を 元 に 、 内 部 的 に は 10 進 表 現 の 数 に 変 換 し ま す 。 (関 数 の 場 合 に は 例 外 が あ り ま す 。 ) ibase に は 、 2 か ら 16 ま で が 使 用 で き ま す 。 こ の 範 囲 を 越 え る 値 を ibase に 代 入 し よ う と す る と 、 2 あ る い は 16 を 指 定 し た こ と に な り ま す 。 数 の 入 力 に は 、 0-9 お よ び A-F の 文 字 が 利 用 で き ま す 。 (注 意 : こ れ は 大 文 字 で な け れ ば な り ま せ ん 。 小 文 字 は 変 数 名 で す 。 ) 1 桁 の 数 は ibase の 値 に 関 係 な く そ の 値 を 持 ち ま す (す な わ ち A=10)。 複 数 桁 の 数 の 場 合 、 bc は ibase 以 上 の 値 を も つ す べ て の 入 力 桁 を ibase-1に 変 更 し ま す 。 こ れ に よ り 、 数 FFF は 常 に 、 そ の 入 力 基 数 を 使 っ て 3 桁 で 表 現 可 能 な 最 大 の 値 を 表 し ま す 。 す べ て の 演 算 式 が 、 他 の 多 く の 高 級 言 語 に 似 た も の と な っ て い ま す 。 数 の 型 は 1 種 類 し か な い た め 、 型 変 換 の 規 則 は あ り ま せ ん 。 そ の か わ り 、 式 の 有 効 桁 数 に 関 す る 規 則 が あ り ま す 。 す べ て の 式 に 有 効 桁 数 が あ り 、 こ れ は そ の 被 演 算 数 の 有 効 桁 数 と 施 さ れ る 演 算 、 そ れ に 多 く の 場 合 、 変 数 scale か ら 決 定 さ れ ま す 。 scale に は 、 0 か ら C の 整 数 で 表 現 で き る 最 大 の 値 ま で が 指 定 可 能 で す 。 以 下 、 bc で 使 用 可 能 な 演 算 子 を 説 明 し ま す 。 な お 、 完 全 形 の 式 を "expr"、 単 純 変 数 ま た は 配 列 変 数 を "var" と 表 記 し ま す 。 単 純 変 数 は 単 に

name と 表 し 、 配 列 変 数 は
name
[expr] と 表 し ま す 。 特 に 言 及 し な い 限 り 、 結 果 の 有 効 桁 数 は 、 注 目 し て い る 式 の 最 大 有 効 桁 数 に な り ま す 。

- expr 結 果 は そ の 式 の 符 号 を 反 転 し た も の と な り ま す 。

++ var 変 数 を

1 だ け イ ン ク リ メ ン ト し 、 そ の 新 し い 値 が 式 の 結 果 と な り ま す 。

-- var 変 数 を

1 だ け デ ク リ メ ン ト し 、 そ の 新 し い 値 が 式 の 結 果 と な り ま す 。

var ++ 式 の 結 果

は そ の 変 数 の 値 と な り 、 そ れ か ら そ の 変 数 を 1 だ け イ ン ク リ メ ン ト し ま す 。

var --

式 の 結 果 は そ の 変 数 の 値 と な り 、 そ れ か ら そ の 変 数 を 1 だ け デ ク リ メ ン ト し ま す 。

expr + expr 式 の 結 果 は 2 つ の 式 の 和 と な り ま す 。
expr - expr 式 の 結 果 は 2 つ の 式 の 差 と な り ま す 。
expr * expr 式 の 結 果 は 2 つ の 式 の 積 と な り ま す 。
expr / expr 式 の 結 果 は 2 つ の 式 の 商 と な り ま す 。 結 果 の scale は 変 数 scale の 値 と な り ま す 。
expr % expr 結 果 は 、 以 下 の よ う に し て 求 め ら れ る 剰 余 で す 。 a%b を 求 め る た め に 、 ま ず a/b を scale の 有 効 桁 数 で 計 算 し ま す 。 こ の 結 果 を 用 い て 、 a-(a/b)*b を 、 scale+scale(b) と scale(a) の 大 き い 方 の 有 効 桁 数 で 計 算 し ま す 。 も し scale に 0 が セ ッ ト さ れ 、 両 方 の 式 が 整 数 で あ れ ば 、 整 数 の 剰 余 が 求 め ら れ ま す 。
expr ^ expr 式 の 結 果 は 、 1 番 目 の 式 の 値 を 2 番 目 の 回 数 だ け 乗 じ た も の に な り ま す 。 2 番 目 の 式 は 、 整 数 で な け れ ば な り ま せ ん 。 (2 番 目 の 式 が 整 数 で な い 場 合 は 警 告 が 表 示 さ れ 、 整 数 に 切 り 詰 め た 値 が 使 用 さ れ ま す 。 ) 結 果 の scale は 、 べ き 指 数 が 負 な ら scale に な り ま す 。 べ き 指 数 が 正 な ら 、 "1 番 目 の 式 の scale と べ き 指 数 と の 積 " お よ び "scale と 1 番 目 の 式 の scale の 大 き い 方 " の う ち の 小 さ い 方 (つ ま り 、 scale(a^b) = min(scale(a)*b, max( scale, scale(a)))) と な り ま す 。 expr^0 は 常 に 1 を 返 し ま す 。
( expr ) 標 準 の 優 先 度 を 使 わ ず に 、 こ の 式 の 評 価 を 優 先 し ま す 。
var = expr 式 の 値 が 変 数 に 代 入 さ れ ま す 。
var <op>= expr

"var" が 一 度 し か 評 価 さ れ な い こ と 以 外 は "var = var <op> expr" と 同 じ で す 。 "var" が 配 列 の 場 合 は 動 作 が 違 う こ と が あ り 得 ま す 。 関 係 演 算 は 特 殊 な 演 算 で 、 結 果 は 常 に 0 か 1 に な り ま す 。 関 係 が 偽 の 時 0、 真 の 時 1 に な り ま す 。 関 係 演 算 は 、 演 算 式 の ど こ で も 使 う 事 が で き ま す 。 (POSIX bcで は 、 関 係 演 算 は 、 if, while, for 文 の 中 だ け で 、 し か も 1 つ の 関 係 式 し か 使 用 で き ま せ ん 。 ) 関 係 演 算 子 は 以 下 の 通 り 。

expr1 < expr2

expr1 が expr2 よ り 小 さ い 場 合 1 に な り ま す 。

expr1 <= expr2

expr1 が expr2 よ り 小 さ い か 等 し い 場 合 1 に な り ま す 。

expr1 > expr2

expr1 が expr2 よ り 大 き い 場 合 1 に な り ま す 。

expr1 >= expr2

expr1 が expr2 よ り 大 き い か 等 し い 場 合 1 に な り ま す 。

expr1 == expr2

expr1 と expr2 が 等 し い 場 合 1 に な り ま す 。

expr1 != expr2

expr1 と expr2 が 等 し く な い 場 合 1 に な り ま す 。 論 理 演 算 も 使 え ま す 。 (POSIX bc に は 論 理 演 算 は あ り ま せ ん 。 ) 論 理 演 算 も 関 係 演 算 と 同 様 、 結 果 は 0 か 1 (各 々 偽 お よ び 真 ) に な り ま す 。 論 理 演 算 子 は 以 下 の 通 り 。

!expr

expr が 0 な ら 1 に な り ま す 。

expr && expr

expr1 と expr2 が 両 方 と も 0 で な い な ら 、 1 に な り ま す 。

expr || expr

expr1 と expr2 の ど ち ら か 一 方 が 0 で な い な ら 、 1 に な り ま す 。 各 演 算 子 の 優 先 順 位 と 結 合 規 則 は 次 の 通 り で す 。 (最 初 の も の ほ ど 低 く 、 後 に い く ほ ど 高 い 優 先 順 位 で 先 に 実 行 さ れ ま す 。 )
|| (左 か ら 結 合 )
&& (左 か ら 結 合 )
! (結 合 せ ず ) 関 係 演 算
(左 か ら 結 合 ) 代 入 演 算
(右 か ら 結 合 )
+ - (左 か ら 結 合 )
* / % (左 か ら 結 合 )
^ (右 か ら 結 合 )
- (単 項 マ イ ナ ス ) (結 合 せ ず )
++ -- (結 合 せ ず ) こ の 優 先 順 位 は 、 POSIX bc の プ ロ グ ラ ム が そ の ま ま 正 し く 動 く よ う に 配 慮 し て 決 め ら れ て い ま す 。 こ の た め 、 関 係 演 算 と 論 理 演 算 を 代 入 文 と 共 に 用 い た 場 合 、 通 常 と は 異 な る 振 る 舞 い を し ま す 。 次 の 例 を 考 え て み ま し ょ う :
a = 3 < 5

C プ ロ グ ラ マ の ほ と ん ど は 、 ’’3 < 5’’ の 関 係 演 算 が 実 行 さ れ た 結 果 (つ ま り 1) が 変 数 ’’a’’ に 代 入 さ れ る 、 と 考 え る で し ょ う 。 と こ ろ が bc で は 、 ま ず 3 が 変 数 ’’a’’ に 代 入 さ れ 、 そ れ か ら 3 と 5 の 比 較 が 行 わ れ る の で す 。 こ の 間 違 い を 避 け る た め に 、 関 係 演 算 や 論 理 演 算 を 代 入 演 算 と 共 に 用 い る 場 合 は 、 括 弧 を 使 う の が 最 良 で す 。

bc に は 特 別 な 式 が さ ら に い く つ か 備 わ っ て い ま す 。 そ れ は ユ ー ザ 定 義 関 数 と 標 準 関 数 に 関 す る も の で 、 す べ て "name(parameters)" と い う 形 を し て い ま す 。 ユ ー ザ 定 義 関 数 に つ い て は 関 数 の 章 を 参 照 し て 下 さ い 。 標 準 関 数 は 以 下 の 通 り で す :
length ( expression )

expression の 有 効 桁 数 を 返 し ま す 。

read ( )

(拡 張 機 能 ) 関 数 の 出 現 位 置 に 関 係 な く 、 標 準 入 力 か ら 数 を 読 み 取 り ま す 。 デ ー タ と プ ロ グ ラ ム の 両 方 を 標 準 入 力 か ら 与 え る よ う な 場 合 に は 、 問 題 を 生 じ う る こ と に 注 意 し て 下 さ い 。 最 良 の 方 法 は 、 ユ ー ザ か ら デ ー タ の 入 力 の 必 要 が あ る な ら 、 プ ロ グ ラ ム は あ ら か じ め 作 っ て お き 、 標 準 入 力 か ら プ ロ グ ラ ム を 入 力 し な い よ う に す る こ と で す 。 read 関 数 の 値 は 標 準 入 力 か ら 読 み 込 ん だ 数 で す 。 そ の 際 、 変 換 基 数 と し て 変 数 ibase の 現 在 の 値 が 用 い ら れ ま す 。

scale ( expression )

expression の 小 数 点 以 下 の 有 効 桁 数 を 返 し ま す 。

sqrt ( expression )

expression の 平 方 根 を 返 し ま す 。 expression に 負 の 値 を 指 定 し た 場 合 は 、 ラ ン タ イ ム エ ラ ー に な り ま す 。 文 は (ほ と ん ど の 算 術 言 語 が そ う で あ る よ う に )、 処 理 を 順 番 に 実 行 し て い く 単 位 で す 。 bc で は 文 は 「 で き る だ け 早 い 段 階 で 」 実 行 さ れ ま す 。 改 行 が 入 力 さ れ た 時 点 で 、 実 行 可 能 な 文 が 存 在 し て い れ ば 、 即 座 に 実 行 し ま す 。 こ の た め bc で は 改 行 が 重 要 な 役 割 を 持 っ て い ま す 。 実 際 、 セ ミ コ ロ ン と 改 行 が 文 の 区 切 り と し て 使 用 さ れ ま す 。 不 適 当 な 場 所 で 改 行 を 入 力 す る と 、 文 法 エ ラ ー に な り ま す 。 改 行 は 文 の 区 切 り で す が 、 バ ッ ク ス ラ ッ シ ュ を 用 い て 改 行 を 隠 す こ と が で き ま す 。 bc に と っ て 、 "\<nl>" (<nl>は 改 行 ) は 改 行 で は な く 空 白 に 見 え ま す 。 文 の リ ス ト は 、 セ ミ コ ロ ン と 改 行 で 区 切 ら れ た 文 の 並 び で す 。 以 下 、 bc の 文 の 種 類 と そ の 動 作 に つ い て 説 明 し ま す 。 (な お 、 以 下 の 説 明 で ([]) で 括 っ た 部 分 は 省 略 可 能 な 項 で す 。 )

演 算 式 演 算 式 に は 次 の

2 つ の 種 類 が あ り ま す 。 演 算 式 が "<variable>

<assignment> ..." で 始 ま っ て い れ ば 、 そ れ は 代 入 文 と し て 扱 わ れ ま す 。 そ う で な け れ ば 、 演 算 式 は 評 価 さ れ て 出 力 に 表 示 さ れ ま す 。 結 果 が 表 示 さ れ た 後 、 改 行 が 表 示 さ れ ま す 。 例 え ば 、 "a=1" は 代 入 文 で あ り 、 "(a=1)" は 代 入 文 が 埋 め 込 ま れ た 演 算 式 で す 。 表 示 さ れ る 数 値 は す べ て 、 変 数 obase で 決 ま る 基 数 で 表 示 さ れ ま す 。 obase に 指 定 で き る 値 は 2 か ら BC_BASE_MAX ま で で す 。 (「 制 限 」 の 章 を 参 照 。 ) 基 数 2 か ら 16 ま で で は 、 通 常 の 数 表 記 法 が 用 い ら れ ま す 。 基 数 が 16 よ り 大 き い 場 合 、 bc は 、 各 桁 を 10 進 表 記 す る 複 数 桁 文 字 表 記 法 で 表 示 し ま す 。 複 数 桁 文 字 表 記 法 で は 、 各 桁 は 空 白 で 区 切 ら れ ま す 。 各 桁 は "obase-1" を 10 進 で 表 記 す る の に 必 要 な 桁 数 の 数 字 か ら 成 り ま す 。 数 の 精 度 は 任 意 に 選 べ る た め 、 数 に よ っ て は 1 行 に 表 示 で き な い 場 合 も あ り ま す 。 そ の よ う な 長 い 数 は 、 行 末 に "\" を 付 け て 次 行 に 継 続 し ま す 。 1 行 に 表 示 で き る 文 字 数 は 70 で す 。 bc の 対 話 的 性 質 に よ り 、 あ る 数 を 表 示 す る と 、 表 示 し た 値 が 特 殊 変 数 last に 代 入 さ れ る と い う 副 作 用 が 生 じ ま す 。 ユ ー ザ は タ イ プ し 直 す こ と な く 最 後 に 表 示 さ れ た 値 を 再 利 用 で き ま す 。 last に 値 を 代 入 す る こ と も 可 能 で 、 そ の 場 合 、 前 回 表 示 さ れ た 値 が 代 入 値 で 上 書 き さ れ ま す 。 新 し く 代 入 し た 値 は 、 次 に 数 が 表 示 さ れ る か 別 の 値 が last に 代 入 さ れ る ま で 有 効 で す 。 (bc の 実 装 に よ っ て は 、 数 の 一 部 に な っ て い な い 単 一 の ピ リ オ ド (.) を last の 短 縮 表 記 と し て 用 い る こ と が で き ま す 。 )

string 文 字 列

string が 出 力 に 表 示 さ れ ま す 。 文 字 列 は 二 重 引 用 符 で 始 ま

り 、 次 の 二 重 引 用 符 ま で の す べ て の 文 字 を 含 み ま す 。 改 行 を 含 め 、 す べ て の 文 字 は 文 字 通 り に 解 釈 さ れ ま す 。 文 字 列 の 後 に 改 行 は 出 力 さ れ ま せ ん 。

print list

print 文 (こ れ は 拡 張 機 能 で す ) は 、 も う ひ と つ の 出 力 方 法 で す 。 "list" は コ ン マ で 区 切 っ た 文 字 列 お よ び 演 算 式 の リ ス ト で あ り 、 各 文 字 列 あ る い は 演 算 式 が リ ス ト の 順 に 表 示 さ れ ま す 。 最 後 に 改 行 は 出 力 さ れ ま せ ん 。 演 算 式 は 評 価 さ れ 、 そ の 値 が 表 示 さ れ る と と も に 、 変 数 last に 代 入 さ れ ま す 。 print 文 中 の 文 字 列 は 出 力 に 表 示 さ れ ま す が 、 特 殊 文 字 を 含 め る こ と が で き ま す 。 特 殊 文 字 は バ ッ ク ス ラ ッ シ ュ (\) で 始 ま り ま す 。 bc で 使 え る 特 殊 文 字 は 、 "a" (ベ ル )、 "b" (バ ッ ク ス ペ ー ス )、 "f" (フ ォ ー ム フ ィ ー ド )、 "n" (改 行 )、 "r" (復 帰 )、 "q" (二 重 引 用 符 )、 "t" (タ ブ )、 "\" (バ ッ ク ス ラ ッ シ ュ ) で す 。 こ れ 以 外 は 無 視 さ れ ま す 。

{ statement_list } 複 文 で す 。 複 数 の 文 を 1 つ の グ ル ー プ に ま と め て 実 行 し ま す 。
if
( expression ) statement1 [else statement2]

if 文 は 演 算 式 expression を 評 価 し 、 そ の 値 に 応 じ て 文 statement1 ま た は 文 statement2 を 実 行 し ま す 。 expression の 値 が 0 で な け れ ば statement1 が 実 行 さ れ ま す 。 statement2 が 存 在 し 、 expression の 値 が 0 な ら ば 、 statement2 が 実 行 さ れ ま す 。 (else 節 は 拡 張 機 能 で す 。 )

while ( expression ) statement

while 文 は expression が 0 で な い 間 、 繰 り 返 し statement を 実 行 し ま す 。 statement の 実 行 前 に 毎 回 expression を 評 価 し ま す 。 expression の 値 が 0 に な る か 、 break 文 を 実 行 す る と 、 ル ー プ が 終 了 し ま す 。

for ( [expression1] ; [expression2] ; [expression3] ) statement

for 文 は statement の 繰 り 返 し 実 行 を 制 御 し ま す 。 expression1 は ル ー プ 実 行 の 前 に 評 価 さ れ ま す 。 expression2 は statement の 実 行 前 に 毎 回 評 価 さ れ 、 そ の 値 が 0 で な け れ ば statement が 実 行 さ れ ま す 。 expression2 の 値 が 0 に な る と 、 ル ー プ は 終 了 し ま す 。 各 statement 実 行 の 後 、 再 び expression2 が 評 価 さ れ る 前 に expression3 が 評 価 さ れ ま す 。 expression1 あ る い は expression3 が 省 略 さ れ て い る と 、 そ こ で は 何 も 評 価 さ れ ま せ ん 。 expression2 が 省 略 さ れ て い る 場 合 、 expression2 が 1 で あ る の と 同 様 に 扱 わ れ ま す 。 (各 expression が 省 略 可 能 な の は 拡 張 機 能 で す 。 POSIX bc で は 、 3 つ の expression は ど れ も 省 略 で き ま せ ん 。 ) 以 下 は for 文 と 等 価 な コ ー ド で す :
expression1;
while (expression2) {
statement;
expression3; }

break そ れ を 含 む 最 も 内 側 の

while も し く は for 文 に よ る 繰 り 返 し を 強 制 的

に 中 断 し ま す 。

continue そ れ を 含 む 最 も 内 側 の for 文 に お け る 次 の 繰 り 返 し に 進 み ま す 。 (continue 文 は 拡 張 機 能 で す )

halt 実 行 さ れ る と

bc プ ロ セ ッ サ を 終 了 さ せ ま す (拡 張 機 能 )。 例 え ば "if

(0 == 1) halt" の 場 合 は bc は 終 了 し ま せ ん 。 halt 文 が 実 行 さ れ な い か ら で す 。

return 関 数 か ら 戻 り ま す 。 関 数 の 結 果 は

0 に な り ま す 。 (関 数 の 章 を 参 照 )

return ( expression ) 関 数 か ら 戻 り ま す 。 関 数 の 結 果 は expression に な り ま す 。 (関 数 の 章 を 参 照 ) 拡 張 機 能 で す が 、 括 弧 は 必 須 で は あ り ま せ ん 。 疑 似 文 こ れ ら は 今 ま で の 文 と は 動 作 が 異 な り ま す 。 疑 似 文 は 実 行 文 で は な く 、 「 コ ン パ イ ル 」 時 点 で 処 理 さ れ ま す 。

limits

bc の ロ ー カ ル バ ー ジ ョ ン に よ り 制 限 さ れ る 限 界 値 を 表 示 し ま す 。 (limits は 拡 張 機 能 で す )

quit

bc を 終 了 し ま す 。 ど ん な 場 所 に あ っ て も 、 quit 文 は 入 力 さ れ た 時 点 で 実 行 さ れ ま す 。 例 え ば 、 "if (0 == 1) quit" と い う 記 述 で あ っ て も 、 bc は 終 了 し ま す 。

warranty 保 証 に 関 す る 注 意 を 長 め に 表 示 し ま す 。 (warranty は 拡 張 機 能 で す ) 関 数 関 数 は 、 後 で 実 行 さ れ る べ き 計 算 手 順 を 定 義 す る 機 能 で す 。 bc の 関 数 は 常 に 値 を 計 算 し 、 そ れ を 呼 び だ し 側 に 返 し ま す 。 関 数 定 義 は 、 そ れ が 入 力 か ら 読 み 込 ま れ た 時 点 で 定 義 が 行 わ れ る と い う 点 で 「 ダ イ ナ ミ ッ ク (動 的 )」 で す 。 一 度 定 義 さ れ た 関 数 は 、 同 じ 名 前 で 別 の 関 数 が 定 義 さ れ る ま で 使 用 可 能 で 、 新 し い 関 数 が 定 義 さ れ た 場 合 は 、 前 の 関 数 が 置 き 換 え ら れ ま す 。 関 数 の 定 義 は 、 以 下 の よ う に 行 い ま す :

define name ( parameters ) { newline
auto_list statement_list
} 関 数 呼 び 出 し は 、 "name(parameters)" と い う 形 式 の 演 算 式 で す 。 パ ラ メ ー タ parameters は 数 あ る い は 配 列 (拡 張 機 能 ) で す 。 関 数 定 義 で は 、 0 あ る い は 1 個 以 上 の パ ラ メ ー タ 名 を コ ン マ で 区 切 っ て 並 べ る こ と で 定 義 し ま す 。 数 は 値 渡 し (call by value)で の み 渡 さ れ 、 配 列 は 変 数 渡 し (call by variable)で の み 渡 さ れ ま す 。 配 列 は パ ラ メ ー タ 定 義 中 で "name[]" の よ う に 表 記 し て 指 定 し ま す 。 関 数 呼 び 出 し で は 、 数 の パ ラ メ ー タ に 対 し て 完 全 な 演 算 式 の 実 パ ラ メ ー タ を 記 述 し ま す 。 配 列 を 渡 す 表 記 は 配 列 パ ラ メ ー タ 定 義 と 同 様 で す 。 名 前 付 き 配 列 は 変 数 (variable)に よ っ て 関 数 に 渡 さ れ ま す 。 関 数 定 義 は ダ イ ナ ミ ッ ク ゆ え 、 パ ラ メ ー タ の 数 と 型 は 関 数 呼 び 出 し の 際 に チ ェ ッ ク さ れ ま す 。 パ ラ メ ー タ の 数 あ る い は 型 に 何 ら か の 不 整 合 が あ る と 、 ラ ン タ イ ム エ ラ ー が 発 生 し ま す 。 未 定 義 関 数 を 呼 び 出 し た 場 合 も ラ ン タ イ ム エ ラ ー と な り ま す 。

auto_list は 省 略 可 能 で 、 ロ ー カ ル 変 数 と し て 使 用 す る 変 数 の リ ス ト で す 。 auto_list が 存 在 す る な ら 、 そ の 文 法 は "auto name, ... ;" と な り ま す 。 (セ ミ コ ロ ン は 省 略 可 能 で す 。 ) 各 name が ロ ー カ ル 変 数 の 名 前 と な り ま す 。 配 列 は パ ラ メ ー タ と 同 様 の 表 記 で 指 定 で き ま す 。 こ れ ら の 変 数 は 、 関 数 の 最 初 で そ の 値 が ス タ ッ ク に プ ッ シ ュ さ れ た の ち 値 0 に 初 期 化 さ れ 、 関 数 の 実 行 中 に 使 用 さ れ ま す 。 こ れ ら の 変 数 は 関 数 出 口 に て ポ ッ プ さ れ 、 (関 数 呼 び 出 し 時 の )元 の 値 が 復 元 さ れ ま す 。 パ ラ メ ー タ は 実 際 に は ロ ー カ ル 変 数 で あ り 、 関 数 呼 び 出 し で 与 え ら れ た 値 に 初 期 化 さ れ ま す 。 bc の ロ ー カ ル 変 数 は 伝 統 的 な 意 味 で の ロ ー カ ル 変 数 と 異 な り 、 関 数 A が 関 数 B を 呼 び 出 し て い る よ う な 場 合 、 関 数 B の 中 に 関 数 A の ロ ー カ ル 変 数 と 同 じ 名 前 の ロ ー カ ル 変 数 が な い 限 り 、 関 数 A の ロ ー カ ル 変 数 名 を そ の ま ま 使 っ て 、 関 数 B か ら 関 数 A の ロ ー カ ル 変 数 を ア ク セ ス で き ま す 。 ロ ー カ ル 変 数 と パ ラ メ ー タ は ス タ ッ ク に プ ッ シ ュ さ れ る た め 、 bc は 再 帰 的 な 関 数 呼 び 出 し を サ ポ ー ト し て い ま す 。 関 数 本 体 は bc の 文 の リ ス ト で す 。 繰 り 返 し 述 べ ま す と 、 文 は セ ミ コ ロ ン か 改 行 で 区 切 ら れ て い ま す 。 return 文 に よ り 関 数 は 終 了 し 、 値 を 返 し ま す 。 return 文 に は 2 つ の 形 式 が あ り 、 ひ と つ め の 形 式 "return" は 、 呼 び 出 し 元 に 値 0 を 返 し ま す 。 も う ひ と つ の 形 式 "return ( expression )" は 、 expression の 値 を 計 算 し 、 そ れ を 呼 び 出 し 元 に 返 し ま す 。 各 関 数 の 最 後 に は "return (0)" が あ る も の と 解 釈 さ れ ま す 。 こ れ に よ り 、 明 示 的 に return 文 を 置 か な く て も 、 関 数 は 終 了 し て 値 0 を 返 し ま す 。 関 数 の 中 で は 、 変 数 ibase の 動 作 が 変 わ り ま す 。 関 数 の 中 で 使 わ れ て い る 定 数 は 、 関 数 の 呼 び だ し 時 点 の ibase を 元 に 変 換 が 行 わ れ ま す 。 こ の た め 、 関 数 内 部 で ibase を 変 更 し て も 無 視 さ れ ま す 。 た だ し 、 標 準 関 数 read を 呼 び 出 し た 場 合 は 例 外 で 、 こ れ は 常 に 現 在 の ibase の 値 を も と に 変 換 が 行 わ れ ま す 。 拡 張 機 能 で す が 、 定 義 の 書 式 が 若 干 緩 や か に な り ま し た 。 標 準 で は 、 開 く ブ レ ー ス が define キ ー ワ ー ド と 同 じ 行 に あ る こ と と 、 他 の 部 分 が 引 き 続 く 行 に あ る こ と が 必 須 で す 。 本 バ ー ジ ョ ン の bc で は 、 関 数 の 開 く ブ レ ー ス の 前 後 の 改 行 数 は 任 意 で す 。 例 え ば 、 次 の 定 義 は 合 法 で す 。

define d (n) { return (2*n); }
define d (n)
  { return (2*n); }数 学 ラ イ ブ ラ リ

bc-l オ プ シ ョ ン を 付 け て 起 動 し た 場 合 は 、 数 学 ラ イ ブ ラ リ が 読 み 込 ま れ 、 デ フ ォ ル ト の scale が 20 に 設 定 さ れ ま す 。 数 学 関 数 は 、 そ れ を 呼 び 出 し た 時 点 の scale の 値 に 従 っ て 計 算 を 行 い ま す 。 数 学 ラ イ ブ ラ リ に よ っ て 使 用 可 能 に な る 関 数 は 、 次 の 通 り で す :

s (x)

sin (x の 単 位 は ラ ジ ア ン )

c (x)

cos (x の 単 位 は ラ ジ ア ン )

a (x)

atan (返 り 値 の 単 位 は ラ ジ ア ン )

l (x)

log (自 然 対 数 )

e (x)

exp (指 数 関 数 )

j (n,x) 整 数 n 次 の ベ ッ セ ル 関 数 使 用 例 次 の 例 は 、 /bin/sh で シ ェ ル 変 数 pi に ’’パ イ ’’ の 値 を 代 入 し ま す 。

pi=$(echo "scale=10; 4*a(1)" | bc -l) 次 の 例 は 、 数 学 ラ イ ブ ラ リ で 使 わ れ て い る ’’e (x)’’ の 定 義 で す 。 こ の 関 数 は POSIX bc で 記 述 さ れ て い ま す 。

scale = 20

/* Uses the fact that e^x = (e^(x/2))^2
   When x is small enough, we use the series:
     e^x = 1 + x + x^2/2! + x^3/3! + ...
*/

define e(x) {
  auto  a, d, e, f, i, m, v, z

  /* Check the sign of x. */
  if (x<0) {
    m = 1
    x = -x}

  /* Precondition x. */
  z = scale;
  scale = 4 + z + .44*x;
  while (x > 1) {
    f += 1;
    x /= 2;}

  /* Initialize the variables. */
  v = 1+x
  a = x
  d = 1


  for (i=2; 1; i++) {
    e = (a *= x) / (d *= i)
    if (e == 0) {
      if (f>0) while (f--)  v = v*v;
      scale = z
      if (m) return (1/v);
      return (v/1);}
    v += e}}次 の 例 は 、

bc の 拡 張 機 能 を 使 っ て 、 ’’checkbook balances’’ (小 切 手 帳 残 高 ) を 計 算 す る 簡 単 な プ ロ グ ラ ム で す 。 こ の プ ロ グ ラ ム を フ ァ イ ル に し て お く と 、 毎 回 タ イ プ し な お さ ず に 何 度 も 使 う こ と が で き ま す 。

scale=2
print "\nCheck book program!\n"
print "  Remember, deposits are negative transactions.\n"
print "  Exit by a 0 transaction.\n\n"


print "Initial balance? "; bal = read()
bal /= 1
print "\n"
while (1) {
  "current balance = "; bal
  "transaction? "; trans = read()
  if (trans == 0) break;
  bal -= trans
  bal /= 1}
quit次 の 例 は 、 再 帰 呼 び 出 し に よ り 階 乗 を 計 算 す る 関 数 で す 。define f (x) {
  if (x <= 1) return (1);
  return (f(x-1) * x);}

readline と libedit の オ プ シ ョ ン
GNU bc は (configure の オ プ シ ョ ン に よ っ て ) GNU readline 入 力 エ デ ィ タ ラ イ ブ ラ リ ま た は BSD libedit ラ イ ブ ラ リ を 使 う よ う に コ ン パ イ ル で き ま す 。 こ れ は 、 bc に 入 力 す る 前 に 、 行 の 編 集 を 可 能 に し ま す 。 以 前 に 入 力 し た 行 の ヒ ス ト リ も 利 用 可 能 に な り ま す 。 こ の オ プ シ ョ ン で コ ン パ イ ル さ れ た bc で は 、 さ ら に 1 つ の 特 殊 な 変 数 history が 追 加 さ れ 、 ヒ ス ト リ に 保 存 さ れ る 行 の 数 を 指 定 し ま す 。 readline で は 、 そ の 値 が -1 (デ フ ォ ル ト 値 )な ら 、 ヒ ス ト リ 行 は 制 限 な く 保 存 さ れ ま す 。 正 の 数 を 指 定 す る と 、 ヒ ス ト リ 行 が そ の 数 に 制 限 さ れ ま す 。 0 な ら ヒ ス ト リ 機 能 が 無 効 に な り ま す 。 デ フ ォ ル ト 値 は 100 で す 。 詳 し く は 、 ユ ー ザ マ ニ ュ ア ル の GNU readlinehistory ラ イ ブ ラ リ と BSD libedit を ご 覧 下 さ い 。 readlinelibedit の 両 方 を 同 時 に 有 効 化 で き ま せ ん 。 相 違 点 こ の バ ー ジ ョ ン の bc は POSIX P1003.2/D11 ド ラ フ ト か ら 実 装 さ れ て お り 、 そ の ド ラ フ ト や 以 前 の 実 装 に 比 べ て い く つ か の 相 違 点 や 拡 張 点 が あ り ま す 。 伝 統 的 に 行 わ れ て い た よ う な dc(1) を 用 い た 実 装 で は あ り ま せ ん 。 こ の バ ー ジ ョ ン は 単 一 プ ロ セ ス で あ り 、 プ ロ グ ラ ム を バ イ ト コ ー ド に 変 換 し た も の を 解 析 し て 実 行 し ま す 。 「 ド キ ュ メ ン ト に 記 載 さ れ て い な い 」 オ プ シ ョ ン (-c) が あ り 、 プ ロ グ ラ ム を 実 行 す る 代 わ り に 、 そ れ を バ イ ト コ ー ド に 変 換 し た 結 果 を 標 準 出 力 に 出 力 し ま す 。 こ れ は 主 と し て 、 パ ー ザ の デ バ ッ グ と 数 学 ラ イ ブ ラ リ の 準 備 に 用 い ら れ ま し た 。 主 な 相 違 点 は 拡 張 機 能 に よ る も の で す 。 機 能 を 高 め た り 追 加 し た り す る た め に 機 能 が 拡 張 さ れ た り 、 新 機 能 が 追 加 さ れ た り し て い ま す 。 相 違 点 と 拡 張 点 の リ ス ト を 以 下 に 示 し ま す 。

LANG こ の バ ー ジ ョ ン は 、 環 境 変 数

LANG お よ び LC_ で 始 ま る す べ て の 環 境

変 数 の 処 理 に 関 し て POSIX 標 準 に 準 拠 し て い ま せ ん 。

名 前 伝 統 的 な

bc お よ び POSIX bc は 、 関 数 、 変 数 、 配 列 の 名 前 と し て 単 一

の 文 字 を 使 い ま す 。 こ の バ ー ジ ョ ン で は 、 先 頭 が 文 字 で 始 ま り 、 文 字 と 数 字 と ア ン ダ ー ス コ ア で 構 成 さ れ る 2 文 字 以 上 の 名 前 が 使 え る よ う に 拡 張 さ れ て い ま す 。

文 字 列 文 字 列 に は

NUL 文 字 を 含 む こ と は で き ま せ ん 。 POSIX で は 、 文 字 列 に

は あ ら ゆ る 文 字 を 含 め る こ と が で き な け れ ば な ら な い 、 と し て い ま す 。

last

POSIX bc に は 変 数 last は あ り ま せ ん 。 bc の 実 装 に よ っ て は 、 last と 同 じ 意 味 で ピ リ オ ド (.) を 用 い る も の が あ り ま す 。

比 較

POSIX bc で は 、 比 較 は if 文 、 while 文 、 for 文 の 第 2 式 の 中 で の み 用 い る こ と が で き ま す 。 ま た 、 こ れ ら の 文 の 中 で は た だ 1 つ の 関 係 演 算 し か 使 え ま せ ん 。

if 文 , else 節

POSIX bc に は else 節 は あ り ま せ ん 。

for 文

POSIX bc で は for 文 の 各 演 算 式 は 省 略 で き ま せ ん 。

&&, ||, !

POSIX bc に は 論 理 演 算 子 は あ り ま せ ん 。

read 関 数

POSIX bc に は read 関 数 は あ り ま せ ん 。

print 文

POSIX bc に は print 文 は あ り ま せ ん 。

continue 文

POSIX bc に は continue 文 は あ り ま せ ん 。

return 文

POSIX bc で は 、 return 文 の 周 り に 括 弧 が 必 要 で す 。 配 列 パ ラ メ ー タ
POSIX bc で は (現 在 の と こ ろ ) 配 列 パ ラ メ ー タ は 完 全 に は 使 え ま せ ん 。 POSIX の 文 法 で は 、 関 数 定 義 で は 配 列 を 使 え ま す が 、 実 際 に 呼 び 出 す と き の パ ラ メ ー タ に 配 列 を 指 定 す る こ と が で き ま せ ん 。 (こ れ は お そ ら く 、 文 法 上 の 見 落 と し で し ょ う 。 ) 伝 統 的 な bc の 実 装 で は 、 配 列 パ ラ メ ー タ は 値 渡 し の み で し た 。

function format

POSIX bc で は 、 開 く ブ レ ー ス が define キ ー ワ ー ド と 同 じ 行 に あ り 、 auto 文 が 次 の 行 に あ る こ と が 必 要 で す 。

=+, =-, =*, =/, =%, =^

POSIX bc で は こ れ ら の 「 旧 式 」 の 代 入 演 算 子 を 定 義 す る 必 要 は あ り ま せ ん 。 こ の バ ー ジ ョ ン で は こ れ ら の 「 旧 式 」 代 入 演 算 子 が 使 え る か も 知 れ ま せ ん 。 limits 文 を 使 っ て 、 イ ン ス ト ー ル し た バ ー ジ ョ ン が こ れ ら を サ ポ ー ト し て い る か ど う か 、 確 か め て み て 下 さ い 。 も し そ の バ ー ジ ョ ン が 「 旧 式 」 代 入 演 算 子 を サ ポ ー ト し て い れ ば 、 文 "a =- 1" は a に 値 -1 を 代 入 す る 代 わ り に a を 1 減 じ ま す 。 数 字 表 記 中 の 空 白 他 の bc 実 装 で は 、 数 字 表 記 の 中 に 空 白 を 含 め る こ と が 許 さ れ ま す 。 例 え ば 、 "x=1 3" は 変 数 x に 値 13 を 代 入 し ま す 。 こ の バ ー ジ ョ ン の bc で は 、 先 の 文 は 文 法 エ ラ ー に な り ま す 。 エ ラ ー と 実 行 こ の バ ー ジ ョ ン の bc は 、 プ ロ グ ラ ム に 文 法 上 の エ ラ ー や 他 の エ ラ ー が 見 つ か っ た 場 合 に ど う い う コ ー ド が 実 行 さ れ る か 、 と い う 点 で 、 他 の 実 装 と 異 な っ て い ま す 。 あ る 関 数 定 義 中 で 文 法 エ ラ ー が 見 つ か る と 、 エ ラ ー 回 復 機 構 は 文 の 先 頭 を 見 つ け て 関 数 の パ ー ズ を 続 け よ う と 努 力 し ま す 。 ひ と た び 関 数 の 中 で 文 法 エ ラ ー が 見 つ か る と 、 そ の 関 数 は 呼 び 出 せ な く な り 、 未 定 義 状 態 と な り ま す 。 対 話 的 実 行 コ ー ド で 文 法 エ ラ ー が あ る と 、 現 在 の 実 行 ブ ロ ッ ク が 無 効 に な り ま す 。 実 行 ブ ロ ッ ク と は 、 ひ と 続 き の 完 全 な 文 の あ と の 行 末 ま で の こ と で す 。 例 え ば 、 次 の コ ー ド
a = 1
b = 2 に は2 つ の 実 行 ブ ロ ッ ク が あ り 、
{ a = 1
b = 2 } に は1 つ の 実 行 ブ ロ ッ ク が あ り ま す 。 ラ ン タ イ ム エ ラ ー が 発 生 す る と 、 現 在 の 実 行 ブ ロ ッ ク の 実 行 が 終 了 し ま す 。 ラ ン タ イ ム の 警 告 が 発 生 し て も 、 現 在 の 実 行 ブ ロ ッ ク は 終 了 し ま せ ん 。 割 り 込 み 対 話 セ ッ シ ョ ン の 間 、 SIGINT シ グ ナ ル (通 常 、 端 末 か ら の Control-C 入 力 で 発 生 し ま す ) に よ っ て 現 在 の 実 行 ブ ロ ッ ク の 実 行 が 中 断 さ れ 、 ど の 関 数 が 中 断 さ れ た か を 示 す 「 ラ ン タ イ ム 」 エ ラ ー が 表 示 さ れ ま す 。 ラ ン タ イ ム の デ ー タ 構 造 を す べ て ク リ ア し た 後 メ ッ セ ー ジ が 表 示 さ れ 、 bc は 次 の 入 力 を 受 け 付 け る 状 態 に な っ た こ と を 示 し ま す 。 こ れ ま で に 定 義 し た 関 数 は す べ て 定 義 さ れ て 残 っ て お り 、 ロ ー カ ル で な い 変 数 の 値 は 割 り 込 み 発 生 時 点 の 値 の ま ま に な っ て い ま す 。 ロ ー カ ル 変 数 と 関 数 パ ラ メ ー タ は す べ て 、 ク リ ア 処 理 に よ っ て 消 去 さ れ ま す 。 非 対 話 セ ッ シ ョ ン で は 、 SIGINT シ グ ナ ル で bc の 実 行 全 体 が 終 了 し ま す 。 限 界 以 下 の 項 目 が 現 在 の bc プ ロ セ ッ サ の 限 界 値 と な っ て い ま す 。 こ の う ち い く つ か は 、 イ ン ス ト ー ル 時 に 変 更 で き ま す 。 実 際 の 値 を 得 る に は limits 文 を 使 っ て 下 さ い 。

BC_BASE_MAX 現 在 の と こ ろ 、 出 力 の 基 数 の 最 大 値 は 999 に 設 定 さ れ て い ま す 。 入 力 側 の 基 数 の 最 大 値 は 16 で す 。
BC_DIM_MAX 現 在 の と こ ろ 65535 と し て 配 布 さ れ て い ま す が 、 イ ン ス ト ー ル し た バ ー ジ ョ ン で は 異 な っ て い る か も 知 れ ま せ ん 。
BC_SCALE_MAX 小 数 点 以 下 の 桁 数 は INT_MAX 桁 に 制 限 さ れ て い ま す 。 ま た 、 小 数 点 よ り 上 の 桁 数 も INT_MAX 桁 に 制 限 さ れ て い ま す 。
BC_STRING_MAX 文 字 列 中 の 文 字 数 は INT_MAX 文 字 に 制 限 さ れ て い ま す 。

指 数 累 乗 演 算

(^) の 指 数 の 値 は LONG_MAX に 制 限 さ れ て い ま す 。

変 数 名 単 純 変 数 、

配 列 、 関 数 各 々 に つ い て 、 一 意 に 識 別 さ れ る 名 前 は 32767 個 に 制 限 さ れ て い ま す 。

環 境 変 数

bc は 以 下 の 環 境 変 数 を 解 釈 し ま す 。
POSIXLY_CORRECT

-s オ プ シ ョ ン と 同 じ で す 。

BC_ENV_ARGS こ れ は bc に 引 数 を 渡 す 別 の 方 法 で 、 コ マ ン ド ラ イ ン 引 き 数 と 同 じ 書 式 で す 。 こ の 引 数 が 最 初 に 処 理 さ れ る の で 、 こ の 環 境 変 数 で 指 定 さ れ た フ ァ イ ル は コ マ ン ド ラ イ ン 引 数 で 指 定 さ れ た フ ァ イ ル よ り も 先 に 処 理 さ れ ま す 。 こ れ に よ り 、 毎 回 bc を 呼 び 出 す ご と に 処 理 す る 「 標 準 の 」 オ プ シ ョ ン や フ ァ イ ル を 設 定 で き ま す 。 こ の 環 境 変 数 で 指 定 す る フ ァ イ ル に は 、 bc を 走 ら せ る た び に 定 義 し て お き た い よ う な 関 数 の 定 義 を 書 い て お く と よ い で し ょ う 。
BC_LINE_LENGTH 数 字 を 出 力 す る と き の 1 行 の 文 字 数 を 整 数 で 指 定 し ま す 。 数 字 が 長 過 ぎ る と 、 バ ッ ク ス ラ ッ シ ュ と 改 行 を 含 め た 出 力 と な り ま す 。

診 断

コ マ ン ド ラ イ ン で 指 定 し た フ ァ イ ル が オ ー プ ン で き な い 場 合 、 bc は フ ァ イ ル が 利 用 で き な い 旨 を 表 示 し て 終 了 し ま す 。 ま た 、 コ ン パ イ ル 時 あ る い は ラ ン タ イ ム の 診 断 メ ッ セ ー ジ も あ り ま す が 、 そ れ ら は 自 身 で 理 解 で き る よ う に な っ て い る は ず で す 。

バ グ

エ ラ ー リ カ バ リ が ま だ う ま く い っ て い ま せ ん 。 バ グ 報 告 は 、 bug-bc [AT] gnu.org に 電 子 メ ー ル で お 願 い し ま す 。 単 語 ’’bc’’ を ’’Subject:’’ フ ィ ー ル ド の ど こ か に 入 れ て お い て く だ さ い 。

作 者

Philip A. Nelson
philnelson [AT] acm.org

謝 辞

実 装 を テ ス ト す る 際 に 広 範 囲 に 手 助 け し て く れ た Steve Sommars (Steve.Sommars [AT] att.com) に 感 謝 し ま す 。 た く さ ん の 素 晴 ら し い 意 見 を も ら い ま し た 。 彼 の お か げ で と て も よ い も の に な り ま し た 。