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