英語フランス語スペイン語

Ad


OnWorksファビコン

bc - クラウドでオンライン

Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、または MAC OS オンライン エミュレーターを介して、OnWorks の無料ホスティング プロバイダーで bc を実行します。

これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、MAC OS オンライン エミュレーターなど、複数の無料オンライン ワークステーションのいずれかを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド bc です。

プログラム:

NAME


bc - 任意精度計算言語

構文


bc [ -hlwsqv ] [長いオプション] [ file ... ]

DESCRIPTION


bc のインタラクティブな実行で任意精度の数値をサポートする言語です。
ステートメント。 構文には、C プログラミング言語との類似点がいくつかあります。 あ
コマンドラインオプションで標準の数学ライブラリを利用できます。 必要に応じて、数学ライブラリ
ファイルを処理する前に定義されます。 bc すべてのファイルのコードを処理することから始めます
リストされた順序でコマンドラインにリストされます。 すべてのファイルが処理された後、 bc
標準入力から読み取ります。 すべてのコードは、読み取られると実行されます。 (ファイルに
プロセッサを停止するコマンド、 bc 標準入力から読み取ることはありません。)

このバージョンの bc 従来を超えるいくつかの拡張機能が含まれています bc 実装と
POSIX ドラフト標準。 コマンド ライン オプションにより、これらの拡張機能が
警告または拒否されます。 このドキュメントでは、このドキュメントで受け入れられている言語について説明します
プロセッサー。 拡張子はそのように識別されます。

OPTIONS
-h、-help
使用法を印刷して終了します。

-i、--interactive
インタラクティブモードを強制します。

-l、--mathlib
標準数学ライブラリを定義します。

-w, -- 警告
POSIX の拡張機能について警告する bc.

-s, --標準
正確に P​​OSIX を処理する bc 言語。

-q、-quiet
通常の GNU bc ウェルカムを出力しません。

-v、-version
バージョン番号と著作権を出力して終了します。

NUMBERS
その中で最も基本的な要素 bc 数です。 数値は任意精度の数値です。
この精度は、整数部分と小数部分の両方にあります。 すべての数字は
内部では XNUMX 進数で表され、すべての計算は XNUMX 進数で行われます。 (このバージョン
除算と乗算の結果を切り捨てます。) には XNUMX つの属性があります。
数字、長さ、スケール。 長さは、有効な XNUMX 進数の合計数です。
数字の桁数であり、スケールは小数点以下の合計桁数です
点。 例えば:
.000001 は、長さが 6 でスケールが 6 です。
1935.000 の長さは 7 で、スケールは 3 です。

変数
数値は、単純変数と配列の XNUMX 種類の変数に格納されます。 どちらもシンプル
変数と配列変数に名前が付けられます。 名前は文字で始まり、その後に任意の数字が続きます
文字、数字、およびアンダースコアの。 すべての文字は小文字でなければなりません。 (完全な英数字
名前は拡張子です。 POSIX で bc すべての名前は単一の小文字です。) タイプ
すべての配列変数名の後には
括弧 ([])。

XNUMX つの特殊変数があります。 規模、 ibase、 おばせ、 および last. 階段 いくつかの方法を定義します
演算では小数点以下の数字を使用します。 のデフォルト値 階段 0です。 ベースから
および ボス 入力数値と出力数値の変換ベースを定義します。 両方のデフォルト
入力と出力は基数 10 です。 last (拡張子) は、の値を持つ変数です。
最後に印刷された番号。 これらについては、必要に応じてさらに詳しく説明します。 すべての
これらの変数には、式で使用されるだけでなく、値が割り当てられている場合があります。

コメント
のコメント bc 文字から始める /* そして文字で終わります */. コメントは
どこからでも開始でき、入力では単一のスペースとして表示されます。 (これにより、コメントが
他の入力項目を区切ります。 たとえば、コメントは途中で見つけることができません。
変数名) コメントには、先頭と末尾の間に改行 (行末) が含まれます。
コメントの。

