DC
Section: User Commands (1)
Updated: 2025-01-05
Index
JM Home Page
roff page
名称
dc - 任意精度の計算機
書式
dc [-V] [--version] [-h] [--help]
[-e scriptexpression] [--expression=scriptexpression]
[-f scriptfile] [--file=scriptfile]
[file ...]
説明
dc は、逆ポーランド形式の無限精度の計算が行える卓上計算機です。
この電卓は、定義やマクロ呼び出しも行えます。
普通、dc は標準入力から読み込みます。
コマンドライン引数が与えられた時は、それはファイル名となり、
dc はそのファイルを読み込み、ファイルの内容を実行した後で、
標準入力から入力を取ります。
通常の出力はすべて標準出力へ、エラー出力はすべて標準エラー出力へ
送られます。
逆ポーランド記法計算機は、数字をスタックに保存します。
数字を入力すると、それをスタックに積み上げます。
計算操作は、引数をスタックから取り出し、結果をスタックに積み上げます。
数字を
dc
に入力するためには、
0
から
9
と
A
から
F
までの、0 から 15 を表す値を使い
(現在の RADIX に関係なく)、さらにオプションで単一の基数を含められます。
指数表現はサポートされていません。
負の数字を入力するためには、``_'' で始まる数字を入力します。
``-'' は減算の二項演算子として使われているので、
このために利用することはできません。
引き続いて 2 つの数字を入力するためには、あいだに空白文字か改行文字を
入力します。
これらは、コマンドとしての意味はありません。
オプション
dc は、次のコマンドラインオプション付きで起動可能です:
- -V
-
- --version
-
実行される dc のバージョンと著作権情報を表示し、終了します。
- -h
-
- --help
-
これらのコマンドラインオプションを短くまとめたメッセージと
バグ報告アドレスを表示し、終了します。
- -e script
-
- --expression=script
-
script
中のコマンドを、入力処理中に実行するコマンド集合に追加します。
- -f script-file
-
- --file=script-file
-
ファイル
script-file
中のコマンドを、入力処理中に実行するコマンド集合に追加します。
- --max-recursion=depth
-
再帰する場合の、最も
深い
値を指定します。(主にデバッグ用に便利です。)
上記オプションの処理後にコマンドラインパラメータが残った場合、
これらのコマンドラインパラメータは処理対象の入力ファイル名として
解釈されます。
ファイル名
-
は、標準入力ストリームを指します。
スクリプトファイル名または式を指定しないと、標準入力が処理されます。
表示コマンド
- p
-
スタックを変更することなく、スタックの先頭の値を表示します。
改行文字が、値の後に表示されます。
- n
-
スタックの先頭の値を表示し、スタックから取り出します。
改行文字は、後に表示されません。
- P
-
スタックの先頭の値をスタックから取り出します。
値が文字列の場合、末尾の改行を付けずに、単に表示します。
そうでない場合、これは数値であり、数値の絶対値の整数部分が、
"基数 (UCHAR_MAX+1)" のバイトストリームとして表示されます。
ここで (UCHAR_MAX+1) は 256 を仮定すると
(ほとんどのマシンでは 8 ビットバイトなので)、文字列
KSK0k1/_1Ss [ls*]Sxd0>x
[256~Ssd0<x]dsxxsx[q]Sq[Lsd0>qaPlxx]
dsxxsx0sqLqsxLxLK+k
もまたこの機能を実現します。
(上記のネイティブDCコードの複雑さの多くは、~ が文字を逆方向に
計算することと、すべてのレジスタが元の状態に戻ることを保証
したいという願望によるものです。)
- 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 番目の値の順番を入れ換え(交換)ます。
(これは、シーケンスSaSbLaLbを使用しても実現できます。)
- R
-
スタックの先頭を整数値
n
として取り出します。
更新されたスタック上で先頭から
n
個を繰り返しローテートします。
もし
n
が正の数ならば、回転方向によって、最上位の要素は上から2番目の要素になります。
もし
n
が負の数ならば、回転によって、最上位の要素は上から
n
番目の要素になります。
もし、スタックの深さが
n
より小さければ、エラーなしにスタック全部が回転され(適切な方向で)ます。
レジスタ
dc は、少なくとも 256 個のメモリレジスタを持っています。
各レジスタは、1 文字の名前を持っています。
数字や文字列をレジスタに保存し、後で取り出すことができます。
- sr
-
スタックの先頭から値を取り出し、レジスタ
r
に保存します。
- lr
-
レジスタ
r
の値を複製し、それをスタックに積みます。
レジスタが初期化されていない場合は値 0 が得られます。
これは、
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
-
スタック先頭の値を取り出し、それが数字なら、その低位バイトを
文字列に変換し、スタックに積みます。文字列なら、その最初の文字が
スタックに積み戻されます。
- 注意: このコマンドは非推奨です;
-
詳細については
dc. info
を参照してください。
もし
a
コマンドを使い、それが GNU bc の一部として残っているのであれば、
保存を求めるバグレポートを提出してください。
- 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:x 0Sx 2 0:x Lx 0;xp は
1を出力します。これは、2が配列x のインスタンスの
インデックス 0 に格納され、後でポップされ、インデックス 0 に 1 を
保持している x のインスタンスを再表示するためです。
環境変数
- DC_LINE_LENGTH
-
数値の出力を分割する列を指定します。デフォルト値は70です。
「0」に設定すると、行分割は無効になり、各出力行は数値を表すのに
必要な長さになります。
- DC_PROMPT
-
標準入力上で対話的な入力を、dc が使用する場合の、
プロンプトを設定します。
バグ
バグ報告は、
bug-dc@gnu.org
に電子メールでお願いします。
参照
より詳細なドキュメントは、(ローカルなインストール状況に依存しますが)
``info dc'' で起動することで表示される dc.info 中にあります。
Index
- 名称
-
- 書式
-
- 説明
-
- オプション
-
- 表示コマンド
-
- 計算
-
- スタックの制御
-
- レジスタ
-
- パラメータ
-
- 文字列
-
- 状態の問い合わせ
-
- その他のさまざまなこと
-
- 環境変数
-
- バグ
-
- 参照
-
This document was created by
man2html,
using the manual pages.