DC(1) General Commands Manual DC(1)
dc - desk calculator
dc [ file ]
Dc is an arbitrary precision arithmetic package. Ordinarily it oper-
ates 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 argu-
ment is given, input is taken from that file until its end, then from
the standard input. The following constructions are recognized:
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 negative number. Numbers may contain
+ - / * % ^
The top two values on the stack are added (+), subtracted (-),
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.
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 capitalized, 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 fac-
[ ... ]
puts the bracketed ascii string onto the top of the stack.
<x >x =x
The top two elements of the stack are popped and compared. Reg-
ister 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 factor 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
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, divi-
sion, and exponentiation. The interaction of scale factor, input
base, and output base will be reasonable if all are changed
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 (usually the ter-
minal) and executed.
; : are used by bc for array operations.
An example which prints the first ten values of n! is
bc(1), which is a preprocessor for dc providing infix notation and a C-
like syntax which implements functions and reasonable control struc-
tures for programs.
`x is unimplemented' where x is an octal number.
`stack empty' for not enough elements on the stack to do what was
`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.