のスクリプトの使用をサポートするには bcとして、XNUMX 行のコメントが追加されました。
拡大。 XNUMX 行のコメントは、 # 文字の次の終わりに続く
この線。 行末文字はコメントの一部ではなく、通常どおり処理されます。

表現
数値は、式とステートメントによって操作されます。 言語だったので、
インタラクティブになるように設計されているため、ステートメントと式はできるだけ早く実行されます。
「メイン」プログラムはありません。 代わりに、コードは検出されたときに実行されます。 (機能、
後で詳しく説明しますが、検出されたときに定義されます。)

単純な式は単なる定数です。 bc 定数を内部 XNUMX 進数に変換します
変数で指定された、現在の入力基数を使用した数値 ベースから。 (あります
関数の例外) の正当な値 ベースから 2 ~ 16 です。値の割り当て
この範囲外に ベースから 結果は 2 または 16 の値になります。入力数値には以下が含まれる場合があります
0 ~ 9 および A ~ F の文字。 (注: 大文字でなければなりません。小文字は可変です。
XNUMX 桁の数字は、値に関係なく、常にその桁の値を持ちます。
of ベースから. (つまり、A = 10。) 複数桁の数字の場合、 bc すべての入力桁を大きく変更する
の値に ibase に等しい ベースから-1. これで数字が出る FFF 常に最大の 3
入力基数の桁数。

完全な式は、他の多くの高級言語に似ています。 XNUMXつしかないので
種類を混在させるためのルールはありません。 代わりに、ルールがあります。
表現のスケール。 すべての表現にはスケールがあります。 これは、のスケールから導き出されます。
元の数値、実行された操作、および多くの場合、変数の値
階段. 変数の正当な値 階段 0 から C で表現できる最大数まで
整数。

以下の正当な式の説明では、「expr」は完全な式を指します。
「var」は、単純変数または配列変数を指します。 単純な変数は単なる

配列変数は次のように指定されます
[]
特に言及されていない限り、結果のスケールは、
含まれる表現。

- expr 結果は式の否定です。

++ var 変数は XNUMX ずつインクリメントされ、新しい値は
式です。

-- var 変数は XNUMX 減分され、新しい値は
式です。

++だった
式の結果は変数の値であり、変数は
XNUMXつ増えました。

var -- 式の結果は変数の値であり、変数は
XNUMX 減ります。

式 + 式
式の結果は、XNUMX つの式の合計です。

式 - 式
式の結果は、XNUMX つの式の差です。

式 * 式
式の結果は、XNUMX つの式の積です。

式 / 式
式の結果は、XNUMX つの式の商です。 の規模
結果は変数の値です 階段.

式 % 式
式の結果は「剰余」であり、次のように計算されます。
道。 a%b を計算するには、まず a/b を計算して 階段 数字。 その結果が使われる
a-(a/b)*b を最大のスケールまで計算する 階段+scale(b) と scale(a)。
If 階段 はゼロに設定され、両方の式は整数です。この式は
整数剰余関数。

式 ^ 式
式の結果は、XNUMX 番目を XNUMX 番目に累乗した値です。 の
XNUMX 番目の式は整数でなければなりません。 (XNUMX 番目の式が整数でない場合、
警告が生成され、整数値を取得するために式が切り捨てられます。)
結果のスケールは 階段 指数が負の場合。 指数が
正の結果のスケールは、最初のスケールの最小値です
式に指数の値を掛けた値と最大値 階段 そしてスケール
最初の式の。 (例: scale(a^b) = min(scale(a)*b, max( 規模、
scale(a)))) expr^0 は常に値 1 を返すことに注意してください。

(式)
これにより、標準の優先順位が変更され、式の評価が強制されます。

変数 = 式
変数には、式の値が割り当てられます。

変数=式
これは "var = var 「var」部分を除いて「expr」
一度だけ評価されます。 「var」が配列の場合、これは違いを生む可能性があります。

関係式は、常に 0 または 1, 0 に評価される特別な種類の式です。
関係が false の場合は 1、関係が true の場合は XNUMX。 これらは、あらゆる法的文書に表示される可能性があります。
表現。 (POSIX bc では、関係式は if、while、
およびステートメントの場合、それらのステートメントで実行できるリレーショナル テストは XNUMX つだけです。)
演算子は

expr1 < expr2
expr1 が厳密に expr1 より小さい場合、結果は 2 です。

expr1 <= expr2
expr1 が expr1 以下の場合、結果は 2 です。

expr1 > expr2
expr1 が厳密に expr1 より大きい場合、結果は 2 です。

expr1 >= expr2
expr1 が expr1 以上の場合、結果は 2 です。

式1 == 式2
expr1 が expr1 と等しい場合、結果は 2 です。

式1 != 式2
expr1 が expr1 と等しくない場合、結果は 2 です。

ブール演算も有効です。 (POSIX bc ブール演算はありません)。 の
すべてのブール演算の結果は、リレーショナルのように 0 と 1 (false と true の場合) です。
式。 ブール演算子は次のとおりです。

!expr expr が 1 の場合、結果は 0 です。

式 && 式
両方の式がゼロでない場合、結果は 1 です。

式 || 式
いずれかの式がゼロ以外の場合、結果は 1 です。

式の優先順位は次のとおりです: (低いものから高いものへ)
|| 演算子、左結合
&& 演算子、左結合
! 演算子、非関連
関係演算子、左結合
代入演算子、右結合
+ および - 演算子、左結合
*、/、および % 演算子、左結合
^ 演算子、右結合
単項 - 演算子、非結合
++ および -- 演算子、非結合

この優先順位は、POSIX に準拠するために選択されました。 bc プログラムは正しく実行されます。 この
関係演算子と論理演算子を使用すると、異常な動作が発生します
代入式で使用する場合。 次の式を検討してください。
a = 3 < 5

ほとんどの C プログラマーは、これが "3 < 5" (値 1) の結果を
変数「a」。 これが何をするか bc 変数 "a" に値 3 を代入し、
3 と 5 を比較します。関係演算子と論理演算子を使用する場合は、括弧を使用するのが最適です。
代入演算子で。

で提供されている特殊な式がいくつかあります。 bc. これらは関係があります
ユーザー定義関数と標準関数。 それらはすべて「(パラメータ)".
ユーザー定義関数については、関数のセクションを参照してください。 標準機能は次のとおりです。

長さ(式)
長さ関数の値は、有効桁数です。
式です。

読む ( )
read 関数 (拡張機能) は、標準入力から数値を読み取ります。
関数が発生する場所に関係なく。 これにより、
標準入力でのデータとプログラムの混合。 この機能の最適な使い方
ユーザーからの入力を必要とする以前に作成されたプログラムにあるが、決して許可しない
ユーザーが入力するプログラムコード。 read 関数の値は、
変数の現在の値を使用して標準入力から読み取った数値 ベースから
コンバージョンベースに。

スケール ( 式 )
スケール関数の値は、小数点以下の桁数です。
表現。

sqrt (式)
sqrt 関数の値は、式の平方根です。 もし
式が負の場合、実行時エラーが生成されます。

声明
ステートメント (ほとんどの代数言語と同様) は、式の順序付けを提供します。
評価。 の bc ステートメントは「できるだけ早く」実行されます。 実行は次の場合に行われます
改行が検出され、XNUMX つ以上の完全なステートメントがあります。 これによると
即時実行、改行は非常に重要です bc. 実際、セミコロンと
改行はステートメント区切りとして使用されます。 不適切に配置された改行は、
構文エラー。 改行はステートメントの区切り文字であるため、改行を非表示にすることができます
バックスラッシュ文字を使用して。 シーケンス "\ "、 どこ改行が表示されます
〜へ bc 改行の代わりに空白として。 ステートメントリストは一連のステートメントです
セミコロンと改行で区切られています。 以下はそのリストです bc 声明と何
(大括弧 ([]) で囲まれたものは、ステートメントのオプションの部分です。)

表現
このステートメントは、次の XNUMX つのいずれかを行います。 式が「」で始まる場合
...」の場合、割り当てステートメントと見なされます。
式は代入ステートメントではありません。式は評価され、出力されます
出力に。 数値が出力された後、改行が出力されます。 例えば、
「a=1」は代入文、「(a=1)」は埋め込み式
割り当て。 印刷されるすべての数値は、
変数 ボス. の正当な値 ボス BC_BASE_MAX までの 2 です。 (参照してください
セクション LIMITS.) 底が 2 から 16 の場合、通常の数字の書き方は次のとおりです。
中古。 16 より大きいベースの場合、 bc の複数文字数字方式を使用します
上位の各基数が基数 10 の数値として印刷される数値を印刷します。
複数文字の数字はスペースで区切られます。 各桁には数字が含まれています
"obase-1" の XNUMX 進数値を表すために必要な文字数。 数字以来
任意の精度であるため、一部の数値は単一の出力に出力できない場合があります
ライン。 これらの長い数字は、「\」を最後に使用して複数の行に分割されます
行上の文字。 70 行あたりの最大印刷文字数は XNUMX 文字です。
のインタラクティブな性質に bc、数値を出力すると、次の副作用が発生します
出力された値を特殊変数に代入する last. これにより、ユーザーは
出力された式を再入力することなく、出力された最後の値を回復します
数字。 への割り当て last 正当であり、最後に印刷された値を上書きします
割り当てられた値で。 新しく割り当てられた値は、次の
番号が出力されるか、別の値が割り当てられます last. (一部のインストールは
短縮形として数字の一部ではない単一のピリオド (.) の使用を許可する
forの表記 last.)

string 文字列が出力に出力されます。 文字列は二重引用符で始まります
次の二重引用符までのすべての文字を含みます。 すべてのキャラクター
改行を含めて文字どおりに解釈されます。 後に改行文字は出力されません
文字列。

印刷 リスト
print ステートメント (拡張機能) は、別の出力方法を提供します。 リスト"
コンマで区切られた文字列と式のリストです。 各弦や
式はリストの順に出力されます。 終了改行は印刷されません。
式が評価され、その値が出力されて変数に割り当てられます
last. print ステートメント内の文字列は出力に出力され、含まれる場合があります。
特殊文字。 特殊文字は円記号 (\) で始まります。
によって認識される特殊文字 bc "a" (アラートまたはベル)、"b" (バックスペース)、
"f" (フォーム フィード)、"n" (改行)、"r" (キャリッジ リターン)、"q" (二重引用符)、"t"
(タブ)、および「\」(バックスラッシュ)。 バックスラッシュに続くその他の文字は、
無視されます。

{ステートメントリスト}
これが複文です。 複数のステートメントをグループ化できます
実行のために一緒に。

if ( 式 ) ステートメント 1 [ほかに 声明2]
if ステートメントは式を評価し、statement1 または statement2 を実行します。
式の値によって異なります。 式がゼロ以外の場合、
statement1 が実行されます。 statement2 が存在し、式の値が
が 0 の場合、statement2 が実行されます。 (else 句は拡張機能です。)

while ( 式 ) ステートメント
while ステートメントは、式がゼロでない間、ステートメントを実行します。
ステートメントの各実行前に式を評価します。 終了
ゼロの式の値またはブレークの実行によってループの発生
声明。

for ( [式1] ; [式2] ; [式3] ) ステートメント
for ステートメントは、ステートメントの繰り返し実行を制御します。 式1は
ループの前に評価されます。 Expression2 は、各実行前に評価されます。
声明。 ゼロ以外の場合、ステートメントが評価されます。 ゼロの場合、ループ
終了します。 ステートメントを実行するたびに、expression3 が評価されます。
expression2 の再評価の前。 式1または式3が欠落している場合、
評価される時点では何も評価されません。 もしexpression2が
式 1 に値 2 を代入するのと同じです。 (オプションの
式は拡張です。 POSIX bc XNUMX つの式すべてが必要です)。
以下は、for ステートメントの同等のコードです。
式1;
while (式 2) {
声明;
式3;
}

破る このステートメントは、最後に囲んでいる while ステートメントまたは
ステートメント用。

続ける
continue ステートメント (拡張) により、最新の囲みが発生します。
次の反復を開始するステートメント。

停止する 停止ステートメント (拡張) は、実行されるステートメントであり、 bc
プロセッサが実行された場合にのみ終了します。 たとえば、「if (0 == 1) 停止」は
引き起こさない bc ホルトが実行されないため、終了します。

return 関数から値 0 を返します。 (関数のセクションを参照してください。)

return ( 表現 )
関数から式の値を返します。 (セクションを参照してください。
拡張として、括弧は必要ありません。

擬似 声明
これらのステートメントは、従来の意味でのステートメントではありません。 それらは実行されません
ステートメント。 それらの機能は「コンパイル」時に実行されます。

制限 のローカル バージョンによって適用されるローカル制限を出力します。 bc. これは拡張機能です。

やめます quit ステートメントが読み取られると、 bc に関係なく、プロセッサは終了します。
quit ステートメントがある場所。 たとえば、「if (0 == 1) quit」は bc
終了します。

保証
より長い保証通知を印刷します。 これは拡張機能です。

関数
関数は、後で実行できる計算を定義する方法を提供します。
の機能 bc 常に値を計算し、呼び出し元に返します。 関数定義
定義に遭遇するまで関数が未定義であるという意味で「動的」です
入力で。 その定義は、同じものに対する別の定義関数まで使用されます。
名前に遭遇。 その後、古い定義が新しい定義に置き換えられます。 機能
は次のように定義されます。
定義します ( パラメータ ) { 改行
auto_list ステートメントリスト }
関数呼び出しは、" という形式の単なる式です。(パラメータ)".

パラメーターは数値または配列 (拡張) です。 関数定義では、XNUMX 個以上
パラメータは、コンマで区切られた名前をリストすることによって定義されます。 すべてのパラメータは
値パラメーターによる呼び出し。 配列は、パラメーター定義で
表記」[]"。関数呼び出しでは、実際のパラメーターは完全な式です。
数値パラメーター。 配列を定義する場合と同じ表記法が、配列を渡すために使用されます
パラメーター。 名前付き配列は、値によって関数に渡されます。 機能以来
定義は動的であり、パラメーターの数と型は関数の実行時にチェックされます。
呼ばれた。 パラメータの数またはタイプが一致しないと、実行時エラーが発生します。 あ
未定義関数の呼び出しでも実行時エラーが発生します。

  auto_list 「ローカル」で使用する変数のオプションのリストです。 の構文
自動リスト (存在する場合) は "オート , ... ;". (セミコロンはオプションです。)
自動変数の名前です。 配列は、以下と同じ表記を使用して指定できます。
パラメータで使用されます。 これらの変数の値は、開始時にスタックにプッシュされます。
関数。 その後、変数はゼロに初期化され、全体で使用されます。
関数の実行。 関数の終了時に、これらの変数がポップされるため、
これらの変数の元の値 (関数呼び出し時) が復元されます。 の
パラメータは、実際には自動変数であり、
関数呼び出し。 自動変数は従来のローカル変数とは異なります。
関数 A が関数 B を呼び出すと、B は関数 A の auto 変数にアクセスすることができます。
関数 B がそれらを自動変数と呼んでいない限り、同じ名前です。 という事実のために
変数とパラメータがスタックにプッシュされ、 bc 再帰関数をサポートします。

関数本体はのリストです bc ステートメント。 繰り返しますが、ステートメントは
セミコロンまたは改行。 return ステートメントは関数の終了を引き起こし、
値の戻り。 return ステートメントには XNUMX つのバージョンがあります。 第一形態、
"return"、呼び出し式に値 0 を返します。XNUMX 番目の形式"return (
表現 )"、式の値を計算し、その値を呼び出し元に返します
表現。 暗黙の "return (0)" すべての関数の最後に。これにより、
明示的な return ステートメントなしで終了して 0 を返す関数。

関数は変数の使用方法も変更します ベースから. 関数本体のすべての定数
の値を使用して変換されます ベースから 関数呼び出し時。 の変化
ベースから 標準以外の関数の実行中は無視されます
function read、常に現在の値を使用します ベースから 数値変換用。

関数にいくつかの拡張機能が追加されました。 まず、定義の形式は
少しリラックスした。 標準では、開始ブレースが
定義します キーワードと他のすべての部分は、次の行にある必要があります。 このバージョンの bc 意志
関数の左中括弧の前後に任意の数の改行を許可します。 にとって
たとえば、次の定義は有効です。
定義 d (n) { return (2*n); }
定義 d (n)
{ リターン (2*n); }

関数は次のように定義できます。 ボイド. void 関数は値を返さないため、
値が必要なあらゆる場所で使用されます。 次の場合、void 関数は出力を生成しません。
入力行でそれ自体が呼び出されます。 キーワード ボイド キーワードの間に置かれる
定義します そして関数名。 たとえば、次のセッションを考えてみましょう。
define py (y) { print "--->", y, "<---", "\n"; }
define void px (x) { print "--->", x, "<---", "\n"; }
py(1)
--->1<---
0
px(1)
--->1<---
Since py は void 関数ではありません。 py(1) 目的の出力を印刷してから
関数の値である XNUMX 行目を出力します。 関数の値から
明示的な return ステートメントがゼロではない場合、ゼロが出力されます。 にとって px(1),
関数は void 関数であるため、ゼロは出力されません。

また、配列の変数による呼び出しが追加されました。 変数配列による呼び出しを宣言するには、
関数定義での配列パラメータの宣言は、"*名前[]「。
関数の呼び出しは、値配列による呼び出しと同じままです。

数学 としょうかん
If bc で呼び出されます -l オプションを使用すると、数学ライブラリがプリロードされ、デフォルトのスケールは
20 に設定します。数学関数は、その時点で設定されたスケールで結果を計算します。
彼らの呼びかけの。 数学ライブラリでは、次の関数が定義されています。

S(x) x のサイン、x はラジアンです。

c(x) x のコサイン、x はラジアンです。

a(x) x のアークタンジェント、アークタンジェントはラジアンを返します。

l(x) x の自然対数。

x) e を値 x に累乗する指数関数。

