日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
BC(1) General Commands Manual BC(1) 名称 bc - 任意精度の 10 進数の算術言語と計算機 書式 bc [-cCghilPqRsvVw] [--digit-clamp] [--no-digit-clamp] [--global- stacks] [--help] [--interactive] [--mathlib] [--no-prompt] [--no-read- prompt] [--quiet] [--standard] [--warn] [--version] [-e expr] [--expression=expr...] [-f file...] [--file=file...] [file...] [-I ibase] [--ibase=ibase] [-O obase] [--obase=obase] [-S scale] [--scale=scale] [-E seed] [--seed=seed] 解説 bc(1) は、1991 年に POSIX によって最初に標準化された言語のための対話型 プロセッサです。(規格セクションを参照。) 言語は、無制限精度の 10 進数演 算を提供し、C 言語に似ていますが、違いもあります。このような違いは、こ の文書で言及しています。 オプションを解析して処理した後に、この bc(1) は、コマンド行で与えられた あらゆるファイルを読み込み、stdin から読み込む前に、それらを実行しま す。 この bc(1) は、GNU bc(1) を含んで (そして特に) あらゆる bc(1) に対して 簡単に置き換えることができます。また、他の実装よりも多くの拡張機能と追 加機能があります。 注意: 他の bc(1) のための何らかのスクリプトで、この bc(1) を実行してい ることが、解析エラーとなるなら、この bc(1) がキーワードとして予約された 単語が、たぶん関数、変数、または配列の名前として使用されているためで す。これを修正するために、コマンド行オプション -r keyword を使用しま す、ここで、keyword は、スクリプトの名前として使用されるキーワードで す。詳細については、オプションセクションを参照してください。 他の bc(1) の実装のために意味するスクリプトを解析することが、まだうまく いかないなら、それは、バグであり、報告されるべきです。バグセクションを 参照してください。 オプション 次は、bc(1) が受け付けるオプションです。 -C, --no-digit-clamp 数値を解析するとき、現在の ibase 以上の数字のクランプ (固定) を 無効にします。 これは、数字から数値に加算される値は常に、数字の値が、最下位の数 字で 0 から始まる、数字の位置をべき乗した ibase の値を乗算するこ とを意味します。 これおよび/または -c または --digit-clamp オプションが複数回指定 されるなら、最後に指定されたオプションが使用されます。 このオプションは、BC_DIGIT_CLAMP 環境変数 (環境変数セクションを 参照) と -h または --help オプションで問い合わせることができる、 デフォルトを上書きします。 これは、移植性のない拡張です。 -c, --digit-clamp 数値を解析するとき、現在の ibase 以上の数字のクランプ (固定) を 有効にします。 これは、ibase 以上の数字から数値に加算された値が、ibase の値から 1 を引いた値に、最下位の数字で 0 から始まる数字の位置で累乗した ibase の値を掛けた数字であることを意味します。 これおよび/または -C または --no-digit-clamp オプションが複数回 指定されたなら、最後に指定されたオプションが使用されます。 このオプションは、BC_DIGIT_CLAMP 環境変数 (環境変数セクションを 参照) と -h または --help オプションで問い合わせることができる、 デフォルトを上書きします。 これは、移植性のない拡張です。 -E seed, --seed=seed seed が底 10 であると仮定して、組み込み変数 seed を値 seed に設 定します。seed が有効な数値でないなら、致命的なエラーになりま す。 このオプションの複数のインスタンスが指定されているなら、最後が使 用されます。 これは、移植性のない拡張です。 -e expr, --expression=expr expr を評価します。複数の式が与えられるなら、それらは、順番に評 価されます。ファイルが同じように指定されているなら (-f と --file オプションを参照)、式とファイルは、指定された順序で評価されま す。これは、ファイルが式の前に与えられたなら、ファイルが読み込ま れ、最初に評価されることを意味します。 このオプションがコマンド行で指定されたなら (すなわち、 BC_ENV_ARGS ではなく、環境変数セクションを参照)、すべての式と ファイルを処理した後に、- (stdin) が引数として指定されないなら、 コマンド行または BC_ENV_ARGS であるかどうか、少なくとも -f また は --file にいちど与えられないなら、bc(1) は終了します。しかしな がら、-f- または同等のものが与えられた後に、その他の -e, --expression, -f または --file 引数が与えられるなら、bc(1) は、 致命的なエラーを出力して、終了します。 これは、移植性のない拡張です。 -f file, --file=file file を読み込み、stdin から読み込まれたかのように、1 行ずつ評価 します。また、式が指定されているなら (-e と --expression オプ ションを参照)、式は、与えられた順序で評価されます。 このオプションがコマンド行で指定されるなら (すなわち、 BC_ENV_ARGS ではなく、環境変数セクションを参照)、すべての式と ファイルを処理した後に、- (stdin) が引数として指定されないなら、 少なくとも -f または --file にいちど与えられないなら、bc(1) は、 終了します。しかしながら、-f- または同等のものが与えられた後に、 その他の -e, --expression, -f または --file 引数が与えられるな ら、bc(1) は、致命的なエラーを出力して、終了します。 これは、移植性のない拡張です。 -g, --global-stacks グローバルな ibase, obase, scale と seed をスタックに切り替えま す。 これは、すべて 4 つのの現在値のコピーが、関数を呼び出すたびにス タックにプッシュされ、同様に関数が返るたびにポップされます。これ は、あらゆるものと変更が他の関数に影響を与えることを心配すること なく、これらのグローバルのすべてを関数が、割り当てることができる ことを意味します。したがって、仮想的な関数は、基底 b の x を印刷 (表示) ことが、次のように書くことができることを output(x,b) を指 定します。 define void output(x, b) { obase=b x } 代りに次のように: define void output(x, b) { auto c c=obase obase=b x obase=c } これは、関数をより簡単に書けるようにします。 (注意: 関数 output(x,b) は、拡張数学ライブラリに存在します.ライ ブラリセクションを参照してください)。 しかしながら、このフラグを使用することは、関数がグローバルに ibase, obase, scale または seed を設定することができないことを意 味するので、そのために作られた関数は、もはや動作することできませ ん。それには、2 つの使用する場合が考えられ、それぞれに解決策があ ります。 最初に、関数が、起動時に bc(1) を数値変換器への切り替えで呼び出 されるなら、そのケーパビリティを様々なシェルのエイリアスで置き換 えることができます。使用例: alias d2o="bc -e ibase=A -e obase=8" alias h2b="bc -e ibase=G -e obase=2" 2 番目に、関数の目的があらゆる他の目的のためにグローバルに ibase, obase, scale または seed を設定することであるなら、(設定 するグローバルの数を基本として)、1 つから 4 つの関数に分割して、 それらの関数のそれぞれが、グローバルのために希望する値を返すこと ができます。 seed を設定する関数について、seed に割り当てられた値は、親関数に 伝搬しません。これは、それらが見る擬似乱数のシーケンスがあらゆる 親が見る、同じ擬似乱数のシーケンスでないことを意味します。これ は、いったん seed が設定されている場合にのみです。 関数が親の疑似乱数のシーケンスに影響しなしことを希望しないけれど も、同じ seed を使用したいなら、次のような行を使用することができ ます: seed = seed このオプションの振る舞いが bc(1) の実行ごとに希望するなら、ユー ザは、BC_ENV_ARGS を定義し、このオプションを含めることを確認する ことができます (詳細については、環境変数セクションを参照)。 -s, -w または同等のものが使用されるなら、このオプションは、無視 されます。 これは、移植性のない拡張です。 -h, --help 使用法のメッセージを印刷 (表示) して、終了します。 -I ibase, --ibase=ibase ibase が底 10 であると仮定して、組み込み変数 ibase を値 ibase に 設定します。ibase が有効な数値でないなら、致命的なエラーになりま す。 このオプションの複数のインスタンスが指定されているなら、最後が使 用されます。 これは、移植性のない拡張です。 -i, --interactive 強制的に対話モードにします。対話型モードセクションを参照) これは、移植性のない拡張です。 -L, --no-line-length 行の長さのチェックを無効にし、バックスラッシュと改行なしに、数字 を印刷 (表示) します。言い換えれば、このオプションは、 BC_LINE_LENGTH を 0 に設定します (環境変数セクションを参照)。 これは、移植性のない拡張です。 -l, --mathlib scale (構文セクションを参照) を 20 に設定し、コマンド行で指定さ れたあらゆる式またはファイルを含んで、あらゆるコードを実行する前 に、含まれている数学ライブラリと拡張数学ライブラリをロードしま す。 ライブラリに何があるかを知るためには、ライブラリセクションを参照 してください。 -O obase, --obase=obase obase が底 10 であると仮定して、組み込み変数 obase を値 obase に 設定します。obase が有効な数値でないなら、致命的なエラーになりま す。 このオプションの複数のインスタンスが指定されているなら、最後が使 用されます。 これは、移植性のない拡張です。 -P, --no-prompt TTY モードでプロンプトを無効にします。(プロンプトは、TTY モード でのみ有効です。TTY モードセクションを参照)。これは、主に、プロ ンプトを必要としないか、bc(1) でプロンプトを出力することに慣れて いないユーザ向けです。そのようなユーザのほとんどは、BC_ENV_ARGS のこのオプションを置きたいでしょう (環境変数セクションを参照)。 これらのオプションは、BC_PROMPT と BC_TTY_MODE 環境変数を上書き します (環境変数セクションを参照)。 これは、移植性のない拡張です。 -q, --quiet このオプションは、GNU bc(1) (https://www.gnu.org/software/bc/) との互換性のためのものです。それは、no-op です。このオプションな しで、GNU bc(1) は、著作権ヘッダを印刷 (表示) します。この bc(1) は、BC_BANNER 環境変数が設定され、0 以外の整数が含まれているな ら、または、この bc(1) がデフォルトで表示されたヘッダつきで構築 されたなら、1 つ以上の -v, -V または --version オプションが与え られる場合にのみ著作権ヘッダを印刷 (表示) します。いずれかが該当 するなら、このオプションは、bc(1) がヘッダを印刷 (表示) すること を防ぎます。 これは、移植性のない拡張です。 -R, --no-read-prompt TTY モードで読み込みプロンプトを無効にします。(読み込みプロンプ トは、TTY モードでのみ有効です。TTY モードセクションを参照してく ださい)。これは、主に、プロンプトを必要としないか、bc(1) でプロ ンプトを出力することに慣れていないユーザ向けです。そのようなユー ザのほとんどは、BC_ENV_ARGS にこのオプションを置きたいと思うで しょう (環境変数セクションを参照)。このオプションは、また、ユー ザのためのプロンプトを入力する bc(1) スクリプトのハッシュバング 行で役に立ちます。 このオプションは、読み込みプロンプトが、read() 組み込み関数が呼 び出されたときにのみ使用されるので、通常のプロンプトを無効にしま せん。 これらのオプションは、BC_PROMPT と BC_TTY_MODE 環境変数 (環境変 数セクションを参照) を上書きしますが、読み込みプロンプトに対して のみです。 これは、移植性のない拡張です。 -r keyword, --redefine=keyword 関数名、変数名、配列名として使用することを許可するために keyword を再定義します。これは、他の bc(1) 実装のために作られているスク リプトを解析するとき、この bc(1) が解析エラーを起こすとき、役に 立ちます。 この bc(1) が再定義を許可しているキーワードは、次の通りです: • abs • asciify • continue • divmod • else • halt • irand • last • limits • maxibase • maxobase • maxrand • maxscale • modexp • print • rand • read • seed • stream これらのキーワードのいずれかが、スクリプトの関数名、変数名、また は配列名として使用されるなら、キーワードを引数としてこのオプショ ンを使用します。複数のキーワードが使用されているなら、それらすべ てにこのオプションを使用します。それは、複数回使用することがでま す。 キーワードは、組み込みの数学ライブラリ (ライブラリセクションを参 照) を解析するとき、再定義されません。 POSIX 標準によって強制されたキーワードを再定義することは致命的な エラーです (規格セクションを参照)。この bc(1) がキーワードとして 予約していない単語を再定義しようと試みると致命的なエラーになりま す。 -S scale, --scale=scale scale が底 10 であると仮定して、組み込み変数 scale を値 scale に 設定します。scale が有効な数値でないなら、致命的なエラーになりま す。 このオプションの複数のインスタンスが指定されているなら、最後が使 用されます。 これは、移植性のない拡張です。 -s, --standard 標準 (規格セクションを参照) で定義された言語を正確に処理し、拡張 機能が使用されているなら、エラーとなります。 これは、移植性のない拡張です。 -v, -V, --version バージョン情報 (copyright ヘッダ) を印刷 (表示) して、終了しま す。 これは、移植性のない拡張です。 -w, --warn (エラーではなく) 警告が非標準の拡張と通常継続される実行について 印刷 (表示) されことを除いて、-s と --standard に似ています。 これは、移植性のない拡張です。 -z, --leading-zeroes bc(1) は、-1 より大きくて、1 より小さく、そして、0 に等しくない すべての数字を先導する 0 を付けて印刷 (表示) します。 これは、拡張数学ライブラリの plz(x), plznl(x)**, pnlz(x) と pnlznl(x) 関数で個別の数値のために設定することができます (ライブ ラリセクションを参照)。 これは、移植性のない拡張です。 すべての長いオプションは、移植性のない拡張です。 STDIN -f, --file, -e または --expression オプションでファイルまたは式が与えら れないなr、bc(1) は、stdin (標準入力) から読み込みます。 しかしながら、これにはいくつかの注意点があります。 最初に、stdin は、一度に一行ずつ評価されます。唯一の例外は、解析が完了 できない場合です。ということは、文字列を終了せずに文字列を開始するか、 または関数、if 文、または終了しないループを開始することは、また bc(1) が実行されません。 2 番目に、if 文の後に、bc(1) は、else 文が続くかどうか分からないので、 else 文がないと分かるまで実行されません。 STDOUT エラーでないあらゆる出力は、stdout に書き込まれます。さらに、ヒストリ (歴史セクションを参照) とプロンプト (TTY モードセクションを参照) が有効 になっているなら、両方は、stdout に出力されます。 注意: 他の bc(1) の実装とは異なり、この bc(1) は、stdout に書き込むこと ができないなら、致命的なエラー (終了ステータスセクション参照) を発行す るので、stdout がクローズされたなら、bc >&- のように、それは、エラーで 終了します。これは、stdout がファイルにリダイレクトされるとき、bc(1) が 問題を報告することができるように行なわれます。 他の bc(1) の実装の振る舞いに依存しているスクリプトがあるなら、それらの スクリプトの stdout を /dev/null にリダイレクトするように変更することを 推奨します。 STDERR あらゆるエラー出力は、stderr に書き込まれます。 注意: 他の bc(1) の実装とは異なり、この dc(1) は、stderr に書き込めない なら、致命的なエラー (終了ステータスセクションを参照) を発行するので、 bc 2>&- のように、stderr がクローズされるなら、それは、エラーで終了しま す。これは、stderr がファイルにリダイレクトされるとき、bc(1) がエラー コードで終了できるように行ないます。 他の bc(1) の実装の振る舞いに依存しているスクリプトがあるなら、それらの スクリプトの stderr を /dev/null にリダイレクトするように変更することを 推奨します。 構文 bc(1) プログラムのための構文は、いくつかの違いがあるものの、ほとんど C に似ています。この bc(1) は、この bc(1) が受け付ける言語のより完全なリ ソースである、POSIX 標準 (規格セクションを参照) にしたがっています。こ のセクションは、標準に対するすべての拡張の概要とリストであることを意味 しています。 以下のセクションで、E は、式を意味し、S は、文を意味し、そして、I は、 識別子を意味します。 識別子 (I) は、小文字で始まり、小文字 (a-z)、数字 (0-9) と下線 (_) の任 意の数 (BC_NAME_MAX-1 まで) だけ続けることができます。正規表現は、[a- z][a-z0-9_]*。1 文字以上の識別子は、移植性のない拡張です。 ibase は、定数をどのように解釈するかを決定するグローバル変数です。それ は、"入力"ベース、または入力された数値を解釈するための数値ベースです。 ibase の初期値は、10 です。-s (--standard) と -w (--warn) フラグがコマ ンド行で与えられていないなら、ibase のための最大の許容値は、36 です。そ うでなければ、それは、16 です。ibase のための最小の許容値は、2 です。 ibase のための最大の許容値は、maxibase() 組み込み関数を使用して bc(1) プログラムで問い合わせることができます。 obase は、結果の出力方法を決定するグローバル変数です。それは、"出力" ベース、または、数字を出力するために使用される数字のベースです。obase の初期値は、10 です。obase のための最大の許容値は、BC_BASE_MAX で、 maxobase() 組み込み関数を使用して bc(1) プログラムで問い合わせることが できます。obase のための最小の許容値は、0 です。obase が 0 であるなら、 値は、科学的記法で出力され、obase が 1 であるなら、値は、技術的記法で出 力されます。そうでなければ、値は、指定されたベースで出力されます。 科学的記法と技術的記法での出力は、移植性のない拡張です。 式の scale は、小数点の右の式の結果の桁数であり、scale は、例外なく、あ らゆる演算の精度を設定するグローバル変数です。scale の初期値は、0 で す。scale を負にすることはできません。scale のための最大の許容値は、 BC_SCALE_MAX で、maxscale() 組み込み関数を使用して bc(1) プログラムで問 い合わせることができます。 bc(1) は、global (グローバル) 変数と local (ローカル) 変数の両方があり ます。すべての local 変数は、その関数にローカルです。それらh、パラメー タまたは、関数の auto リストで紹介されています (関数セクションを参照)。 変数がパラメータでなく、または auto リストでなくアクセスされるなら、そ れは、global と仮定されます。親の関数が、子の関数が global とみなされる 変数の local 変数バージョンがあるなら、子の関数の global 変数の値は、実 際の global 変数の値ではなく、親の関数の変数の値です。 上記のすべては、同様に、配列にも適用します。 式 (すなわち、名前の付いた式またはオペランドのいずれか) である文の値 は、最下位の優先順位の演算子が代入演算子であり、そして式が括弧で囲まれ ていないなら、印刷 (表示) されます。 また、印刷 (表示) された値は、特殊変数 last に割り当てられます。またh、 単一のドット (.) は、last のためのの同義語として使用されます。これら は、移植性のない拡張です。 セミコロンまたは改行のいずれも、文の区切りです。 コメント コメントには 2 つの種類があります: 1. ブロックのコメントは、/* と */ で囲まれています。 2. 行のコメントは、# から次の改行までです。これは、移植性のない拡張で す。 名前付きの式 次は、bc(1) の名前付き式です: 1. 変数: I 2. 配列の要素: I[E] 3. ibase 4. obase 5. scale 6. seed 7. last または単一のドット (.) 番号 6 と 7 は、移植性のない拡張です。 seed の意味は、現在の擬似乱数生成器に依存しますが、新しいメジャーバー ジョンを除いて変更されないことが保証されています。 scale と値の符号は、意味があります。 以前に使用された seed 値が、seed に割り当てられ、再び使用されたなら、擬 似乱数生成器は、seed 値が、以前に使用されたとき、同じ擬似乱数のシーケン スを生成することが保証されます。 seed に割り当てられた正確な値は、seed がただちに再び問い合わせるなら、 返されることは保証されません。しかしながら、seed が異なる値を返したな ら、seed に割り当てられるとき、両方の値は、同じ擬似乱数のシーケンスを生 成することが保証されています。これは、seed に割り当てられた特定の値が、 ユニークな疑似乱数のシーケンスを生成しないことを意味します。seed の値 は、irand(E) に渡されたパラメータが 0, 1 または負である場合を除いて、 rand() と irand(E) オペランド (後述のオペランドサブセクションを参照) の いずれがを使用した後に変更されます。 長さ (10 進数の有効桁数) または seed に代入することがきる値の scale に 制限はありません。 変数と配列は、干渉しません.ユーザは、変数と同じ名前の配列を持つことが できます.また、これは、関数 (関数セクションを参照) に適用されるので、 ユーザは、それらが、お互いに影でない、関数の内部であるかどうかにかかわ らず、すべてに同じ名前がある、変数、配列と関数を指定できます。 名前付きの式は、increment(増加)/decrement(減少) 演算子のオペランド、と assignment (代入) 演算子 (演算子セクションを参照) の左辺として必要とさ れます。 オペランド 次は、bc(1) の有効なオペランドです: 1. 数字 (下記の数字セクションを参照)。 2. 配列のインデックス (I[E])。 3. (E): E の値 (優先順位を変更するために使用されます)。 4. sqrt(E): E の平方根です。E は、負であってはなりません。 5. length(E): E の 10 進数の有効桁数。小数点位なしで 0 に対して 1 を返 します。文字列が与えられるなら、文字列の長さが返されます。length(E) に文字列を渡すことは、移植性のない拡張です。 6. length(I[]): 配列 I の要素数。これは、移植性のない拡張です。 7. scale(E): E の scale。 8. abs(E): E の絶対値。これは、移植性のない拡張です。 9. is_number(E): 与えられた引数が数値であるなら、1、文字列であるなら、 0 です。これは、移植性のない拡張です。 10. is_string(E): 与えられた引数が文字列であるなら、1、数値であるなら 0 です。これは、移植性のない拡張です。 11. modexp(E, E, E): モジュール式の指数計算で、最初の式は、基数、2 番目 は、指数、そして 3 番目は、剰余 (modulus) です。すべての 3 つの値 は、整数でなければなりません。2 番目の引数は、負であってはなりませ ん。3 番目の引数は、0 であってはなりません。これは、移植性のない拡 張です。 12. divmod(E, E, I[]): 1 つの演算で除算と剰余 (modulus)。これは、最適化 のためです。最初の式は、被除数で、2 番目の式は、0 であってはならな い除数です。返り値は、商で、モジュールは、指定された配列 (最後の引 数) のインデックス 0 に格納されます。これは、移植性のない拡張です。 13. asciify(E): E が文字列であるなら、引数の最初の文字である文字列を返 します。それが数値であるなら、数値の mod 256 を計算し、1 文字の文字 列としてその数値を返します。これは、移植性のない拡張です。 14. asciify(I[]): 引数によって識別される配列の各要素で asciify(E) を実 行した結果である文字で構成される文字列。これによって、複数文字の文 字列を作成して格納することができます。これは、移植性のない拡張で す。 15. I(), I(E), I(E, E) など、ここで、I は、void (有効) でない関数の識別 子です (関数セクションの viod 関数サブセクションを参照)。また、E の (複数の) 引数は、関数定義の対応するパラメータが配列参照であるなら、 自動的に配列参照になる (関数セクションの配列参照サブセクションを参 照)、形式 I[] の配列です。 16. read(): stdin から一行読み込み、それを式として使用します。その式の 結果は、read() オペランドの結果です。これは、移植性のない拡張です。 17. maxibase(): 最大の許容値の ibase。これは、移植性のない拡張です。 18. maxobase(): 最大の許容値の obase。これは、移植性のない拡張です。 19. maxscale(): 最大の許容の scale。これは、移植性のない拡張です。 20. line_length(): BC_LINE_LENGTH で設定された行の長さ (環境変数セク ションを参照)。これは、移植性のない拡張です。 21. global_stacks(): グローバルスタックが -g または --global-stacks オ プションで有効にされていないなら、0、そうでなければ、0 以外です。オ プションセクションを参照。これは、移植性のない拡張です。 22. leading_zero(): -z または -leading-zeroes オプションで先導する 0 が 有効にされないなら、0、そうでなければ、0 以外です。オプションセク ションを参照。これは、移植性のない拡張です。 23. rand(): 0 (両端を含む) と BC_RAND_MAX (両端を含む) の間の疑似乱数整 数。このオペランドを使用することは、seed の値を変更します。これは、 移植性のない拡張です。 24. irand(E): 0 (両端を含む) と Eの値 (両端を含まない) の間の疑似乱数整 数。EE がであるか、または整数でない (E's の scale が 0 でない) な ら、エラーが発生し、bc(1) は、リセットされますが (リセットセクショ ン参照)、f[B]seed は、変更されないままとなります。E が BC_RAND_MAX よりも大きいなら、より高い境界は、擬似乱数整数に BC_RAND_MAX+1 の適 切な累乗を掛け、それらをともに加算していくつかの擬似乱数整数を生成 することによって、尊重されます。したがって、このオペランドで生成す ることができる整数のサイズは、無制限です。このオペランドを使用する ことは、E の値が 0 または 1 でないなら、seed の値を変更します。その 場合に、0 が返され、seed は、変更されません。これは、移植性のない拡 張です。 25. maxrand(): rand() によって返される最大の整数です。これは、移植性の ない拡張です。 rand() と irand(E) によって生成された整数は、擬似乱数生成器の制限に従っ て、できるだけ公平であることが保証されています。 注意: rand() と irand(E) で擬似乱数生成器によって返される値は、暗号的に 安全でないことが保証されています。これは、シード付きの擬似乱数生成器を 使用していることの結果です。しかしながら、同一の seed 値で再現可能であ ることが保証されています。これは、bc(1) の疑似乱数値が、疑似乱数の再現 可能なストリームが本質的要素であるところでのみ使用されるべきです。それ 他の場合に、シードがない擬似乱数生成器を使用します。 数字 数字は、基数に対して数字、大文字と多くても 1 つのピリオドからなる文字列 です。数字は、BC_NUM_MAX までの桁を持つことができます。大文字は、1 から 始まる 9 にアルファベットの位置を加えたもに等しくなります (すなわち、A は、10 または 9+1 に等しい)。 数字または文字が ibase の現在の値で意味をなさない (すなわち、それらが ibase の現在の値以上である) なら、振る舞いは、-c/--digit-clamp または -C/--no-digit-clamp オプション (オプションセクションを参照)、 BC_DIGIT_CLAMP 環境変数の存在と設定 (環境変数セクションを参照)、または -h/--help オプションで問い合わせすることができる、デフォルトに依存しま す。 クランプ (固定) がオフであるなら、ibase の現在の値以上の数字または文字 は、変更されません。代わりに、指定された値は、ibase の適切なべき乗を掛 けて、数値に加算します。これは、3 の ibase で、数値 AB は、10 の 3 倍プ ラス 11 または 41 である、3^1*A+3^0*B に等しいことを意味します。 クランプ (固定) がオンであるなら、ibase の現在の値以上の数字または文字 は、ibase の適切なべき乗で乗算され、数値に追加される前に、ibase の有効 な最大数字の値に設定されます。これは、3 の ibase で、数値 AB は、2 の 3 倍プラス 2 または 8 である 3^1*2+3^0*2 に等しくなることを意味します。 クランプ (固定) に例外が 1 つあります: 単一文字の数字 (すなわち、A の み)。そのような数値は、クランプ (固定) されることはなく、可能な限り最高 の ibase にある値が常に取られます。これは、A だけが常に 10 進数の 10 に 等しく、Z だけが常に 10 進数の 35 に等しいことを意味します。この振る舞 いは、標準 (規格セクションを参照) によって強制されていて、ibase の現在 の値に関係なく、現在の ibase を (i コマンドで) 設定する簡単な方法を提供 することを意味しています。 クランプ (固定) がオンで、クランプされた文字の値が必要であるなら、先導 する 0 を使用します、すなわち、A について、0A を使用します。 さらに、bc(1) は、科学的記法の数値を受け付けます。これらは、形式 <number>e<integer> があります。指数 (e の後の部分) は、整数でなければな りません。例は、1892370000 に等しい、1.89237e9 です。また、負の指数も許 可されるので、4.2890e-3 は、0.0042890 と等しくなります。 科学的記法を使用することは、それぞれ、-s または -w、コマンド行オプショ ン (または同等のもの) が、与えられているなら、エラーまたは警告となりま す。 警告: 科学的記法の数値と指数の両方は、現在の ibase に従って解釈されます が、数値は、現在の ibase にかかわらず、10^exponent が掛けられます。例え ば、ibase が 16 で、bc(1) が数字の文字列 FFeA が与えられるなら、10 進数 の結果は、2550000000000 で、bc(1) に数字の文字列 10e-4 が与えられるな ら、10 進数の結果は、0.0016 となります。 科学的記法として入力を受け付けることは、移植性のない拡張です。 演算子 次の算術演算子と論理演算子を使用することができます。それらは、低い優先 順位の順序でリストされます。同じグループの演算子は、同じ優先順位があり ます。 ++ -- タイプ: 前置詞と後置詞 結合規則: なし 説明: 増加, 減少 - ! タイプ: 後置詞 結合規則: なし 説明: 否定, ブール値 not $ タイプ: 後置詞 結合規則: なし 説明: 切り捨て @ タイプ: バイナリ 結合規則: 右 説明: 精度の設定 ^ タイプ: バイナリ 結合規則: 右 説明: べき乗 * / % タイプ: バイナリ 結合規則: 左 説明: 乗算, 除算, 剰余 (modulus) + - タイプ: バイナリ 結合規則: 左 説明: 加算, 減算 << >> タイプ: バイナリ 結合規則: 左 説明: 左にシフト, 右にシフト = <<= >>= += -= *= /= %= ^= @= タイプ: バイナリ 結合規則: 右 説明: 割り当て == <= >= != < > タイプ: バイナリ 結合規則: 左 説明: 関係 && タイプ: バイナリ 結合規則: 左 説明: ブール値論理積 (and) || タイプ: バイナリ 結合規則: 左 説明: ブール値論理和 (or) 演算子は、以下で詳しく説明されています。 ++ -- 前置詞と後置詞の増加と減少演算子は、C 言語と同じように振る舞いま す。それらは、オペランドとして名前付き式 (名前付き式セクションを 参照) を必要とします。 これらの演算子の前置詞バージョンは、より効率的です。可能であれ ば、これらを使用します。 - 否定演算子は、ユーザが、値 0 の式を否定しようと試みるなら、0 を 返します。そうでなければ、符号を反転させた式のコピーが返されま す。 ! ブール値 not 演算子は、式が 0 であるなら、1 を返し、そうでなけれ ば、0 を返します。 これは、移植性のない拡張です。 $ 切り捨て演算子は、削除されたすべての scale とともに与えられた式 のコピーを返します。 これは、移植性のない拡張です。 @ 精度設定演算子は、2 つの式を取り、2 番目の式の値と等しい scale がある最初のコピーを返します。それは、数値が、(最初の式の scale が 2 番目の式の値と一致するなら)、変更せずに返される、(小さいな ら) 拡張される、かまたは (大きいなら) 切り捨てられることを意味し ます。 2 番目の式は、整数 (scale なし) でなければならなくて、負であって はなりません。 これは、移植性のない拡張です。 ^ べき乗演算子 (C 言語のように排他的な or演算子ではなく) は、2 つ の式を取り、最初の式を 2 番目の式の値のべき乗にします。結果の scale は、scale と等しくなります。 2 番目の式は、(scale ではなく) 整数でなければならず、負の値であ るなら、最初の値は、0 であってはなりません。 * 乗算演算子は、2 つの式を取り、それらを乗算し、その積を返します。 a が最初のの式の scale であり、b が 2 番目の式の scale であるな ら、結果の scale は、min() と max() が明らかな値を返すところで、 min(a+b,max(scale,a,b)) と等しくなります。 / divide 演算子は、2 つの式を取り、それらを割って、商を返します。 結果の scale は、scale の値とします。 2 番目の式は、0 であってはなりません。 % 剰余演算子は、2 つの式 a と b を取り、1) a/b を現在の scale に計 算し、2) ステップ 1 の結果を使用して a-(a/b)*b を scale max(scale+scale(b),scale(a)) に計算することによって、これらを評 価します。 2 番目の式は、0 であってはなりません。 + 加算演算子は、a と b の 2 つの式を取り、a と b の scale の最大値 に等しい scale とともに、合計を返します。 - 減算演算子は、a と b の 2 つの式を取り、a と b の scale の最大値 に等しい scale とともに、差分を返します。 << 左シフト演算子は、a と b の 2 つの式を取り、b の位置に右に移動し た小数点とともに a の値のコピーを返します。 2 番目の式は、(scale ではない) 整数でなければならなくて、負で あってはなりません。 これは、移植性のない拡張です。 >> 右シフト演算子は、a と b の 2 つの式を取り、b の位置を左に移動し た小数点とともに a の値のコピーを返します。 2 番目の式は、(scale ではない) 整数でなければならなくて、負で あってはなりません。 これは、移植性のない拡張です。 = <<= >>= += -= *= /= %= ^= @= 代入演算子は、a が名前付きの式である、(名前付きの式サブセクショ ンを参照) a と b の 2 つの式を取ります。 = に対して、b がコピーされ、その結果が a に代入されます。その他 について、a と b は、対応する算術演算子のオペランドとして適用さ れ、結果は、a に代入されます。 拡張される演算子に対応する代入演算子は、それ自体移植性のない拡張 です。 == <= >= != < > 関係演算子は、a と b の 2 つの式を比較し、関係が成立するなら、C 言語のセマンティクスにしたがって結果は、1 になります。そうでなけ れば、それは、0 です。 C 言語とは異なり、これらの演算子は、a=b>c が (a=b)>c と解釈され ることを意味して、代入演算子よりも低い優先順位があることに注意し てください。 また、標準 (規格セクションを参照) とは異なり、これらの演算子は、 他の式を使用することができる場所ならどこにでも現れることができま す。この許容範囲は、移植性のない拡張です。 && ブール値論理積 (and)演算子は、2 つの式を取り、両方の式が 0 でな いなら、1 を返し、そうでなければ、0 を返します。 これは、短絡的な演算子ではありません。 これは、移植性のない拡張です。 || ブール値論理和 (or)演算子は、2 つの式を取り、式の 1 つか 0 でな いなら、1 を返し、そうでなければ、0 を返します。 これは、短絡的な演算子ではありません。 これは、移植性のない拡張です。 文 次の項目は、文です: 1. E 2. { S ; ... ; S } 3. if ( E ) S 4. if ( E ) S else S 5. while ( E ) S 6. for ( E ; E ; E ) S 7. 空の文 8. break 9. continue 10. quit 11. halt 12. limits 13. 文字の文字列、ダブルクォートで囲まれます 14. print E , ... , E 15. stream E , ... , E 16. I(), I(E), I(E, E) など、ここで、I は、void 関数のための識別子です (関数セクションのviod 関数サブセクションを参照)。また、E 引数は、関 数定義の対応するパラメータが配列参照であるなら、自動的に配列参照 (関数セクションの配列の参照サブセクションを参照) に切り替えられる、 形式 I[] の配列となります。 数値 4, 9, 11, 12, 14, 15 と 16 は、移植性のない拡張です。 また、移植性のない拡張として、あらゆる式または for ループのヘッダにある すべての式は、省略することができます。条件 (2 番目の式) が省略されるな ら、定数 1 と仮定されます。 break 文によって、ループは、ループの直後に繰り返しと再開を停止します。 これは、ループでのみ許可されています。 continue 文によって、ループは、ループ条件のテストを含めて、繰り返しを早 期に停止して、ループの開始点に返ります。これは、ループでのみ許可されて います。 if else 文は、C 言語と同じことを行います。 quit 文によって、bc(1) は、たとえ実行されない (コンパイル時のコマンドで す) 分岐にあっても、終了します。 警告: 終了時に、この bc(1) の振る舞いは、他の bc(1) の実装とは少し異な ります。他の bc(1) の実装は、quit コマンドがオンである行の解析が完了す るとすぐに終了します。この bc(1) は、終了する前に、quit 文の前に起こ る、完了した実行形式の文を実行します。 言い換えれると、次の bc(1) コードについて: for (i = 0; i < 3; ++i) i; quit 他の bc(1) の実装は、何も印刷 (表示) されず、この bc(1) は、終了する前 に連続する行で 0, 1 と 2 を印刷 (表示) します。 halt 文によって、bc(1) は、実行されるなら、終了します。(quit とは異な り、実行されない if 文の分岐であるなら、bc(1) は終了しません)。 limits 文は、この bc(1) が影響される制限を印刷 (表示) します。これは、 コンパイル時のコマンドであるという点において、quit 文に似ています。 それ自体による式は、評価されて、印刷 (表示) され、改行が続きます。 科学的記法と技術的記法は、式の結果を印刷するために利用可能です。科学的 記法は、obase に 0 を代入することによって活性化され、技術的記法は、 obase に 1 を代入することで活性化されます。これらを非活性化するために は、だた、obase に別の値を代入します。 科学的記法と技術的記法は、bc(1) が -s または -w コマンド行オプション (または同等のもの) で実行されるなら、無効にされます。 科学的記法および/または技術的記法で数字を印刷することは、移植性のない拡 張です。 文字列 文字列がそれら自体によって文として現れるなら、それらは、後続する改行な しで印刷 (表示) されます。 それら自体によって単独の文として現れることに加えて、文字列は、変数と配 列の要素に代入することができます。また、それらは、変数のパラメータで関 数に渡すことができます。 文字列を期待するあらゆる文が、文字列が代入された変数が与えられるなら、 文は、まるで文字列を受け取ったかのように動作します。 何らかの数学的操作が、文字列、または文字列が代入された変数または配列要 素で試みられるなら、エラーが発生し、bc(1) は、リセットされますリセット セクションを参照。 変数と配列要素に文字列を代入し、関数にそれらを渡したりすることは、移植 性のない拡張です。 印刷文 print 文の"式"は、文字列も指定できます。そうであるなら、特別に解釈され るバックスラッシュエスケープシーケンスがあります。これらのシーケンスが なんであるか、それによってなにが印刷されるかを、以下に表示します。 \a: \a \b: \b \\: \ \e: \ \f: \f \n: \n \q: " \r: \r \t: \t バックスラッシュにつづく他の文字によって、バックスラッシュと文字は、そ のまま印刷 (表示) されます。 print 文の文字列でない式は、印刷 (表示) される他の式のように、最後に割 り当てられます。 ストリーム文 stream 文の式は、また文字列であるかもしれません。 stream 文が文字列を与えられるなら、あたかも文字列がそれ自体の文のように 現れたかのように印刷 (表示) されます。言い換えれば、stream 文は、通常、 文字列を改行せずに印刷 (表示) します。 stream が数値を与えられるなら、そのコピーは、切り捨てられ、その絶対値が 計算されます。結果は、あたかも obase が 256 であるかのように印刷 (表示) され、各桁は、8 ビットの ASCII 文字として解釈され、バイトストリームとな ります。 評価の順序 文のすべての式は、操作の順序を維持するために必要な場合を除いて、左から 右に評価されます。これは、例えば、式で、i が 0 に等しいと仮定することを 意味します。 a[i++] = i++ a の最初の (または 0 番目の) 要素は、1 に設定され、式の終りで、i が 2 に等しいことを意味します。 これは、関数の引数を含みます。したがって、i が 0 に等しいと仮定すると、 これは、次の式であることを意味します。 x(i++, i++) x() に渡される最初の引数は、0 であり、2 番目の引数は、1 ですが、i は、 関数の実行を開始する前に 2 に等しくなります。 関数 関数の定義は、次の通りです: define I(I,...,I){ auto I,...,I S;...;S return(E) } あらゆるパラメータリストの I または auto リストは、パラメータを作成する ために I[] で置き換えるか、または auto 変数を配列にし、パラメータリスト のあらゆる I は、パラメータを配列参照にする *I[] で置き換えます。配列参 照を取る関数の呼び出し側は、呼び出しのアスタリスクを置くべきです。それ らは、通常の配列のような I[] を付けて呼び出されなければならず、自動的に 参照に変換されます。 移植性のない拡張として、define 文の開き括弧は、次の行に現れることができ ます。 移植性のない拡張として、return 文は、またh次の形式の 1 つを指定すること ができます。 1. return 2. return ( ) 3. return E 最初の 2 つ、return 文を指定しないことは、関数が void 関数 (下記のvoid 関数サブセクションを参照) でないなら、return (0) と同等です。 void 関数 また、関数は、次のように定義された void 関数を指定できます: define void I(I,...,I){ auto I,...,I S;...;S return } それらは、そのような式は、print 文を除いて、単独で印刷 (表示) されると ころで、単独の式としてのみ使用することができます。 void 関数は、上記の最初の 2 つの return 文のみ使用することができます。 また、それらは、return 文を完全に省略することができます。 単語 "void" は、キーワードとして扱われません。それでも、void という名前 の変数、配列と関数を使用することができます。単語 "void" は、define キー ワードの直後でのみ特別に扱われます。 これは、移植性のない拡張です。 配列の参照 パラメータリストのあらゆる配列について、配列が次の形式で宣言されている なら、 *I[] それは、reference です。関数の配列を変更することは、関数が返るとき、渡 された配列に反映されます。 それ以外は、すべての関数の引数は、値で渡されます。 これは、移植性のない拡張です。 ライブラリ 拡張数学ライブラリ (以下の拡張ライブラリサブセクションを参照) の関数を 含めて、以下のすべての関数は、拡張数学ライブラリが、-s オプション、-w オプション、または同等のものが与えられたとき、利用可能でないことを除い て、-l または --mathlib コマンド行フラグが与えられるとき、利用可能とな ります。 標準ライブラリ 標準 (規格セクションを参照) では、数学ライブラリのために次の関数を定義 しています; s(x) ラジアン単位と仮定される、x のサイン (sine) を返します。 これは、超越関数です (以下の超越関数サブセクションを参照)。 c(x) ラジアン単位と仮定される、x のコサイン (cosine) を返します。 これは、超越関数です (以下の超越関数サブセクションを参照)。 a(x) ラジアン単位の x のアークタンジェント (arctangent) を返します。 これは、超越関数です (以下の超越関数サブセクションを参照)。 l(x) x の自然対数を返します。 これは、超越関数です (以下の超越関数サブセクションを参照)。 e(x) x のべき乗にされる数学定数 e を返します。 これは、超越関数です (以下の超越関数サブセクションを参照)。 j(x, n) x の (切り捨て) n ベッセル (bessel) 整数整列を返します。 これは、超越関数です (以下の超越関数サブセクションを参照)。 拡張ライブラリ 拡張ライブラリは、標準 (規格セクションを参照) によって定義されたライブ ラリの一部ではないので、-s/--standard または -w/--warn オプションが指定 されたとき、ロードされません。 拡張ライブラリは、移植性のない拡張です。 p(x, y) たとえ y が整数でなくても、x の y のべき乗乗を計算し、結果を現在 の scale に返します。 y が負で x が 0 であるなら、エラーになります。 これは、超越関数です (以下の超越関数サブセクションを参照)。 r(x, p) x を丸めモードにしたがって小数点以下 p 桁に丸めて返します。0 か ら半分離れた丸められた丸めモードに従って p の小数点の位置に丸め られた x を返します (https://en.wikipedia.org/wiki/Rounding#Round_half_away_from_zero)。 ceil(x, p) 0 から半分離れた丸められた丸めモードに従って p の小数点の位置に 丸められた x を返します (https://en.wikipedia.org/wiki/Rounding#Rounding_away_from_zero)。 f(x) x の切り捨てられた絶対値の階乗を返します。 perm(n, k) k <= n であるなら、k の切り捨てられた絶対値の n の切り捨てられた 絶対値の順列を返します。そうでなければ、0 を返します。 comb(n, k) k <= n であるなら、kの切り捨てられた絶対値の n の切り捨てられた 絶対値の組み合わせを返します。そうでなければ、0 を返します。 l2(x) x の対数 (logarithm) ベースの 2 を返します。 これは、超越関数です (以下の超越関数サブセクションを参照)。 l10(x) x の対数 (logarithm) ベースの 10 を返します。 これは、超越関数です (以下の超越関数サブセクションを参照)。 log(x, b) x の対数 (logarithm) ベースの b を返します。 これは、超越関数です (以下の超越関数サブセクションを参照)。 cbrt(x) x の立方根 (cube root) を返します。 root(x, n) n, r の切り捨てられた値を計算し、現在の scale に x r の根を返し ます。 r が 0 または負であるなら、エラーが発生し、bc(1) は、リセットさ れます (リセットセクションを参照)。また、r が偶数で x が負である なら、エラーとなり、bc(1) は、リセットします。 gcd(a, b) 切り捨てられた a の絶対値と切り捨てられた b の絶対値の最大公約数 (因数) を返します。 lcm(a, b) 切り捨てられた a の絶対値と切り捨てられた b の絶対値の最小公倍数 を返します。 pi(p) p の小数点の位置への pi (円周率) を返します。 これは、超越関数です (以下の超越関数サブセクションを参照)。 t(x) ラジアン単位と仮定される、x のタンジェント (tangent) を返しま す。 これは、超越関数です (以下の超越関数サブセクションを参照)。 a2(y, x) ラジアン単位の y/x のアークタンジェント (arctangent) を返しま す。y と x の両方が 0 に等しいなら、エラーを発生させ、bc(1) は、 リセットします (リセットセクションを参照)。そうでなければ、x が 0 より大きいなら、a(y/x) を返します。x が 0 より小さく、y が 0 以上であるなら、a(y/x)+pi を返します。x が 0 より小さく、y が 0 より小さいなら、a(y/x)-pi が返されます。x が 0 に等しく、y が 0 より大きいなら、pi/2 を返します。x が 0 に等しく、y が 0 より小 さいなら、-pi/2 を返します。 この関数は、多くのプログラミング言語の atan2() 同じです。 これは、超越関数です (以下の超越関数サブセクションを参照)。 sin(x) ラジアン単位と仮定される、x のサイン (sine) を返します。 これは、s(x) のエイリアスです。 これは、超越関数です (以下の超越関数サブセクションを参照)。 cos(x) ラジアン単位と仮定される、x のコサイン (cosine) を返します。 これは、c(x) のエイリアスです。 これは、超越関数です (以下の超越関数サブセクションを参照)。 tan(x) ラジアン単位と仮定される、x のタンジェント (tangent) を返しま す。 x が 1 または -1 と等しいなら、これは、エラーを発生させ、bc(1) は、リセットします (リセットセクションを参照)。 これは、t(x) のエイリアスです。 これは、超越関数です (以下の超越関数サブセクションを参照)。 atan(x) ラジアン単位の x のアークタンジェント (arctangent) を返します。 これは、a(x) のエイリアスです。 これは、超越関数です (以下の超越関数サブセクションを参照)。 atan2(y, x) ラジアン単位の y/x のアークタンジェント (arctangent) を返しま す。y と x の両方が 0 に等しいなら、エラーを発生させ、bc(1) は、 リセットします (リセットセクションを参照)。そうでなければ、x が 0 より大きいなら、a(y/x) を返します。x が 0 より小さく、y が 0 以上であるなら、a(y/x)+pi を返します。x が 0 より小さく、y が 0 より小さいなら、a(y/x)-pi を返します。x が 0 に等しく、y が 0 よ り大きいなら、pi/2 を返します。x が 0 に等しく、y が 0 より小さ いなら、-pi/2 を返します。 この関数は、多くのプログラミング言語の atan2() 関数と同じです。 これは、a2(y, x) のエイリアスです。 これは、超越関数です (以下の超越関数サブセクションを参照)。 r2d(x) ラジアンから温度に x を変換し、結果を返します。 これは、超越関数です (以下の超越関数サブセクションを参照)。 d2r(x) 温度からラジアンに x を変換し、結果を返します。 これは、超越関数です (以下の超越関数サブセクションを参照)。 frand(p) p の切り捨てられた絶対値に等しい小数点の後に 10 進数の数値で 0 (包括的) から 1 (排他的) の間の疑似乱数を生成します。p が 0 でな いなら、この関数を呼び出すことは、seed の値を変更します。p が 0 であるなら、0 が返され、seed は、変更されません。 ifrand(i, p) p の切り捨てられた絶対値に等しい小数点の後に、10 進数の数で 0 (包含的) と i の切り捨てられた絶対値 (排他的) の間の疑似乱数を生 成します。i の絶対値が 2 以上で、p が 0 でないなら、この関数を呼 び出すことは、seed の値を変更します。そうでなければ、0 が返さ れ、seed は変更されません。 srand(x) 確率 0.5 で符号を反転させた x を返します。言い換えれば、x の符号 をランダム化にします。 brand() ランダムなブール値 (0 または 1 のいずれか) を返します。 band(a, b) a と b の切り捨てられた絶対値を取り、それらの間のビット演算 and の結果を計算して返します。 符号付き 2 の補数の引数を使用したいなら、変換するために s2u(x) を使用します。 bor(a, b) a と b の両方の切り捨てられた絶対値を取り、それらの間のビット演 算 or の結果を計算して返します。 符号付き 2 の補数の引数を使用したいなら、変換するために s2u(x) を使用します。 bxor(a, b) a と b の両方の絶対値を切り捨てて、それらの間のビット演算 xor の 結果を計算して返します。 符号付き 2 の補数の引数を使用したいなら、変換するために s2u(x) を使用します。 bshl(a, b) a と b の両方の切り捨てられた絶対値を取り、b の位で a を左にビッ トシフトした結果を計算して返します。 符号付き 2 の補数の引数を使用したいなら、変換するために s2u(x) を使用します。 bshr(a, b) a と b の両方の切り捨てられた絶対値を取り、b の位で a を右にビッ トシフトした結果を計算して返します。 符号付き 2 の補数の引数を使用したいなら、変換するために s2u(x) を使用します。 bnotn(x, n) x の切り捨てられた絶対値を取り、あたかも n の切り捨てられた絶対 値と同じバイト数であるかのように、ビット演算 not を行います。 符号付き 2 の補数の引数を使用したいなら、変換するために s2u(x) を使用します。 bnot8(x) あたかも 8 のバイナリ桁 (1 符号なしバイト) であるかのように x の 切り捨てられた絶対値のビット単位の not を行ないます。 符号付き 2 進数の補数の引数を使用したいなら、変換のために s2u(x) を使用します。 bnot16(x) あたかも 16 のバイナリ桁 (2 符号なしバイト) であるかのように x の切り捨てられた絶対値のビット単位の not を行ないます。 符号付き 2 進数の補数の引数を使用したいなら、変換のために s2u(x) を使用します。 bnot32(x) あたかも 32 のバイナリ桁 (4 符号なしバイト) であるかのように x の切り捨てられた絶対値のビット単位の not を行ないます。 符号付き 2 進数の補数の引数を使用したいなら、変換のために s2u(x) を使用します。 bnot64(x) あたかも 64 のバイナリ桁 (8 符号なしバイト) であるかのように x の切り捨てられた絶対値のビット単位の not を行ないます。 符号付き 2 進数の補数の引数を使用したいなら、変換のために s2u(x) を使用します。 bnot(x) あたかも符号なし 2 バイトの最小べき乗数があるかのように x の切り 捨てられた絶対値のビット単位の not を行ないます。 符号付き 2 の補数の引数を使用したいなら、変換のために s2u(x) を 使用します。 brevn(x, n) あたかも n の切り捨てられた絶対値と同じ数の 8 ビットのバイトがあ るかのように x の切り捨てられた絶対値でビット反転を実行します。 符号付き 2 の補数の引数を使用したいなら、変換のために s2u(x) を 使用します。 brev8(x) あたかも 8 バイナリ桁 (1 符号なしバイト) であるかのように x の切 り捨てられた絶対値でビット反転を実行します。 符号付き 2 の補数の引数を使用したいなら、変換のために s2u(x) を 使用します。 brev16(x) あたかも 16 バイナリ桁 (2 符号なしバイト) であるかのように x の 切り捨てられた絶対値でビット反転を実行します。 符号付き 2 の補数の引数を使用したいなら、変換のために s2u(x) を 使用します。 brev32(x) あたかも 32 ばいなり桁 (4 符号なしバイト) であるかのように x の 切り捨てられた絶対値でビット反転を実行します。 符号付き 2 の補数の引数を使用したいなら、変換のために s2u(x) を 使用します。 brev64(x) あたかも 64 バイナリ桁 (8 符号なしバイト) であるかのように x の 切り捨てられた絶対値でビット反転を実行します。 符号付き 2 の補数の引数を使用したいなら、変換のために s2u(x) を 使用します。 brev(x) あたかも符号なし 2 バイトの最小べき乗があるかのように x の切り捨 てられた絶対値でビット反転を実行します。 符号付き 2 の補数の引数を使用したいなら、変換のために s2u(x) を 使用します。 broln(x, p, n) n 8 ビットバイトのバイナリ桁の数値のべき乗に 2 によって modded (剰余) される p の切り捨てられた絶対値と等しい位の数値によって、 あたかも n の切り捨てられた絶対値として符号なし 8 ビットバイトの 同じ数値があるかのように、x の切り捨てられた絶対値を、左ビット単 位ローテートを行ないます。 符号付き 2 の補数の引数を使用したいなら、変換のために s2u(x) を 使用します。 brol8(x, p) 8 のべき乗に 2 によって modded (剰余) される p の切り捨てられた 絶対値と等しい位の数値によってあたかも 8 バイナリ桁 (1 符号なし) であるかのように、x の切り捨てられた絶対値を、左ビット単位ロー テートを行ないます。 符号付き 2 の補数の引数を使用したいなら、変換のために s2u(x) を 使用します。 brol16(x, p) 16 のべき乗に 2 によって modded (剰余) される p の切り捨てられた 絶対値と等しい位の数値によってあたかも 16 バイナリ桁 (2 符号な し) であるかのように、x の切り捨てられた絶対値を、左ビット単位 ローテートを行ないます。 符号付き 2 の補数の引数を使用したいなら、変換のために s2u(x) を 使用します。 brol32(x, p) 32 のべき乗に 2 によって modded (剰余) される p の切り捨てられた 絶対値と等しい位の数値によってあたかも 32 バイナリ桁 (2 符号な し) であるかのように、x の切り捨てられた絶対値を、左ビット単位 ローテートを行ないます。 符号付き 2 の補数の引数を使用したいなら、変換のために s2u(x) を 使用します。 brol64(x, p) 64 のべき乗に 2 によって modded (剰余) される p の切り捨てられた 絶対値と等しい位の数値によってあたかも 64 バイナリ桁 (2 符号な し) であるかのように、x の切り捨てられた絶対値を、左ビット単位 ローテートを行ないます。 符号付き 2 の補数の引数を使用したいなら、変換のために s2u(x) を 使用します。 brol(x, p) 8 ビットバイトの最小数のバイナリ桁の数のべき乗に 2 よって modded (剰余) される p の切り捨てられた絶対値と等しい位の数値によって、 あたかも符号なしの 8 ビットバイトを 2 のべき乗の最小数があるかの ように、x の切り捨てられた絶対値を、左ビット単位ローテートを行な います。 符号付き 2 の補数の引数を使用したいなら、変換のために s2u(x) を 使用します。 brorn(x, p, n) n の 8 ビットバイトのバイナリ桁の数のべき乗に 2 よって modded (剰余) される、p の切り捨てられた絶対値と等しい位の数値によっ て、あたかも n の切り捨てられた絶対値として符号なし 8 ビットバイ トの同じ数値があるかのように、x の切り捨てられた絶対値を、右ビッ ト単位ローテートを行ないます。 符号付き 2 の補数の引数を使用したいなら、変換のために s2u(x) を 使用します。 bror8(x, p) 8 のべき乗に 2 によって modded (剰余) される p の切り捨てられた 絶対値と等しい位の数値によってあたかも 8 バイナリ桁 (1 符号なし) であるかのように、x の切り捨てられた絶対値を、右ビット単位ロー テートを行ないます。 符号付き 2 の補数の引数を使用したいなら、変換のために s2u(x) を 使用します。 bror16(x, p) 16 のべき乗に 2 によって modded (剰余) される p の切り捨てられた 絶対値と等しい位の数値によってあたかも 16 バイナリ桁 (2 符号な し) であるかのように、x の切り捨てられた絶対値を、右ビット単位 ローテートを行ないます。 符号付き 2 の補数の引数を使用したいなら、変換のために s2u(x) を 使用します。 bror32(x, p) 32 のべき乗に 2 によって modded (剰余) される p の切り捨てられた 絶対値と等しい位の数値によってあたかも 32 バイナリ桁 (2 符号な し) であるかのように、x の切り捨てられた絶対値を、右ビット単位 ローテートを行ないます。 符号付き 2 の補数の引数を使用したいなら、変換のために s2u(x) を 使用します。 bror64(x, p) 64 のべき乗に 2 によって modded (剰余) される p の切り捨てられた 絶対値と等しい位の数値によってあたかも 64 バイナリ桁 (2 符号な し) であるかのように、x の切り捨てられた絶対値を、右ビット単位 ローテートを行ないます。 符号付き 2 の補数の引数を使用したいなら、変換のために s2u(x) を 使用します。 bror(x, p) 8 ビットバイトの最小数のバイナリ桁の数のべき乗に 2 よって modded (剰余) される p の切り捨てられた絶対値と等しい位の数値によって、 あたかも符号なしの 8 ビットバイトを 2 のべき乗の最小数があるかの ように、x の切り捨てられた絶対値を、右ビット単位ローテートを行な います。 符号付き 2 の補数の引数を使用したいなら、変換のために s2u(x) を 使用します。 bmodn(x, n) n と 8 の切り捨てられた絶対値の掛け算のべき乗に 2 によって x の 切り捨てられた絶対値の剰余 (modulus) を返します。 符号付き 2 の補数の引数を使用したいなら、変換のために s2u(x) を 使用します。 bmod8(x, n) 8 のべき乗に 2 によって x の切り捨てられた絶対値の剰余 (modulus) 返します。 符号付き 2 の補数の引数を使用したいなら、変換のために s2u(x) を 使用します。 bmod16(x, n) 16 のべき乗に 2 によって x の切り捨てられた絶対値の剰余 (modulus) 返します。 符号付き 2 の補数の引数を使用したいなら、変換のために s2u(x) を 使用します。 bmod32(x, n) 32 のべき乗に 2 によって x の切り捨てられた絶対値の剰余 (modulus) 返します。 符号付き 2 の補数の引数を使用したいなら、変換のために s2u(x) を 使用します。 bmod64(x, n) 64 のべき乗に 2 によって x の切り捨てられた絶対値の剰余 (modulus) 返します。 符号付き 2 の補数の引数を使用したいなら、変換のために s2u(x) を 使用します。 bunrev(t) t が (元の数では最下位ビットであった) 実際の最上位ビットよりも 1 つ上位の余分なセットビットがあるビット単位で反転された数であるこ とを仮定しています。この数値は、反転され、余分なセットビットなし で返されます。 この関数は、他のビット単位の関数を実装するために使用されます。 ユーザによって使用される意味はありませんが、使用することはできま す。 plz(x) x が 0 に等しくなく、-1 より大きく 1 より小さいなら、-z オプショ ン (オプションセクションを参照) の使用に関わらず、先導する 0 を 付けて、後続する改行なしで印刷 (表示) します。 そうでなければ、x は、通常通り、後続する改行を付けて印刷 (表示) されます。 plznl(x) x が 0 に等しくなく、-1 より大きく 1 より小さいなら、-z オプショ ン (オプションセクションを参照) の使用に関わらず、先導する 0 を 付けて、後続する改行をつけて印刷 (表示) します。 そうでなければ、x は、通常通り、後続する改行を付けて印刷 (表示) されます。 pnlz(x) x が 0 に等しくなく、-1 より大きく 1 より小さいなら、-z オプショ ン (オプションセクションを参照) の使用に関わらず、先導する 0 な しで、後続する改行なしで印刷 (表示) します。 そうでなければ、x は、通常通り、後続する改行なしで印刷 (表示) さ れます。 pnlznl(x) x が 0 に等しくなく、-1 より大きく 1 より小さいなら、-z オプショ ン (オプションセクションを参照) の使用に関わらず、先導する 0 な しで、後続する改行を付けて印刷 (表示) します。 そうでなければ、x は、通常通り、後続する改行を付けて印刷 (表示) されます。 ubytes(x) x の切り捨てられた絶対値を保持するために必要な、符号なし整数のバ イト数を返します。 sbytes(x) x の切り捨てられた絶対値を保持するために必要な符号付き 2 の補数 の整数バイトの数を返します。 s2u(x) x が負でないなら、x を返します。それが、負であるなら、x を 2 の 補数の符号付き整数として計算し、バイナリで同じ表現がある負でない 整数を返します。 s2un(x,n) x が負でないなら、x を返します。それが、負であるなら、x を 2 の 補数の符号付き整数として n バイトで計算し、バイナリで同じ表現が ある負でない整数を返します。x が n の 2 補数の符号付きバイトに収 まることができないなら、収まるように切り捨てられます。 hex(x) x の 16 進数 (16 をベースとする) 表現を出力します。 これは、void 関数です (関数セクションの void 関数サブセクション を参照)。 binary(x) x のバイナリ (2 をベースとする) 表現を出力します。 これは、void 関数です (関数セクションの void 関数サブセクション を参照)。 output(x, b) x のベース b 表現を出力します。 これは、void 関数です (関数セクションの void 関数サブセクション を参照)。 uint(x) できますだけ少ない 2 バイトの累乗で符号なし整数として x の 2 進 数と 16 進数による表現をバイトで出力します。両方の出力は、空白に よって区切られたバイトに分割されます。 x が整数でないか、または負であるなら、エラーメッセージが代わりに 印刷 (表示) されますが、bc(1) は、リセットされません (リセットセ クション参照)。 これは、void 関数です (関数セクションの void 関数サブセクション を参照)。 int(x) できますだけ少ない 2 バイトの累乗として符号付き 2 の補数の整数と して x の 2 進数と 16 進数の表現で出力します。両方の出力は、空白 によって区切られたバイトに分割されます。 x が整数でないなら、エラーメッセージが代わりに印刷 (表示) されま すが、bc(1) は、リセットされません (リセットセクションを参照)。 これは、void 関数です (関数セクションの void 関数サブセクション を参照)。 uintn(x, n) n バイトの符号なし整数としての x の 2 進数と 16 進数の表現で出力 します。両方の出力は、空白によって区切られたバイトに分割されま す。 x が整数でない、負であるか、または n バイトに適合しないなら、エ ラーメッセージが代わりに印刷 (表示) されますが、bc(1) は、リセッ トされません (リセットセクション参照)。 これは、void 関数です (関数セクションの void 関数サブセクション を参照)。 intn(x, n) n バイトの符号付き 2 の補数の整数として x の 2 進数と 16 進数の 表現で出力します。両方の出力は、空白によって区切られたバイトに分 割されます。 x が整数でないか、または n バイトに適合しないなら、エラーメッ セージが代わりに印刷 (表示) されますが、bc(1) は、リセットされま せん (リセットセクションを参照)。 これは、void 関数です (関数セクションの void 関数サブセクション を参照)。 uint8(x) 1 バイトの符号なし整数として x の 2 進数と 16 進数の表現で出力し ます。両方の出力は、空白によって区切られたバイトに分割されます。 x が整数でない、負であるか、または 1 バイトに適合しないなら、エ ラーメッセージが代わりに表示されますが、bc(1) は、リセットされま せん (リセットセクション参照)。 これは、void 関数です (関数セクションの void 関数サブセクション を参照)。 int8(x) 1 バイトの符号付き 2 の補数の整数として x の 2 進数と 16 進数の 表現を出力します。両方の出力は、空白によって区切られたバイトに分 割されます。 x が整数でないか、1 バイトに適合しないなら、エラーメッセージが代 わりに印刷 (表示) れますが、bc(1) は、リセットされません (リセッ トセクションを参照)。 これは、void 関数です (関数セクションの void 関数サブセクション を参照)。 uint16(x) 2 バイトの符号なし整数として x の 2 進数と 16 進数の表現で出力し ます。両方の出力は、空白によって区切られたバイトに分割されます。 x が整数でない、負であるか、または 2 バイトに適合しないなら、エ ラーメッセージが代わりに印刷 (表示) されますが、bc(1) は、リセッ トされません (リセットセクションを参照)。 これは、void 関数です (関数セクションの void 関数サブセクション を参照)。 int16(x) 2 バイトの符号付き 2 の補数の整数として x の 2 進数と 16 進数の 表現を出力します。両方の出力は、空白によって区切られたバイトに分 割されます。 x が整数でないか、または 2 バイトに適合しないなら、エラーメッ セージが代わりに印刷 (表示) されますが、bc(1) は、リセットされま せん (リセットセクションを参照)。 これは、void 関数です (関数セクションの void 関数サブセクション を参照)。 uint32(x) 4 バイトの符号なし整数として x の 2 進数と 16 進数の表現を出力し ます。両方の出力は、空白によって区切られたバイトに分割されます。 x が整数でない、負であるか、または 4 バイトに適合しないなら、エ ラーメッセージが代わりに印刷 (表示) されますが、bc(1) は、リセッ トされません (リセットセクションを参照)。 これは、void 関数です (関数セクションの void 関数サブセクション を参照)。 int32(x) 4 バイトの符号付き 2 の補数の整数として x の 2 進数と 16 進数の 表現を出力します。両方の出力は、空白によって区切られたバイトに分 割されます。 x が整数でないか、または 4 バイトに適合しないなら、エラーメッ セージが代わりに印刷 (表示) されますが、bc(1) は、リセットされま せん (リセットセクションを参照)。 これは、void 関数です (関数セクションの void 関数サブセクション を参照)。 uint64(x) 8 バイトの符号なし整数として x の 2 進数と 16 進数の表現を出力し ます。両方の出力は、空白によって区切られたバイトに分割されます。 x が整数でない、負であるか、または 8 バイトに適合しないなら、エ ラーメッセージが代わりに印刷 (表示) されますが、bc(1) は、リセッ トされません (リセットセクションを参照)。 これは、void 関数です (関数セクションの void 関数サブセクション を参照)。 int64(x) 8 バイトの符号付き 2 の補数の整数として x の 2 進数と 16 進数の 表現を出力します。両方の出力は、空白によって区切られたバイトに分 割されます。 x が整数でないか、または 8 バイトに適合しないなら、エラーメッ セージが代わりに印刷 (表示) されますが、bc(1) は、リセットされま せん (リセットセクションを参照)。 これは、void 関数です (関数セクションの void 関数サブセクション を参照)。 hex_uint(x, n) n バイトを使用して 16 進数の符号なし整数として x の切り捨てられ た絶対値の表現を出力します。n が小さすぎるなら、値のすべては、出 力されません。 これは、void 関数です (関数セクションの void 関数サブセクション を参照)。 binary_uint(x, n) n バイトを使用して 2 進数の符号なし整数として x の切り捨てられた 絶対値の表現を出力します。n が小さすぎるなら、値のすべては、出力 されません。 これは、void 関数です (関数セクションの void 関数サブセクション を参照)。 output_uint(x, n) n バイトを使用して現在の obase (構文セクション参照) の符号なし整 数として x の切り捨てられた絶対値の表現を出力します。n が小さす ぎるなら、値のすべては、出力されません。 これは、void 関数です (関数セクションの void 関数サブセクション を参照)。 output_byte(x, i) 0 最下位バイトで、number_of_bytes - 1 が最上位バイトであるところ で、x の切り捨てられた絶対値のバイト i を出力します。 これは、void 関数です (関数セクションの void 関数サブセクション を参照)。 超越関数 すべての超越関数は、わずかに不正確な結果を返すかもしれません最大で 1 ULP (https://en.wikipedia.org/wiki/Unit_in_the_last_place)。これは、不 可避なことで、この記事 https://people.eecs.berkeley.edu/~wkahan/LOG10HAF.TXT は、超越関数ため の正確な結果を計算することは不可能であり、不必要であることを説明してい ます。 不正確である可能性があるので、ユーザは、必要であるより、少なくとも 1 以 上に設定して、精度 (scale) ある、これらの関数を呼び出すことをお勧めしま す。正確な結果が絶対的に必要とされるなら、ユーザは、精度 (scale) を 2 倍にすることができ、次に切り捨てます。 標準数学ライブラリの超越関数は、次の通りです: • s(x) • c(x) • a(x) • l(x) • e(x) • j(x, n) 拡張数学ライブラリの超越関数は、次の通りです: • l2(x) • l10(x) • log(x, b) • pi(p) • t(x) • a2(y, x) • sin(x) • cos(x) • tan(x) • atan(x) • atan2(y, x) • r2d(x) • d2r(x) リセット bc(1) がエラーまたはデフォルトでないハンドラがあるシグナルに遭遇すると き、リセットされます.これは、いくつかのことが起こることが意味します。 最初に、実行中のあらゆる関数が停止し、スタックからポップされます。この 振る舞いは、プログラミング言語の例外処理と似ています。次に、(すべての関 数が返った後に) 実行するあらゆるコードの待機がスキップできるように、実 行ポイントが設定されます。 したがって、bc(1) がリセットされるとき、実行するあらゆる残りのコードの 待機をスキップします。次に、対話型モードであり、エラーが致命的なエラー でないなら、(終了ステータスセクションを参照)、さらに入力を求めます。そ うでなければ、適切なリターンコードで終了します。 このリセットの振る舞いは、エラーが発生した文の直後から実行を開始するこ とを試みる、GNU bc(1) とは異なることに注意してください。 性能 ほとんどの bc(1) の実装は、一度に 1 の 10 進数の値を計算するために char タイプを使用しますが、それは、遅くなってしまいます。この bc(1) は、何か 違っています。 同時に 1 より大きい 10 進数を計算するために大きな整数を使用します。 BC_LONG_BIT (制限セクション参照) が 64 であるの環境で構築されるなら、各 整数は、9 の 10 進数があります。BC_LONG_BIT が 32 である環境で構築され るなら、各整数は、4 の 10 進数があります。この値 (大きな整数ごとの 10 進数の数) は、BC_BASE_DIGS と呼ばれます。 BC_LONG_BIT と BC_BASE_DIGS の実際の値は、limits 文で問い合わせることが できます。 さらに、この bc(1) は、オーバフローのチェックのために、さらに大きな整数 を使用します。この整数タイプは、BC_LONG_BIT の値に依存しますが、常に桁 を格納するために使用される整数タイプの少なくとも 2 倍以上の大きさです。 制限 次は、bc(1) の制限です: BC_LONG_BIT bc(1) が構築された環境の long タイプのビット数です。これは、単一 の大きな整数にどのくらいの 10 進数を格納することができるかを決定 します (性能セクションを参照)。 BC_BASE_DIGS 大きな整数ごとの 10 進数の数です (性能セクションを参照)。 BC_LONG_BIT に依存します。 BC_BASE_POW 各大きな整数を格納することができる 10 進数の最大値 (BC_BASE_DIGS を参照) に 1 を加えた値。BC_BASE_DIGS に依存します。 BC_OVERFLOW_MAX オーバフロータイプ (性能セクションを参照) が保持できる最大の数。 BC_LONG_BIT に依存します。 BC_BASE_MAX 最大の出力ベース。BC_BASE_POW に設定します。 BC_DIM_MAX 配列の最大サイズ。SIZE_MAX-1 に設定します。 BC_SCALE_MAX 最大のscale。BC_OVERFLOW_MAX-1 に設定します。 BC_STRING_MAX 文字列の最大の長さ。BC_OVERFLOW_MAX-1 に設定します。 BC_NAME_MAX 識別子の最大の長さ。BC_OVERFLOW_MAX-1 に設定します。 BC_NUM_MAX 小数点の後の桁を含んで、(10 進数単位の) 数値の最大の長さです。 BC_OVERFLOW_MAX-1 に設定します。 BC_RAND_MAX rand() オペランドによって返された最大の整数 (包含的) です。 2^BC_LONG_BIT-1 に設定します。 指数 最大の許容される指数 (正または負)。BC_OVERFLOW_MAX に設定しま す。 変数の数 vars/array の最大の数です。SIZE_MAX-1 に設定します。 実際の値は、limits 文で問い合わせることができます。 これらの制限は、事実上存在しないことを意味しています。制限値は、非常に 大きいので (少なくとも 64 ビットマシンで)、問題となるようなあらゆるポイ ントはないはずです。実際に、これらの制限に達する前に、メモリが枯渇する はずです。 環境変数 移植性のない拡張として、bc(1) は、次の環境変数を認識します: POSIXLY_CORRECT この変数が存在するなら (内容を問わず)、bc(1) は、あたかも -s オ プションが与えられたかのように振る舞います。 BC_ENV_ARGS これは、bc(1) にコマンド行引数を与える別の方法です。それらは、他 のすべてのコマンド行の引数と同じ形式であるべきです。これらは、常 に最初に処理されるので、BC_ENV_ARGS で与えられたあらゆるファイル は、コマンド行で与えられた引数とファイルの前に処理されます。これ は、ユーザが、"標準"のオプションと呼び出すたびに使用されるファイ ルを設定することができます。そのような含まれるファイルのために最 も役に立つものは、ユーザが bc(1) を実行するたびに必要とされる便 利な関数です。 BC_ENV_ARGS を解析するコードは、引用された引数を正しく処理します が、エスケープシーケンスを理解できません。例えば、文字列 "/home/gavin/some bc file.bc" は、正しく解析されますが、文字列 "/home/gavin/some "bc" file.bc" は、バックスラッシュを含んでしま います。 引用符の解析は、' または " のいずれの種類の引用符も扱います。し たがって、名前の単一引用符のあらゆる数でファイルがあるなら、 "some `bc' file.bc" として、外側の引用として二重引用符を使用する ことができ、二重引用符があるファイルがあるなら、その逆になりま す。しかしながら、BC_ENV_ARGS の両方の引用符の種類があるファイル を扱うことは、解析が複雑になるためサポートされていませんが、その ようなファイルは、解析がシェルによって行われるコマンド行でサポー トされています。 BC_LINE_LENGTH この環境変数が存在し、1 より大きく、UINT16_MAX (2^16-1) より小さ い整数が含まれているなら、bc(1) は、バックスラッシュ (\) を含む その長さの行を出力します。デフォルトの行の長さは、70 です。 0 の特別な値は、行の長さチェックを無効にし、行の長さを考慮せず、 バックスラッシュと改行なしに数字を印刷 (表示) します。 BC_BANNER この環境変数が存在し、整数を含んでいるなら、0 以外の値は、bc(1) が対話型モードであるとき、著作権バナーを活性化し、一方 0 は、非 活性化します。 bc(1) が対話型モードでないなら (対話型モードセクションを参照)、 bc(1) が対話型モードでないとき、バナーを印刷 (表示) しないので、 この環境変数は、何の効果もありません。 この環境変数は、-h または --help オプションで問い合わせることが できる、デフォルトを上書きします。 BC_SIGINT_RESET bc(1) が対話型モードでないなら (対話型モードセクションを参照)、 bc(1) が、対話型モードでないとき、SIGINT で終了するので、この環 境変数は、何の効果もない。 しかしながら、bc(1) が対話型モードであるとき、この環境変数が存在 し、整数を含んでいるなら、0 以外の値は、bc(1) を終了するのではな く、SIGINT でリセットし、0 は、bc(1) を終了させます。この環境変 数が存在し、整数でないなら、bc(1) は、SIGINT で終了します。 この環境変数は、-h または --help オプションで問い合わせることが できる、デフォルトを上書きします。 BC_TTY_MODE TTY モードが利用可能でないなら (TTY モードセクション参照)、この 環境変数は、何の効果もありません。 しかしながら、TTY モードが利用可能であるとき、この環境変数が存在 し、整数を含んでいるなら、0 以外の値は、bc(1) が TTY モードを使 用し、0 は、bc(1) が TTY モードを使用しません。 この環境変数は、-h または --help オプションで問い合わせることが できる、デフォルトを上書きします。 BC_PROMPT TTY モードが利用可能でないなら (TTY モードセクション参照)、この 環境変数は、何の効果もありません。 しかしながら、TTY モードが利用可能であるとき、この環境変数が存在 し、整数を含んでいるなら、0 以外の値は、bc(1) が TTY モードを使 用し、0 は、bc(1) が TTY モードを使用しません。この環境変数が存 在せず、BC_TTY_MODE が存在するなら、BC_TTY_MODE 環境変数の値が使 用されます。 この環境変数と BC_TTY_MODE 環境変数は、-h または --help オプショ ンで問い合わせることができる、デフォルトを上書きします。 BC_EXPR_EXIT あらゆる式または式ファイルが、-e, --expression, -f または --file を付けられたコマンド行で与えられるなら、この環境変数が存在し、整 数を含んでいるなら、0 以外の値は、式と式ファイルを実行した後に bc(1) を終了し、0 の値は、bc(1) を終了しないようにします。 この環境変数は、-h または --help オプションで問い合わせることが できる、デフォルトを上書きします。 BC_DIGIT_CLAMP 数値を解析するとき、この環境変数が存在し、整数が含まれているな ら、0 以外の値によって bc(1) は、すべて、そのような数字は、ibase から 1 を引いたものと等しく、そのようなクランプを無効にする 0 の 値と見なすことができるので、これらの数字は、常に、ibase のべき乗 が掛けられる、それらの値に等しくできるので、現在の ibase 以上の 数字をクランプ (固定) します。 これは、標準 (規格セクションを参照) のように、単一の桁の数値には 適用されません。 この環境変数は、-h または --help オプションで問い合わせすること ができる、デフォルトを上書きします。 終了ステータス bc(1) は、次の終了ステータスを返します: 0 エラーなし。 1 数学エラーが起こりました。これは、数学的エラーが通常の実行の過程 で起こるので、予想されるエラーのために 1 を使用するという標準的 な慣習に従います。 算術エラーには、0 で割る、負の数の平方根を取る、疑似乱数生成器の ための境界として負の数を使用する、負の数をハードウェアの整数に変 換しようと試みる、数値をハードウェアの整数に変換するときのオーバ フロー、数値のサイズを計算するときのオーバフロー、と整数が必要な ところで整数でないものを使用しようとする試みなどがあります。 ハードウェア整数への変換することは、累乗 (^)、置く (@)、左シフト (<<) と右シフト (>>) 演算子とそれらに対応する代入演算子の 2 番目 オペランドで起こります。 2 解析エラーが起こりました。 解析エラーは、予期しない EOF、無効な文字の使用、文字列またはコメ ントの終わりを見つけられない、無効な場所でトークンを使用する、無 効な式を与える、無効な print 文を与える、無効な関数定義を与え る、名前付きの式ではない式に代入しようとする試み (構文セクション の名前付きの式サブセクションを参照)、無効な auto リストを与え る、auto/関数パラメータの重複、コードブロックの終わりを見つけら れない、void 関数から値を返そうとする試み、変数を参照として使用 しようとする試み、オプション -s または同等のものが与えられると き、あらゆる拡張を使用するなどです。 3 実行時エラーが起こりました。 実行時エラーは、あらゆるグローバルな (ibase, obase または scale) 無効な数値を割り当を含み、read() 呼び出しに不正な式を与え、 read() 呼び出しの内側で read() を呼び出し、タイプエラー、関数に 間違った数の引数を渡し、未定義の関数を呼び出す試み、と式の値とし て void 関数呼び出しを使用しようとする試みを含みます。 4 致命的なエラーが起こりました。 致命的なエラーは、メモリ割り付けエラー、I/O エラー、ファイルの オープンの失敗、ASCII 文字だけのファイルを使用しようする試み (bc(1) は、ASCII 文字しか受け付けません)、ディレクトリをファイル としてオープンする試み、無効なコマンド行オプションを与えるなどが あります。 終了ステータス 4 は、特別です。致命的なエラーが起こったとき、bc(1) は、 つねに存在し、bc(1) がどのモードを問わず、4 を返します。 他の状態は、bc(1) は、状態をリセットし (リセットセクションを参照)、対話 型モードでこれらのエラーの 1 つが起こったとき、多くの入力を受け付けるの で、bc(1) が対話型モード (対話型モードセクションを参照) でないときにの み返されます。また、これは、対話型モードが -i フラグまたは --interactive オプションによって強制されるときの場合です。 これらの終了ステータスによって、bc(1) は、エラーチェックでシェルスクリ プトで使用することができ、その通常の振る舞いは、-i フラグまたは --interactive オプションを使用することによって強制することができます。 対話型モード 標準 (規格セクションを参照) のように、bc(1) には、対話モードと非対話 モードがあります。対話型モードは、stdin と stdout の両方が端末に接続さ れているとき、自動的にオンになりますが、他の状況で、-i フラグと --interactive でオンにすることができます。 対話型モードで、bc(1) は、エラーからの回復を試み (リセットセクション参 照)、通常の実行で、現在の入力に対して実行が終了するとすぐに stdout をフ ラッシュします。また、bc(1) は、BC_SIGINT_RESET 環境変数の内容またはデ フォルトに依存して、終了ではなく SIGINT でリセットされます (環境変数セ クションを参照)。 TTY モード stdin, stdout と stderr がすべて TTY に接続されているなら、"TTY モード" は、利用可能であるとみなされ、したがって、bc(1) は、いくつかの設定にし たがって、TTY モードをオンに切り替えることができます。 環境に環境変数 BC_TTY_MODE があるなら (環境変数セクションを参照)、その 環境変数に 0 以外の整数が含まれているなら、bc(1) は、stdin, stdout と stderr がすべて TTY に接続されているとき、TTY モードをオンに切り替えま す。BC_TTY_MODE 環境変数が存在してますが、0 以外の整数でないなら、bc(1) は、TTY モードをオンに切り替えません。 環境変数 BC_TTY_MODE が存在しないなら、デフォルトの設定が使用されます。 デフォルトの設定は、-h または --help オプションで問い合わせることができ ます。 TTY モードは、bc(1) 標準 (規格セクションを参照) で必要とされ、対話モー ドが、端末に接続する stdin と stdout のみ必要とされるので、対話モードと は異なります。 コマンド行の履歴 コマンド行の履歴は、TTY モード、すなわち、stdin, stdout と stderr がが TTY に接続され、BC_TTY_MODE 環境変数 (環境変数セクションを参照) とその デフォルトが TTY モードを無効にしない場合にのみ有効です。詳細について は、コマンド行の履歴セクションを参照してください。 プロンプト TTY モードが利用可能であるなら、プロンプトを有効にすることができます。 TTY モードそれ自体のように、次の環境変数でオンまたはオフを切り替えるこ とができます: BC_PROMPT (環境変数セクションを参照)。 環境変数 BC_PROMPT が存在し、0 以外の整数であるなら、stdin, stdout と stderr が TTY に接続され、-P と --no-prompt オプションが使用されていな いとき、プロンプトは、オンに切り替えられます。読み込みプロンプトは、-R と --no-read-prompt オプションが使用されていてはならないことを除いて、 同じ条件の下でオンに切り替えられます。 しかしながら、BC_PROMPT が存在しないなら、BC_TTY_MODE 環境変数、-P と --no-prompt オプション、-R と --no-read-prompt オプションでプロンプトを 有効または無効にすることができます。詳細については、環境変数とオプショ ンセクションを参照してください。 SIGNAL 処理 SIGINT を送信することによって、bc(1) は、次の 2 つのうちの 1 つを行ない ます。 bc(1) が対話型モードでないか (対話型モードセクションを参照)、または BC_SIGINT_RESET 環境変数 (環境変数セクションを参照) またはそのデフォル トは、整数でないか、0 であるなら、bc(1) は、終了します。 しかしながら、bc(1) が対話モードであり、BC_SIGINT_RESET またはそのデ フォルトが整数で 0 でないなら、bc(1) は、SIGINT を受け取るとき、現在の 入力の実行を停止してリセット (リセットセクションを参照) します。 "現在の入力" は、2 つの 1 つを意味することに注意してください。bc(1) が 対話モードで stdin からの入力を処理しているなら、さらなる入力を問い合わ せます。bc(1) が対話モードでファイルからの入力を処理しているなら、ファ イルの処理を停止し、次のファイルの処理を開始し、それが存在するなら、他 のファイルが存在しないなら、stdin からの入力を求めます。 これは、ファイルを実行しているときに SIGINT が、bc(1) に送られてくるな ら、すぐに次のファイルの実行を開始するので、bc(1) が、シグナルへの応答 しなかったように思われるかもしれません。これは、意図的です。ユーザが実 行するほとんどのファイルは、bc(1) と対話するとき、すぐに解析される関数 定義があります。ファイルの実行に時間がかかるなら、そのファイルにバグが あるかもしれません。残りのファイルは、ユーザが続行することができ、問題 なく実行されます。 SIGTERM と SIGQUIT によって、bc(1) は、クリーンアップして終了し、たのす べてのシグナルのためにデフォルトのハンドラを使用します。1 つの例外は、 SIGHUP です。この場合に、bc(1) が TTY モード (TTY モードセクションを参 照) であるときのみ、SIGHUP によって、bc(1) は、クリーンアップして終了し ます。 コマンド行の履歴 bc(1) は、対話型なコマンド行編集をサポートします。 bc(1) が TTY モード (TTY モードセクションを参照) であるなら、ヒストリ を、有効にすることができます。これは、stdin, stdout と stderr がすべて TTY に接続されているときのみ、コマンド行のヒストリを有効にすることがで きまることを意味します。 TTY モード自体のように、環境変数 BC_TTY_MODE でオンまたはオフを切り替え ることができます (環境変数セクションを参照)。 ヒストリが有効にされるなら、以前の行を再び呼び出し、矢印キーで編集する ことができます。 注意: タブは、8 つの空白に変換されます。 ロケール この bc(1) は、異なるロケールのための追加のエラーメッセージのサポートが 出荷され、したがって、LC_MESSAGES をサポートしています。 関連項目 dc(1) 規格 bc(1) は、 (https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html) の 仕様 IEEE Std 1003.1-2017 ("POSIX.1-2017") に準拠しています。フラグ -efghiqsvVw、すべての長いオプションと拡張された上述は、この仕様の拡張で す。 さらに、quit の振る舞いは、すべての既知の実装とは異なる仕様の解釈を実装 しています。詳細については、構文セクションの文サブセクションを参照して ください。 なお、仕様は、LC_NUMERIC の値にかかわらず、bc(1) が、radix ポイントとし てピリオド (.) を使用する数値のみを受け付けることが明示されていることに 注意してください。 この bc(1) は、異なるロケールのためのエラーメッセージをサポートして、し たがって、LC_MESSAGES をサポートしています。 バグ バージョン 6.1.0 より前に、この bc(1) は、quit 文のための正しくない振る 舞いを行なっていました。 他のバグは、知られていません。https://git.gavinhoward.com/gavin/bc でバ グを報告してください。 作者 Gavin D. Howard <gavin@gavinhoward.com> と貢献者。 Gavin D. Howard October 2022 BC(1)