dc
PURPOSE
Provides an interactive desk calculator for doing
arbitrary-precision integer arithmetic.
SYNOPSIS
dc [ file ]
DESCRIPTION
The dc command is an arbitrary precision arithmetic cal-
culator. dc takes its input from file or standard input
until it reads an end-of-file character. It writes to
standard output. It operates on decimal integers, but
you may specify an input base, output base, and a number
of fractional digits to be maintained. dc is structured
overall as a stacking, reverse Polish, calculator.
The bc command (see page 112) is a preprocessor for dc.
It provides infix notation and a syntax similar to the C
language which implements functions and reasonable
control structures for programs.
SUBCOMMANDS
number Pushes the specified value onto the stack.
A number is an unbroken string of the
digits 0-9. To specify a negative number,
precede it with _ (underscore). A number
may contain a decimal point.
+ - / * % ^ Adds (+), subtracts (-), multiplies ("*"),
divides (/), remainders ("%"), or
exponentiates (^) the top two values on
the stack. dc pops the top two entries
off the stack and pushes the result on the
stack in their place. dc ignores frac-
tional parts of an exponent.
sx Pops the top of the stack and stores it in
a register named x, where x may be any
character.
Sx Treats x as a stack. It pops the top of
the main stack and pushes that value onto
stack x.
lx Pushes the value in register x on the
stack. The register x is not changed.
All registers start with zero value.
Lx Treats x as a stack and pops its top value
onto the main stack.
d Duplicates the top value on the stack.
p Displays the top value on the stack. The
top value remains unchanged. The p inter-
prets the top of the stack as an ASCII
string, removes it, and displays it.
P Interprets the top of the stack as a
string, removes it, and displays it.
f Displays all values on the stack.
q Exits the program. If dc is executing a
string, it pops the recursion level by
two.
Q Pops the top value on the stack and the
string execution level by that value.
x Treats the top element of the stack as a
character string and executes it as a
string of dc commands.
X Replaces the number on the top of the
stack with its scale factor.
[string] Puts the bracketed string onto the top of
the stack.
<x
>x
=x Pops the top two elements of the stack and
compares them. Evaluates register x as if
it obeys the stated relation.
v Replaces the top element on the stack by
its square root. Any existing fractional
part of the argument is taken into
account, but otherwise the scale factor is
ignored.
! Interprets the rest of the line as a AIX
command.
c Cleans the stack: dc pops all values on
the stack.
i Pops the top value on the stack and uses
that value as the number radix for further
input.
I Pushes the input base on the top of the
stack.
o Pops the top value on the stack and uses
that value as the number radix for further
output.
O Pushes the output base on the top of the
stack.
k Pops the top of the stack, and uses that
value as a nonnegative scale factor. The
appropriate number of places displays on
output and is maintained during multipli-
cation, division, and exponentiation. The
interaction of scale factor, input base,
and output base is reasonable if all are
changed together.
z Pushes the number of elements in the stack
onto the stack.
Z Replaces the top number in the stack with
the number of digits in that number.
? Gets and runs a line of input.
;: bc uses these characters for array oper-
ations.
EXAMPLES
1. To use dc as a calculator:
You:
1 4 / p
System:
0
You:
1 k [ Keep 1 decimal place ]s.
1 4 / p
System:
0.2
You:
3 k [ Keep 3 decimal places ]s.
1 4 / p
System:
0.250
You:
16 63 5 / + p
System:
28.600
You:
16 63 5 + / p
System:
0.235
You may type the comments (enclosed in "[ ]"s"."),
but they are provided only for your information.
When you enter dc expressions directly from the key-
board, press Ctrl-D to end the bc session and return
to the shell command line.
2. To load and run a dc program file:
You:
dc prog.dc
5 lf x p [ 5 factorial ]s.
System:
120
You:
10 lf x p [ 10 factorial ]s.
System:
3628800
This interprets the dc program saved in "prog.dc",
then reads from the work station keyboard.
The "lf x" evaluates the function stored in register
"f", which could be defined in the program file
"prog.c" as:
[ f: compute the factorial of n ]s.
[ (n = the top of the stack) ]s.
[ If 1>n do b; If 1<n do r ]s.
[d 1 >b d 1 <r] sf
[ Return f(n) = 1 ]s.
[d - 1 +] sb
[ Return f(n) = n * f(n-1) ]s.
[d 1 - lf x *] sr
You can create dc program files with a text editor,
or with the -c (compile) flag of the bc command.
When you enter dc expressions directly from the key-
board, press Ctrl-D to end the bc session and return
to the shell command line.
RELATED INFORMATION
The following command: "bc."
"Overview of International Character Support" in Managing
the AIX Operating System.