j (n、x)
x の整数次数 n のベッセル関数。


In /bin/sh、次は「pi」の値をシェル変数に割り当てます pi.
pi=$(echo "スケール=10; 4*a(1)" | bc -l)

以下は、数学ライブラリで使用される指数関数の定義です。
この関数は POSIX で書かれています bc.
スケール = 20

/* e^x = (e^(x/2))^2 という事実を使用
x が十分に小さい場合、級数を使用します。
e^x = 1 + x + x^2/2! + x^3/3! + ...
*/

e(x) を定義する {
自動 a、d、e、f、i、m、v、z

/* x の符号をチェックします。 */
もし (x<0) {
メートル = 1
x = -x
}

/* 前提条件 x. */
z = スケール;
スケール = 4 + z + .44*x;
一方 (x > 1) {
f += 1;
×/= 2;
}

/* 変数を初期化します。 */
v = 1+x
a = x
d = 1

for (i=2; 1; i++) {
e = (a *= x) / (d *= i)
もし (e == 0) {
if (f>0) while (f--) v = v*v;
スケール = z
(m) リターン (1/v) の場合。
リターン (v/1);
}
v += e
}
}

以下は、拡張機能を使用するコードです。 bc 簡単なプログラムを実装する
小切手帳の残高を計算するため。 このプログラムは、次のことができるようにファイルに保存するのが最適です。
使用するたびに再入力する必要なく、何度も使用できます。
スケール=2
print "\n小切手帳プログラム!\n"
print " 忘れないでください、預金はマイナスの取引です。\n"
print " 0 トランザクションで終了します。\n\n"

