これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、または MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド dc です。
プログラム:
NAME
dc - 任意精度の計算機
SYNOPSIS
dc [-V] [--バージョン] [-h] [--help]
[-e スクリプト式] [--式=スクリプト式]
[-f スクリプトファイル] [--file=スクリプトファイル]
[ファイル ...]
DESCRIPTION
dc は、無限の精度演算をサポートする逆磨き卓上電卓です。 それ
マクロを定義して呼び出すこともできます。 通常は dc 標準入力から読み取ります。 もしも
コマンド引数が指定されている場合、それらはファイル名であり、 dc を読み取って実行します
標準入力から読み取る前のファイルの内容。 すべての通常の出力は次のとおりです。
標準出力。 すべてのエラー出力は標準エラーに出力されます。
逆研磨電卓は数値をスタックに保存します。 数字を入力すると、その数字が押し込まれます。
スタック。 算術演算は引数をスタックからポップし、結果をプッシュします。
数字を入力するには dc、数字を入力します (大文字を使用) A F 「数字」として
XNUMX を超える入力基数を操作する場合)、オプションの小数点を使用します。
指数表記はサポートされていません。 負の数値を入力するには、数値の先頭に次の文字を付けます。
「_」。 「-」は減算の二項演算子であるため、これには使用できません。
XNUMX つの数字を続けて入力するには、スペースまたは改行で区切ります。 これらには何もありません
コマンドとしての意味。
OPTIONS
dc 次のコマンドライン オプションを使用して呼び出すことができます。
-V
- バージョン
のバージョンを印刷します dc 実行中であることと著作権表示を確認して終了します。
-h
- 助けて これらのコマンドライン オプションとバグを簡単に要約した使用法メッセージを出力します。
報告アドレスを選択して終了します。
-e スクリプト
--式=スクリプト
コマンドを追加します スクリプト の処理中に実行される一連のコマンドに
入力。
-f スクリプトファイル
--file =スクリプトファイル
ファイルに含まれるコマンドを追加します スクリプトファイル 実行するコマンドのセットに
入力を処理している間。
上記の処理後にコマンドライン パラメータが残っている場合、これらのパラメータは
処理される入力ファイルの名前として解釈されます。 ファイル名は - を参照
標準入力ストリーム。 スクリプト ファイルがない場合、または
式が指定されています。
印刷 コマンド
p スタックを変更せずに、スタックの一番上に値を出力します。 改行とは、
値の後に出力されます。
n 値をスタックの一番上に出力してポップオフし、値を出力しません。
後は改行。
P スタックの一番上の値をポップオフします。 文字列の場合は単純に出力されます
末尾の改行なしで。 それ以外の場合は数値であり、その整数部分は
その絶対値は、「ベース (UCHAR_MAX+1)」バイト ストリームとして出力されます。 仮定すると
(UCHAR_MAX+1) は 256 (8 ビット バイトのほとんどのマシンと同様)、
シーケンス KSK0k1/_1Ss [ls*]Sxd0>x [256~SSD0 qaPlxx]
dsxxsx0sqLqsxLxLK+k この機能も達成できます。 (複雑さの多くは
上記のネイティブ DC コードの原因は、~ が文字を逆方向に計算することです。
すべてのレジスタを確実に元の状態に戻したいという欲求。)
f スタックの内容全体を何も変更せずに出力します。 これはいいですね
道に迷った場合、またはいくつかの効果を知りたい場合に使用するコマンド
コマンドが行われました。
算術
+ XNUMX つの値をスタックからポップし、追加して、結果をプッシュします。 の精度
結果は引数の値によってのみ決定され、次のようにするだけで十分です。
ちょうど。
- XNUMX つの値をポップし、最初にポップした値を XNUMX 番目にポップした値から減算し、
結果をプッシュします。
* XNUMX つの値をポップし、乗算し、結果をプッシュします。 分数の数
結果の桁数は、現在の精度値と桁数によって異なります。
XNUMX つの引数の小数桁。
/ XNUMX つの値をポップし、最初にポップした値から XNUMX 番目にポップした値を除算します。
結果をプッシュします。 小数部の桁数は精度によって指定されます。
の値です。
% XNUMX つの値をポップし、除算の余りを計算します。 / コマンドは
して、それをプッシュします。 計算された値は、
シーケンス Sd dld/ Ld*- .
~ XNUMX つの値をポップし、最初にポップした値から XNUMX 番目にポップした値を除算します。 の
商が最初にプッシュされ、剰余が次にプッシュされます。 分数の数
除算で使用される桁は精度の値によって指定されます。 (シーケンス
SdSn lnld/ LnLd% わずかに異なるエラーでこの機能を実行することもできます
チェック中。)
^ XNUMX つの値をポップし、ポップされた最初の値を指数として使用して累乗します。
XNUMX番目はベースとしてポップされました。 指数の小数部分は無視されます。 の
精度値は、結果の小数部の桁数を指定します。
| XNUMX つの値をポップし、べき乗剰余を計算します。 ポップされた最初の値は
低減係数として使用されます。 この値はゼロ以外の数値である必要があり、次のようにする必要があります。
整数。 XNUMX 番目にポップされた値は指数として使用されます。 この値は非
負の数の場合、この指数の小数部分は無視されます。 の
ポップされた XNUMX 番目の値はべき乗される基数です。
整数。 小さな整数の場合、これはシーケンスに似ています Sm^Lm%、しかし、とは異なり ^、 この
コマンドは任意の大きな指数でも機能します。
v XNUMX つの値をポップし、その平方根を計算して、それをプッシュします。 精度の値
結果の小数部の桁数を指定します。
ほとんどの算術演算は「精度の値」の影響を受けます。これは次のように設定できます。
k 指図。 デフォルトの精度値はゼロです。これは、すべての算術演算が有効であることを意味します。
加算と減算を除き、整数の結果が得られます。
スタック 管理
c スタックをクリアして空にします。
d スタックの一番上の値を複製し、その値の別のコピーをプッシュします。 したがって、
「4d*p」は4のXNUMX乗を計算して出力します。
r スタック上の上位 XNUMX つの値の順序を逆にします (入れ替えます)。 (これも可能です
シーケンスで達成 SaSbLabLb.)
レジスタ
dc 少なくとも 256 個のメモリ レジスタがあり、それぞれに XNUMX 文字で名前が付けられます。 あなたはできる
数値または文字列をレジスタに保存し、後で取得します。
sr スタックの最上位から値をポップし、レジスタに格納します。 r.
lr レジスタの値をコピーします r そしてそれをスタックにプッシュします。 これによって変更されることはありません
の内容 r.
各レジスタには独自のスタックも含まれています。 現在のレジスタ値は先頭です。
レジスタのスタック。
Sr (メイン) スタックの一番上から値をポップし、それをスタックにプッシュします。
登録 r。 レジスタの前の値にはアクセスできなくなります。
Lr レジスタの先頭から値をポップします rのスタックをメインスタックにプッシュします。
レジスタ内の以前の値 rのスタック (存在する場合) を介してアクセスできるようになりました。 lr
技術パラメータ
dc には、その動作を制御する XNUMX つのパラメータがあります。精度、入力基数、および
出力基数。 精度は、データ内に保持する小数部の桁数を指定します。
ほとんどの算術演算の結果。 入力基数は、次の解釈を制御します。
入力された数字。 入力されるすべての数値はこの基数を使用します。 出力基数は次の目的で使用されます。
数字を印刷する。
入力基数と出力基数は別個のパラメーターです。 それらを不平等にすることもできます。
役立つこともあれば、混乱を招くこともあります。 入力基数は 2 ~ 16 の範囲にする必要があります。 出力
基数は少なくとも 2 である必要があります。精度は XNUMX 以上である必要があります。 精度は常に
現在の入力または出力の基数に関係なく、XNUMX 進数で測定されます。
i スタックの最上位から値をポップし、それを使用して入力基数を設定します。
o スタックの最上位から値をポップし、それを使用して出力基数を設定します。
k スタックの最上位から値をポップし、それを使用して精度を設定します。
I 現在の入力基数をスタックにプッシュします。
O 現在の出力基数をスタックにプッシュします。
K 現在の精度をスタックにプッシュします。
弦
dc 数値だけでなく文字列を操作する能力も限られています。 あなただけのもの
文字列でできることは、文字列を出力したり、マクロとして実行したりすることです (つまり、
文字列の内容は次のように処理されます dc コマンド)。 すべてのレジスタとスタックは、
弦を握って、 dc は、指定されたオブジェクトが文字列であるか数値であるかを常に知っています。 いくつかの
算術演算などのコマンドは引数として数値を要求し、次の場合はエラーを出力します。
与えられた文字列。 他のコマンドは数値または文字列を受け入れることができます。 たとえば、 p
コマンドはどちらかを受け入れ、そのタイプに応じてオブジェクトを出力します。
[文字]
を含む文字列を作成します 文字 (バランスの間に含まれます) [ ]
文字) をスタックにプッシュします。 例えば、 [ふー]P 文字を印刷します
foo (改行なし)。
a スタックの最上位がポップされます。 数値の場合は、この下位バイト
数値は文字列に変換され、スタックにプッシュされます。 それ以外の場合は、最上位の
stack は文字列であり、その文字列の最初の文字がプッシュバックされます。
x 値をスタックからポップし、マクロとして実行します。 通常は次のようにする必要があります
弦; それが数値の場合は、単純にスタックにプッシュバックされます。 例えば、
[1本]× マクロを実行します 1p 押し出すもの 1 スタックとプリントの上に 1 別に
ライン。
マクロはレジスタに保存されることがほとんどです。 [1p]さ 印刷するマクロを保存します 1 レジスターに入れる
a, ゆるい このマクロを呼び出します。
>r XNUMX つの値をスタックからポップし、数値であると仮定して比較します。
レジスタの内容を実行する r 元のスタックのトップが
もっと大きい。 したがって、 1 2>a レジスタを呼び出します aの内容と 2 1>a しない。
!>r 似ていますが、元のスタックのトップが以下の場合にマクロを呼び出します。
(以下) 上から XNUMX 番目のものは何でしたか。
<r 似ていますが、元のスタックのトップが小さい場合にマクロを呼び出します。
!<r 似ていますが、元のスタックの最上位が以下でない場合にマクロを呼び出します。
(以上) 上から XNUMX 番目のものは何でしたか。
=r 似ていますが、ポップされた XNUMX つの数値が等しい場合にマクロを呼び出します。
!=r 似ていますが、ポップされた XNUMX つの数値が等しくない場合にマクロを呼び出します。
? ターミナルから行を読み取り、実行します。 このコマンドにより、マクロで次のことが可能になります。
ユーザーからの入力を要求します。
q マクロとそれを呼び出したマクロから終了します。 から呼び出された場合は、
トップレベル、またはトップレベルから直接呼び出されたマクロから、 q
コマンドによって引き起こされる dc 出る。
Q 値をスタックからポップし、それをマクロ実行のレベルのカウントとして使用して、
退出する。 したがって、 3Q XNUMXつのレベルから抜けます。 の Q コマンドは決して引き起こしません dc 〜へ
出口。
ステータス お問い合わせ
Z 値をスタックからポップし、その値の桁数 (または桁数) を計算します。
文字列の場合は文字)、その数値をプッシュします。 の桁数
数はそうします 先頭のゼロは、先頭のゼロが右側にある場合でも含めます。
基数点。
X スタックから値をポップし、その値の小数部の桁数を計算し、
その番号をプッシュします。 文字列の場合、プッシュされる値は 0 です。
z 現在のスタックの深さ (スタックの前にスタックにあるオブジェクトの数) をプッシュします。
の実行 z
その他
! 行の残りの部分はシステム コマンドとして実行されます。 !< の解析に注意してください。
!=、および !> コマンドが優先されるため、以下で始まるコマンドを実行したい場合は、
<、=、または > の後にスペースを追加する必要があります。
# 行の残りの部分をコメントとして解釈します。
:r スタックから上位 XNUMX つの値をポップします。 上から XNUMX 番目の古い値は次のようになります。
配列に格納される r、古いスタックのトップ値によってインデックスが付けられます。
;r スタックの最上位をポップし、それを配列のインデックスとして使用します r。 選択した値
その後、スタックにプッシュされます。
レジスタのスタックされた各インスタンスには、それに関連付けられた独自の配列があることに注意してください。 したがって
1 0:a 0Sa 2 0:a La 0;ap 1 は 2:a のインスタンスに格納されているため、0 が出力されます。
後にポップされました。
onworks.net サービスを使用して DC オンラインを使用する
