DC (I) 1/15/73 DC (I)
NAME dc -- desk calculator
SYNOPSIS dc [file]
DESCRIPTION dc is an arbitrary precision integer arithmetic
package. The overall structure of dc is a stack-
ing (reverse Polish) calculator. The following
constructions are recognized by the calculator:
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 under-
score (_) to input a negative number.
+ - * / % ^
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.
sx
The top of the stack is popped and stored into
a register named x, where x may be any charac-
ter.
lx
The value in register x is pushed on the
stack. The register x is not altered. All
registers start with zero value.
d
The top value on the stack is pushed on the
stack. Thus the top value is duplicated.
p
The top value on the stack is printed. The
top value remains unchanged.
f
All values on the stack and in registers are
printed.
q
exits the program. If executing a string, the
nesting level is popped by two.
x
treats the top element of the stack as a char-
acter string and executes it as a string of dc
commands.
[...]
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. Register x is executed if they
obey the stated relation.
v
replaces the top element on the stack by its
square root.
!
interprets the rest of the line as a UNIX 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.
o
the top value on the stack is popped and used
as the number radix for further output.
z
the stack level is pushed onto the stack.
?
a line of input is taken from the input source
(usually the console) and executed.
new-line
ignored except as the name of a register or to
end the response to a ?.
space
ignored except as the name of a register or to
terminate a number.
If a file name is given, input is taken from that
file until end-of-file, then input is taken from
the console.
An example to calculate the monthly, weekly and
hourly rates for a $10,000/year salary.
10000
100* (now in cents)
dsa (non-destructive store)
12/ (pennies per month)
la52/ (pennies per week)
d10* (deci-pennies per week)
375/ (pennies per hour)
f (print all results)
512
19230
83333
"a" 1000000
An example which prints the first ten values of n! is
[la1+dsa*pla10>x]sx
0sa1
lxx
FILES --
SEE ALSO msh(VII), salloc(III)
DIAGNOSTICS (x) ? for unrecognized character x.
(x) ? for not enough elements on the stack to do
what was asked by command x.
"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 ex-
ecution.
BUGS --