print "初期残高? "; バル=読み取り()
バル/= 1
「\n」を印刷します
while(1){
"現在の残高 = "; バル
"取引? "; トランス = 読み取り()
if (trans == 0) ブレーク;
バル -= トランス
バル/= 1
}
やめます

以下は、再帰階乗関数の定義です。
f(x)を定義する{
if (x <= 1) return (1);
戻り値 (f(x-1) * x);
}

読み込まれた行 そして リブエディット OPTIONS
GNU bc GNUを使用するために(構成オプションを介して)コンパイルできます 読み込まれた行 入力エディタ
ライブラリまたは BSD 自由編集 図書館。 これにより、ユーザーは前に行の編集を行うことができます
それらを送る bc. また、入力された以前の行の履歴も可能です。 このとき
オプションが選択されている、 bc にはもう XNUMX つの特別な変数があります。 この特別な変数、 history is
保持される履歴の行数。 にとって 読み込まれた行、-1 の値は、
無制限の数の履歴行が保持されます。 値の設定 history
正の数は、履歴行の数を指定された数に制限します。 0の値
履歴機能を無効にします。 デフォルト値は 100 です。詳細については、
GNU のユーザーマニュアル 読み込まれた行, history およびBSD 自由編集 ライブラリ。 有効にすることはできません
両言語で 読み込まれた行 および 自由編集 同時に。

