COHERENT manpages
This page displays the COHERENT manpage for dc [Desk calculator].
List of available manpages
Index
dc -- Command
Desk calculator
dc [file]
dc is an arbitrary precision desk calculator. It simulates a stacking
calculator with ancillary registers. Input must be entered in reverse
Polish notation. dc maintains the expected number of decimal places during
addition, subtraction, and multiplication, but the user must make an
explicit request to maintain any places at all during division.
dc reads input from file if specified, and then from the standard input.
dc accepts an arbitrary number of commands per line; moreover, spaces need
not be left between them.
The scale factor of a number is the number of places to the right of its
decimal point. The scale factor register controls decimal places in
calculations. The scale factor does not affect addition or subtraction.
It affects multiplication only if the sum of the scale factors of the two
operands is greater than it. The result of every division command has as
many decimal places as it specifies. It affects exponentiation in that
multiplication is performed as many times as the integer part of the
exponent indicates; any fractional part of the exponent is ignored.
dc recognizes the following commands and constructions:
number
Stack the value of number. A number is a string of symbols taken from
the digits `0' through `9', and the capital letters `A' through `F'
(usual hexadecimal notation), with an optional decimal point. An
underscore `_' as a prefix indicates a negative number. The letters
retain values ten through 15, respectively, regardless of the base
chosen by the user.
+ - / * % ^
The arithmetic operations: addition(+), subtraction(-), division(/),
multiplication(*), remainder(%), and exponentiation(^). dc pops the
two top stack elements, performs the desired operation by calling the
multiprecision routine desired (see multiprecision arithmetic), and
stacks the result.
c Clear the stack.
d Duplicate the top of the stack (so that it occupies the top two
positions of the stack).
f Print the contents of the stack and the values of all registers.
i Remove the top of the stack and use its integer part as the assumed
input base (default, ten). The new input base must be greater than
one and less than 17.
I Stack the current assumed input base.
k Remove the top of the stack and put it in the internal scale factor
register.
K Put the value of the internal scale register (which the k command
sets) on the top of the stack.
l x Load the value of register x to the top of the stack. The value of
register x is unaltered. x may be any character.
o Remove the top of the stack and use its integer part as the assumed
output base (default, ten). The specified base may be any positive
integer.
O Stack the current assumed output base.
p Print the top of the stack. The value remains on the stack.
q Quit the program; control returns to the shell sh.
s x Remove the top of the stack and store it in register x. The previous
contents of x are overwritten. x may be any character.
v Replace the top of the stack by its square root.
x Remove the top of the stack, interpret it as a string containing a
sequence of dc commands, and execute it.
X Replace the top of the stack by its scale factor (i.e., the number of
decimal places it has).
z Place the number of occupied levels of the stack on top of the stack.
[...]
Place the bracketed character string on top of the stack. The string
may be executed subsequently with the x command.
<x >x =x !<x !>x !=x
Remove the top two elements of the stack and compare them. If there
is no `!' sign before the relation, execute register x if the two
elements obey the relation. If a `!' sign is present, execute
register x if the elements do not obey the relation.
! Interpret the rest of the line as a command to the shell sh. Control
returns to dc after command execution terminates.
Example
The following example program prints the first 20 Fibbonacci numbers. The
character l is printed in boldface to help you tell from a numeric one.
1sa1sb1sc
[lalbdsa+psblc1+dsc21<y]sy
lyx
See Also
bc,
commands
Notes
For most purposes, the in-fix notation of bc is more convenient than the
Polish notation of dc.