Provided by: manpages-ja_0.5.0.0.20161015+dfsg-1_all 

名称
dc - 任意精度の計算機
書式
dc [-V] [--version] [-h] [--help]
[-e scriptexpression] [--expression=scriptexpression]
[-f scriptfile] [--file=scriptfile]
[file ...]
解説
dc は、逆ポーランド形式の無限精度の計算が行える卓上計算機です。 この電卓は、定義やマクロ呼び出しも行えま
す。 普通、dc は標準入力から読み込みます。 コマンドライン引数が与えられた時は、それはファイル名となり、
dc はそのファイルを読み込み、ファイルの内容を実行した後で、 標準入力から入力を取ります。 通常の出力はすべ
て標準出力へ、エラー出力はすべて標準エラー出力へ 送られます。
逆ポーランド記法計算機は、数字をスタックに保存します。 数字を入力すると、それをスタックに積み上げます。
計算操作は、引数をスタックから取り出し、結果をスタックに積み上げます。
数字を dc に入力するためには、数字 (小数点が有っても構いません) を入力します。 指数表現はサポートされてい
ません。 負の数字を入力するためには、``_'' で始まる数字を入力します。 ``-'' は減算の二項演算子として使わ
れているので、 このために利用することはできません。 引き続いて 2 つの数字を入力するためには、あいだに空白
文字か改行文字を 入力します。 これらは、コマンドとしての意味はありません。
オプション
dc は、次のコマンドラインオプション付きで起動可能です:
-V
--version
実行される dc のバージョンと著作権情報を表示し、終了します。
-h
--help これらのコマンドラインオプションを短くまとめたメッセージと バグ報告アドレスを表示し、終了します。
-e script
--expression=script
script 中のコマンドを、入力処理中に実行するコマンド集合に追加します。
-f script-file
--file=script-file
ファイル script-file 中のコマンドを、入力処理中に実行するコマンド集合に追加します。
上記オプションの処理後にコマンドラインパラメータが残った場合、 これらのコマンドラインパラメータは処理対象
の入力ファイル名として 解釈されます。 ファイル名 - は、標準入力ストリームを指します。 ファイル名を指定し
ないと、標準入力が処理されます。
表示コマンド
p スタックを変更することなく、スタックの先頭の値を表示します。 改行文字が、値の後に表示されます。
n スタックの先頭の値を表示し、スタックから取り出します。 改行文字は、後に表示されません。
P スタックの先頭の値をスタックから取り出します。 値が文字列の場合、末尾の改行を付けずに、単に表示し
ます。 そうでない場合、これは数値であり、数値の絶対値の整数部分が、 "基数 (UCHAR_MAX+1)" のバイト
ストリームとして表示されます。 ここで (UCHAR_MAX+1) は 256 を仮定すると (ほとんどのマシンでは 8
ビットバイトなので)、文字列 KSK 0k1/ [_1*]sx d0>x [256~aPd0<x]dsxx sxLKk もまたこの機能を実現しま
すが、 x レジスタを潰してしまう副作用が違います。
f 変更することなく、 スタックの内容全部を表示します。 これは、忘れてしまった時に使ったり、あるコマン
ドがどのような効果を もたらすのかを知りたい時には、良いコマンドです。
計算
+ 2 つの値をスタックから取り出し、加算を行い、結果をスタックに積みます。 結果の精度は、引数の値にだ
けによって決まり、十分正確です。
- 2 つの値を取り出し、最初に取り出した値を 2 番目に取り出した値から 引きます。その後、結果をスタック
に積みます。
* 2 つの値を取り出し、かけ算を行い、結果をスタックに積みます。 結果の小数の桁数は、 現在の精度値 (以
下参照) と 2 つの引数の小数の桁数に依存します。
/ 2 つの値を取り出し、2 番目に取り出した値を最初に取り出した値で割り、 結果をスタックに積みます。 小
数の桁数は、精度値によって指定されます。
% 2 つの値を取り出し、 / で計算された割算の余りを計算し、結果をスタックに積みます。 計算される値
は、文字列 Sd dld/ Ld*- で計算される値と同じです。
~ 2 つの値を取り出し、2 番目に取り出した値を最初に取り出した値で割り、 その商を先にスタックに積
み、続いて余りを積みます。 割算に使われる小数の桁数は、精度値によって指定されます。 (エラーチェッ
ク機構はわずかに異なりますが、文字列 SdSn lnld/ LnLd% もこの機能と同様に働くでしょう。)
^ 2 つの値を取り出し、最初に取り出した値を指数とし、 2 つめの値を底として指数計算します。 指数の小数
点以下は無視されます。 精度値は、結果の小数の桁数を指定します。
| 3 つの値を取り出し、べき剰余 (modular exponentiation) を計算します。 最初に取り出した値は法
(reduction modulus) (この値は 0 以外の整数で なくてはいけません。) 、2 番目に取り出した値は指数
(この値は 非負の数字でなければならず、小数点以下は無視されます。)、 3 番目に取り出した値は累乗され
る底として用いられます。 これは整数であるべきです。 小さな整数に関しては、この機能は文字列 Sm
lble^ Lm% のように 働きます。しかし、^ を使う場合と違い、このコマンドは指数が 非常に大きくても働く
はずです。
v 1 つの値を取り出し、平方根を求め、結果をスタックに積みます。 精度値は、結果の小数の桁数を指定しま
す。
ほとんどの演算子は、``精度値'' に影響を受けます。 精度値は、 k コマンドで設定することができます。 デフォ
ルトの精度値は 0 です。これは、足し算と引き算を除くすべての算術は 整数値の結果を出すことを意味していま
す。
スタックの制御
c スタックを消去し、空にします。
d スタック先頭の値を複製し、スタックに積みます。 したがって、``4d*p'' は 4 の自乗を計算し、表示しま
す。
r スタック先頭の値と 2 番目の値の順番を入れ換えます。(交換します。)
レジスタ
dc は、少なくとも 256 個のメモリレジスタを持っています。 各レジスタは、1 文字の名前を持っています。 数字
や文字列をレジスタに保存し、後で取り出すことができます。
sr スタックの先頭から値を取り出し、レジスタ r に保存します。
lr レジスタ r の値を複製し、それをスタックに積みます。 これは、 r の内容を変更しません。
各レジスタは、それ自身のスタックを持っています。 現在のレジスタ値は、レジスタスタックの先頭です。
Sr (メイン) スタックの先頭の値を取り出し、レジスタ r のスタックにそれを積みます。 レジスタの以前の値
は、アクセスできなくなります。
Lr レジスタ r のスタックの先頭の値を取り出し、それをメインスタックに積みます。 レジスタ r のスタック
にあった以前の値がもしあれば、 lr コマンドを使ってアクセス可能となります。
パラメータ
dc は、その操作を制御するための 3 つのパラメータを持っています: 精度と、入力の基数、出力の基数です。 精度
は、ほとんどの算術操作の結果で保存される小数の桁数を指定します。 入力の基数は、入力された数字の解釈を制御
します。 入力されたすべての数字はこの基数をつかっているとされます。 出力の基数は、表示する数字で使われま
す。
入力と出力の基数は、分離されたパラメータです。 等しく設定しなくてもいいですが、これは便利だったり紛らわし
かったりします。 入力の基数は 2 から 16 の範囲でなければなりません。 出力の基数は最低 2 でなければなりま
せん。 精度は 0 以上でなければなりません。 精度は、現在の入力基数や出力基数に関係なく、いつも 10 進の桁数
で決められます。
i スタックの先頭から値を取り出し、入力基数を設定するために使います。
o スタックの先頭から値を取り出し、出力基数を設定するために使います。
k スタックの先頭から値を取り出し、精度を設定するために使います。
I 現在の入力基数をスタックに積みます。
O 現在の出力基数をスタックに積みます。
K 現在の精度をスタックに積みます。
文字列
dc は、数と同じように文字列を操作できます。 文字列に対してできる唯一のことは、それを表示し、マクロとして
実行することです。 マクロとは、dc コマンドとして実行される文字列の内容のことです。 すべてのレジスタとス
タックは文字列を保存できます。 そして、dc はいつも、与えられたデータが文字列か数字かを 知っています。 算
術操作のようないくつかのコマンドは、数を必要としており、 文字列が与えられた場合はエラーが表示されます。
他のコマンドは、数字か文字列を受け入れることができます。 例えば、 p コマンドは、両方を受け付けることがで
き、データをその型に応じて 表示します。
[characters]
(左右の釣合のとれた、 [ と ] で囲まれた ) characters という文字列を作り、それをスタックに積みま
す。 例えば、 [foo]P は文字列 foo を表示します (が、改行文字は表示しません)。
a スタック先頭の値を取り出し、それが数字なら、その低位バイトを 文字列に変換し、スタックに積みま
す。文字列なら、その最初の文字が スタックに積み戻されます。
x スタックから値を取り出し、マクロとして実行します。 普通、これは文字列です。数の場合は、単純にその
値がスタックに 積み戻されます。 例えば、 [1p]x は、マクロ 1p を実行します。 1p は、 1 をスタックに
積み、別の行に 1 を表示します。
マクロは、しばしばレジスタにも保存されます。 [1p]sa は、 1 を表示するためのマクロを レジスタ a に保存しま
す。 lax でこのマクロは実行できます。
>r スタックから 2 つの値を取り出し、それらを数と仮定して比較し、 もともとのスタックの先頭が大きい場
合、レジスタ r の内容を実行します。 したがって、 1 2>a は、レジスタ a の内容を実行しますが、 2 1>a
では実行しません。
!>r 似ていますが、もともとのスタックの先頭が 2 番目の値よりも大きくない場合 (2 番目の値以下である場
合)、マクロを起動します。
<r 似ていますが、もともとのスタックの先頭が小さい場合にマクロを実行します。
!<r 似ていますが、もともとのスタックの先頭が 2 番目の値よりも小さくない場合 (2 番目の値以上である場
合)、マクロを起動します。
=r 似ていますが、2 つの取り出された値が等しい場合にマクロが実行されます。
!=r 似ていますが、2 つの取り出された値が等しくない場合にマクロが実行されます。
? 端末から行を読み込み、実行します。 このコマンドは、ユーザからの入力を要求するためのマクロで使えま
す。
q マクロを終了し、それを呼び出したマクロからも終了します。 一番上のレベルか、一番上のレベルから直接
呼ばれたマクロから呼ばれると、 q コマンドは dc を終了します。
Q スタックから値を取り出し、それを終了すべきマクロレベル数として、 その数のマクロを終了します。 した
がって、 3Q は、3 つのレベルを終了します。 Q コマンドでは、dc を終了することはありません。
状態の問い合わせ
Z スタックから値を取り出し、その桁数 (文字列の場合は、文字数) を計算し、 その値をスタックに積みま
す。
X スタックから値を取り出し、その小数点以下の桁数を計算し、 その値をスタックに積みます。文字列の場
合、スタックには 0 が積まれます。
z 現在のスタックの深さを、スタックに積みます。 スタックの深さとは、 z コマンドが実行される前のスタッ
クのデータ数です。
その他のさまざまなこと
! 行の末尾までをシステムコマンドとして実行します (シェルエスケープ) 。 コマンド !<, !=, !> のパーズ
が優先しますので、<, =, > で開始する コマンドを起動したい場合には、! の後に空白を加える必要があり
ます。
# 行の末尾までをコメントとして取り扱います。
:r スタックから 2 つの値を取り出します。 スタックの先頭だった値で配列 r をインデックスし、スタックの
先頭から 2 番目だった値をそこに保存します。
;r スタックから値を取り出し、配列 r のインデックスとして利用します。 配列から選ばれた値は、その後でス
タックに積まれます。
バグ
バグ報告は、 bug-dc@gnu.org に電子メールでお願いします。 単語 ``dc'' を ``Subject:'' フィールドのどこかに
入れておいてください。
GNU Project 1997-03-25 DC(1)