違い
このバージョンの bc POSIX P1003.2/D11 ドラフトから実装され、いくつかの要素が含まれています
ドラフトおよび従来の実装との相違点と拡張。 それは
を使用した従来の方法では実装されていません dcとします。 このバージョンは単一のプロセスです
プログラムのバイトコード変換を解析して実行します。 「非公開」があります
代わりにバイトコードを標準出力に出力するオプション (-c)
それを実行すること。 主にパーサーのデバッグと数学の準備に使用されました
としょうかん。

違いの主な原因は拡張機能です。拡張機能では、機能が拡張されてさらに追加されます
新しい機能が追加された機能と追加。 のリストは次のとおりです。
違いと拡張。

LANG環境
このバージョンは、LANG の処理で POSIX 標準に準拠していません。
環境変数および LC_ で始まるすべての環境変数。

伝統的な名前と POSIX の名前 bc 関数、変数、および
配列。 で始まる複数文字の名前に拡張されました。
文字、数字、およびアンダースコア文字を含めることができます。


文字列に NUL 文字を含めることはできません。 POSIX では、すべての文字は
文字列に含まれます。

最後の POSIX bc 〜を持っていない last 変数。 のいくつかの実装 bc ピリオドを使う
(。) 似たような方法で。

比較
POSIX bc if ステートメント、while ステートメント、および
for ステートメントの XNUMX 番目の式。 また、関係演算は XNUMX つだけです。
これらのステートメントのそれぞれで許可されています。

