DC(1) DC(1)
NAME
dc - desk calculator
SYNOPSIS
dc [ file ]
DESCRIPTION
Dc is an arbitrary precision arithmetic package. Ordinar-
ily it operates on decimal integers, but one may specify
an input base, output base, and a number of fractional
digits to be maintained. 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 (/), remain-
dered (%), 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.
f All values on the stack and in registers are
printed.
q exits the program. If executing a string, the
recursion level is popped by two. If q is capital-
ized, the top value on the stack is popped and the
1
DC(1) DC(1)
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
The top two elements of the stack are popped and
compared. Register x is executed 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 fac-
tor is ignored.
! interprets the rest of the line as a UNIX command.
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 main-
tained during multiplication, division, and exponen-
tiation. The interaction of scale factor, input
base, and output base will be reasonable if all are
changed together.
z The stack level is pushed onto the stack.
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 for array operations.
An example which prints the first ten values of n! is
2
DC(1) DC(1)
[la1+dsa*pla10>y]sy
0sa1
lyx
SEE ALSO
bc(1), which is a preprocessor for dc providing infix
notation and a C-like syntax which implements functions
and reasonable control structures for programs.
DIAGNOSTICS
`x is unimplemented' where x is an octal number.
`stack empty' for not enough elements on the stack to do
what was asked.
`Out of space' when the free list is exhausted (too many
digits).
`Out of headers' for too many numbers being kept around.
`Out of pushdown' for too many items on the stack.
`Nesting Depth' for too many levels of nested execution.
3