スポンサーリンク

DC

名称
書式
解説
オプション
表示コマンド
計算
スタックの制御
レジスタ
パラメータ
文字列
状態の問い合わせ
その他のさまざまなこと
バグ

名称

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 のインデックスとして利用し ます。配列から選ばれた値は、その後でスタックに積まれます。

レ ジスタに積まれた各インスタンスは、それぞれが自身に関連づけられた配列 を持つことに注意してください。このため、1 0:a 0Sa 2 0:a La 0;ap は 1 を 表 示します。 2 は、後でスタックから取り出された方の 0:a のインスタンス に保存されたからです。

バグ

バグ報告は、 bug-dc@gnu.org に電子メールでお願いします。単語 ‘‘dc’’ を ‘‘Subject:’’ フィールドのどこかに入れておいてください。

スポンサーリンク