if 文、else 節
POSIX bc else 句はありません。

ステートメント用
POSIX bc すべての式が for ステートメントに存在する必要があります。

&&、||、!
POSIX bc には論理演算子がありません。

読み取り機能
POSIX bc 読み取り機能はありません。

print ステートメント
POSIX bc print ステートメントがありません。

ステートメントを続ける
POSIX bc continue ステートメントがありません。

returnステートメント
POSIX bc return 式を括弧で囲む必要があります。

配列パラメータ
POSIX bc (現在) 配列パラメーターを完全にはサポートしていません。 POSIX 文法
関数定義で配列を許可しますが、指定する方法は提供しません
実パラメータとしての配列。 (これはおそらく
文法。) の伝統的な実装 bc 値配列による呼び出しのみを持つ
パラメーター。

関数形式
POSIX bc と同じ行に左中括弧が必要です 定義します キーワードと
オート 次の行のステートメント。

=+、=-、=*、=/、=%、=^
POSIX bc これらの「古いスタイル」の代入演算子を定義する必要はありません。
このバージョンでは、これらの「古いスタイル」の割り当てが許可される場合があります。 制限ステートメントを使用して、
インストールされているバージョンがそれらをサポートしているかどうかを確認してください。 「古いスタイル」をサポートする場合
代入演算子、ステートメント「a =- 1」はデクリメントします a の代わりに 1
設定 a 値 -1 に。

