dc(1) USER COMMANDS dc(1)
NAME
dc - desk calculator
SYNOPSIS
dc [ file ]
DESCRIPTION
dc is an arbitrary precision arithmetic package. Ordinarily
it operates on decimal integers, but one may specify an
input base, output base, and a number of fractional digits
to be maintained. [bc is a preprocessor for dc that pro-
vides infix notation and a C-like syntax that implements
functions. bc also provides reasonable control structures
for programs. See bc(1).] The overall structure of dc is a
stacking (reverse Polish) calculator. If an argument is
given, input is taken from that file until its end, then
from the standard input. The following constructions are
recognized:
number
The value of the number is pushed on the stack. A
number is an unbroken string of the digits 0-9. It
may be preceded by an underscore (_) to input a nega-
tive number. Numbers may contain decimal points.
+ - / * % ^
The top two values on the stack are added (+), sub-
tracted (-), multiplied (*), divided (/), remaindered
(%), or exponentiated (^). The two entries are popped
off the stack; the result is pushed on the stack in
their place. Any fractional part of an exponent is
ignored.
sx The top of the stack is popped and stored into a
register named x, where x may be any character. If
the s is capitalized, x is treated as a stack and the
value is pushed on it.
lx The value in register x is pushed on the stack. The
register x is not altered. All registers start with
zero value. If the l is capitalized, register x is
treated as a stack and its top value is popped onto
the main stack.
d The top value on the stack is duplicated.
p The top value on the stack is printed. The top value
remains unchanged.
P Interprets the top of the stack as an ASCII string,
removes it, and prints it.
1
dc(1) USER COMMANDS dc(1)
f All values on the stack are printed.
q Exits the program. If executing a string, the recur-
sion level is popped by two.
Q Exits the program. The top value on the stack is
popped and the string execution level is popped 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.
[ ... ]
Puts the bracketed ASCII string onto the top of the
stack.
<x >x =x
The top two elements of the stack are popped and com-
pared. Register x is evaluated if they obey 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 UNIX system com-
mand.
c All values on the stack are popped.
i The top value on the stack is popped and used as the
number radix for further input. I Pushes the input
base on the top of the stack.
o The top value on the stack is popped and used as the
number radix for further output.
O Pushes the output base on the top of the stack.
k The top of the stack is popped, and that value is used
as a non-negative scale factor: the appropriate
number of places are printed on output, and maintained
during multiplication, division, and exponentiation.
The interaction of scale factor, input base, and out-
put base will be reasonable if all are changed
together.
z The stack level is pushed onto the stack.
2
dc(1) USER COMMANDS dc(1)
Z Replaces the number on the top of the stack with its
length.
? A line of input is taken from the input source (usu-
ally the terminal) and executed.
; : are used by bc(1) for array operations.
EXAMPLE
This example prints the first ten values of n!:
[la1+dsa*pla10>y]sy
0sa1
lyx
SEE ALSO
bc(1).
DIAGNOSTICS
x is unimplemented: x is an octal number.
stack empty: not enough elements on the stack to do what
was asked.
Out of space: the free list is exhausted (too many digits).
Out of headers: too many numbers being kept around.
Out of pushdown: too many items on the stack.
Nesting Depth: too many levels of nested execution.
3