DC(1) User Commands DC(1)

## NAME

dc - desk calculator

## SYNOPSIS

**/usr/bin/dc **[__filename__]

**/usr/xpg6/bin/dc **[__filename__]

## 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. 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.

**bc **is a preprocessor for **dc **that provides infix notation and a C-like

syntax that implements functions.**bc **also provides reasonable control

structures for programs. See bc(1).

## USAGE

**/usr/bin/dc, /usr/xpg6/bin/dc**

The following constructions are recognized under both**/usr/bin/dc **and

**/usr/xpg6/bin/dc**:

__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 negative number.

Numbers may contain decimal points.

**s**__x__

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.

**l**__x__

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 are printed.

**q**

Exits the program. If executing a string, the recursion

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 compared.

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 shell 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 maintained during

multiplication, division, and exponentiation. The

interaction of scale factor, input base, and output base

will be reasonable if all are changed together.

**K**

Pushes the current scale factor on the top of the stack.

**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 terminal) and executed.

**Y**

Displays**dc **debugging information.

**; :**

Used by bc(1) for array operations.

**/usr/bin/dc**

The following construction is recognized under**/usr/bin/dc**, using the

scale of whatever the result is.

**+ - / * % ^**

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.

**/usr/xpg6/bin/dc**

The following construction is recognized under**/usr/xpg6/bin/dc**. The

results of division are forced to be a scale of 20.

**+ - / * % ^**

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.

Ensures that the scale set prior to division is the

scale of the result.

## EXAMPLES

#### Example 1: Printing the first ten values of n!

This example prints the first ten values of n!:

[la1+dsa*pla10>y]sy

0sa1

lyx

## SEE ALSO

bc(1), attributes(5)

## DIAGNOSTICS

__x__ **is unimplemented**

__x__ is an octal number.

**out of space**

The free list is exhausted (too many

digits).

**out of stack space**

Too many pushes onto the stack (stack

overflow).

**empty stack**

Too many pops from the stack (stack

underflow).

**nesting depth**

Too many levels of nested execution.

**divide by 0**

Division by zero.

**sqrt of neg number**

Square root of a negative number is not

defined (no imaginary numbers).

**exp not an integer**

**dc **only processes integer exponentiation.

**exp too big**

The largest exponent allowed is 999.

**input base is too large**

The input base x: 2<= x <= 16.

**input base is too small**

The input base x: 2<= x <= 16.

**output base is too large**

The output base must be no larger than

**BC_BASE_MAX**.

**invalid scale factor**

Scale factor cannot be less than 1.

**scale factor is too large**

A scale factor cannot be larger than

**BC_SCALE_MAX**.

**symbol table overflow**

Too many variables have been specified.

**invalid index**

Index cannot be less than 1.

**index is too large**

An index cannot be larger than**BC_DIM_MAX**.

August 29, 2003 DC(1)

dc - desk calculator

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

input is taken from that file until its end, then from the standard

input.

syntax that implements functions.

structures for programs. See bc(1).

The following constructions are recognized under both

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 (

Numbers may contain decimal points.

The top of the stack is popped and stored into a register

named

capitalized,

pushed on it.

The value in register

register

value. If the

a stack and its top value is popped onto the main stack.

The top value on the stack is duplicated.

The top value on the stack is printed. The top value

remains unchanged.

Interprets the top of the stack as an ASCII string,

removes it, and prints it.

All values on the stack are printed.

Exits the program. If executing a string, the recursion

level is popped by two.

Exits the program. The top value on the stack is popped

and the string execution level is popped by that value.

Treats the top element of the stack as a character string

and executes it as a string of

Replaces the number on the top of the stack with its scale

factor.

Puts the bracketed ASCII string onto the top of the stack.

The top two elements of the stack are popped and compared.

Register

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 shell command.

All values on the stack are popped.

The top value on the stack is popped and used as the

number radix for further input.

Pushes the input base on the top of the stack.

The top value on the stack is popped and used as the

number radix for further output.

Pushes the output base on the top of the stack.

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 output base

will be reasonable if all are changed together.

Pushes the current scale factor on the top of the stack.

The stack level is pushed onto the stack.

Replaces the number on the top of the stack with its

length.

A line of input is taken from the input source (usually

the terminal) and executed.

Displays

Used by bc(1) for array operations.

The following construction is recognized under

scale of whatever the result is.

The top two values on the stack are added (

subtracted (

remaindered (

are popped off the stack; the result is pushed on the

stack in their place. Any fractional part of an

exponent is ignored.

The following construction is recognized under

results of division are forced to be a scale of 20.

The top two values on the stack are added (

subtracted (

remaindered (

are popped off the stack. The result is pushed on the

stack in their place. Any fractional part of an

exponent is ignored.

Ensures that the scale set prior to division is the

scale of the result.

This example prints the first ten values of n!:

[la1+dsa*pla10>y]sy

0sa1

lyx

bc(1), attributes(5)

The free list is exhausted (too many

digits).

Too many pushes onto the stack (stack

overflow).

Too many pops from the stack (stack

underflow).

Too many levels of nested execution.

Division by zero.

Square root of a negative number is not

defined (no imaginary numbers).

The largest exponent allowed is 999.

The input base x: 2<= x <= 16.

The input base x: 2<= x <= 16.

The output base must be no larger than

Scale factor cannot be less than 1.

A scale factor cannot be larger than

Too many variables have been specified.

Index cannot be less than 1.

An index cannot be larger than

August 29, 2003 DC(1)