数字のスペース
その他の実装 bc 数字にスペースを許可します。 たとえば、「x=1 3」は
変数 x に値 13 を代入します。 同じステートメントは構文を引き起こします
このバージョンのエラー bc.

エラーと実行
この実装は、どのようなコードになるかという点で他の実装とは異なります
プログラムに構文エラーやその他のエラーが見つかった場合に実行されます。 構文エラーの場合
が関数定義で見つかった場合、エラー リカバリは関数の先頭を見つけようとします。
ステートメントを呼び出して、関数の解析を続けます。 構文エラーが見つかったら
関数は呼び出し可能ではなく、未定義になります。 構文エラー
インタラクティブな実行コードでは、現在の実行ブロックが無効になります。 の
実行ブロックは、完了後に表示される行末で終了します。
ステートメントのシーケンス。 例えば、
a = 1
b = 2
XNUMX つの実行ブロックがあり、
{ a = 1
b = 2}
XNUMX つの実行ブロックがあります。 実行時エラーが発生すると、現在の実行が終了します
実行ブロック。 ランタイム警告は、現在の実行ブロックを終了しません。

割り込み
インタラクティブなセッション中、SIGINT シグナル (通常はコントロールによって生成される
端末からの C 文字) により、現在の実行ブロックが実行されます。
中断する。 どの関数が実行されたかを示す「ランタイム」エラーが表示されます。
中断しました。 すべてのランタイム構造がクリーンアップされると、メッセージが表示されます
ユーザーに通知するために印刷されます。 bc より多くの入力の準備ができています。 以前に定義されたすべて
関数は定義されたままであり、すべての非自動変数の値は
中断のポイント。 すべての自動変数と関数パラメーターが削除されます
クリーンアッププロセス中。 非対話セッション中、SIGINT シグナル
の実行全体を終了します bc.

LIMITS
以下は、これに対して現在設定されている制限です。 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 です。
変数、配列、関数。

ENVIRONMENT 変数


次の環境変数はによって処理されます bc:

POSIXLY_CORRECT
これはと同じです -s オプションを選択します。

BC_ENV_ARGS
これは、引数を取得する別のメカニズムです bc. フォーマットは
コマンドライン引数。 これらの引数が最初に処理されるため、リストされているファイルはすべて
環境内の引数は、コマンド ライン引数ファイルの前に処理されます。
これにより、ユーザーは「標準」オプションを設定し、ファイルを次の場所で処理できます。
のすべての呼び出し bc. 環境変数のファイルは通常、
ユーザーが毎回定義したい関数の関数定義を含む bc is
実行されます。

BC_LINE_LENGTH
これは、出力行の文字数を指定する整数である必要があります。
数字。 これには、長い数字のバックスラッシュと改行文字が含まれます。 として
拡張機能。ゼロの値は複数行機能を無効にします。 その他の値
この変数が 3 未満の場合、行の長さは 70 に設定されます。

診断


コマンドラインで開けないファイルがある場合は、 bc ファイルが
利用できなくなり、終了します。 また、コンパイル時および実行時の診断もあります。
自明であること。

onworks.net サービスを使用して bc online を使用する


無料のサーバーとワークステーション

Windows と Linux のアプリをダウンロード

Linuxコマンド

Ad