Commit | Line | Data |
---|---|---|
0044bfef | 1 | .\" @(#)dc.1 6.1 (Berkeley) %G% |
3eb17eeb | 2 | .\" |
0044bfef | 3 | .TH DC 1 "" |
3eb17eeb KM |
4 | .AT 3 |
5 | .SH NAME | |
6 | dc \- desk calculator | |
7 | .SH SYNOPSIS | |
8 | .B dc | |
9 | [ file ] | |
10 | .SH DESCRIPTION | |
11 | .I Dc | |
12 | is an arbitrary precision arithmetic package. | |
13 | Ordinarily it operates on decimal integers, | |
14 | but one may specify an input base, output base, | |
15 | and a number of fractional digits to be maintained. | |
16 | The overall structure of | |
17 | .I dc | |
18 | is | |
19 | a stacking (reverse Polish) calculator. | |
20 | If an argument is given, | |
21 | input is taken from that file until its end, | |
22 | then from the standard input. | |
23 | The following constructions are recognized: | |
24 | .HP 6 | |
25 | number | |
26 | .br | |
27 | The value of the number is pushed on the stack. | |
28 | A number is an unbroken string of the digits 0-9. | |
29 | It may be preceded by an underscore _ to input a | |
30 | negative number. | |
31 | Numbers may contain decimal points. | |
32 | .HP 6 | |
33 | + \- / * % ^ | |
34 | .br | |
35 | The | |
36 | top two values on the stack are added | |
37 | (+), | |
38 | subtracted | |
39 | (\-), | |
40 | multiplied (*), | |
41 | divided (/), | |
42 | remaindered (%), | |
43 | or exponentiated (^). | |
44 | The two entries are popped off the stack; | |
45 | the result is pushed on the stack in their place. | |
46 | Any fractional part of an exponent is ignored. | |
47 | .TP | |
48 | .BI s x | |
49 | The | |
50 | top of the stack is popped and stored into | |
51 | a register named | |
52 | .I x, | |
53 | where | |
54 | .I x | |
55 | may be any character. | |
56 | If | |
57 | the | |
58 | .B s | |
59 | is capitalized, | |
60 | .I x | |
61 | is treated as a stack and the value is pushed on it. | |
62 | .TP | |
63 | .BI l x | |
64 | The | |
65 | value in register | |
66 | .I x | |
67 | is pushed on the stack. | |
68 | The register | |
69 | .I x | |
70 | is not altered. | |
71 | All registers start with zero value. | |
72 | If the | |
73 | .B l | |
74 | is capitalized, | |
75 | register | |
76 | .I x | |
77 | is treated as a stack and its top value is popped onto the main stack. | |
78 | .TP | |
79 | .B d | |
80 | The | |
81 | top value on the stack is duplicated. | |
82 | .TP | |
83 | .B p | |
84 | The top value on the stack is printed. | |
85 | The top value remains unchanged. | |
86 | .B P | |
87 | interprets the top of the stack as an ascii string, | |
88 | removes it, and prints it. | |
89 | .TP | |
90 | .B f | |
91 | All values on the stack and in registers are printed. | |
92 | .TP | |
93 | .B q | |
94 | exits the program. | |
95 | If executing a string, the recursion level is | |
96 | popped by two. | |
97 | If | |
98 | .B q | |
99 | is capitalized, | |
100 | the top value on the stack is popped and the string execution level is popped | |
101 | by that value. | |
102 | .TP | |
103 | .B x | |
104 | treats the top element of the stack as a character string | |
105 | and executes it as a string of dc commands. | |
106 | .TP | |
107 | .B X | |
108 | replaces the number on the top of the stack with its scale factor. | |
109 | .TP | |
110 | .B "[ ... ]" | |
111 | puts the bracketed ascii string onto the top of the stack. | |
112 | .HP 6 | |
113 | .I "<x >x =x" | |
114 | .br | |
115 | The | |
116 | top two elements of the stack are popped and compared. | |
117 | Register | |
118 | .I x | |
119 | is executed if they obey the stated | |
120 | relation. | |
121 | .TP | |
122 | .B v | |
123 | replaces the top element on the stack by its square root. | |
124 | Any existing fractional part of the argument is taken | |
125 | into account, but otherwise the scale factor is ignored. | |
126 | .TP | |
127 | .B ! | |
128 | interprets the rest of the line as a UNIX command. | |
129 | .TP | |
130 | .B c | |
131 | All values on the stack are popped. | |
132 | .TP | |
133 | .B i | |
134 | The top value on the stack is popped and used as the | |
135 | number radix for further input. | |
136 | .B I | |
137 | pushes the input base on the top of the stack. | |
138 | .TP | |
139 | .B o | |
140 | The top value on the stack is popped and used as the | |
141 | number radix for further output. | |
142 | .TP | |
143 | .SM | |
144 | .B O | |
145 | pushes the output base on the top of the stack. | |
146 | .TP | |
147 | .B k | |
148 | the top of the stack is popped, and that value is used as | |
149 | a non-negative scale factor: | |
150 | the appropriate number of places | |
151 | are printed on output, | |
152 | and maintained during multiplication, division, and exponentiation. | |
153 | The interaction of scale factor, | |
154 | input base, and output base will be reasonable if all are changed | |
155 | together. | |
156 | .TP | |
157 | .B z | |
158 | The stack level is pushed onto the stack. | |
159 | .TP | |
160 | .SM | |
161 | .B Z | |
162 | replaces the number on the top of the stack with its length. | |
163 | .TP | |
164 | .B ? | |
165 | A line of input is taken from the input source (usually the terminal) | |
166 | and executed. | |
167 | .TP | |
168 | .B "; :" | |
169 | are used by | |
170 | .I bc | |
171 | for array operations. | |
172 | .PP | |
173 | An example which prints the first ten values of n! is | |
174 | .nf | |
175 | .PP | |
176 | .in +3 | |
177 | [la1+dsa*pla10>y]sy | |
178 | .br | |
179 | 0sa1 | |
180 | .br | |
181 | lyx | |
182 | .fi | |
183 | .SH "SEE ALSO" | |
184 | bc(1), | |
185 | which is a preprocessor for | |
186 | .I dc | |
187 | providing infix notation and a C-like syntax | |
188 | which implements functions and reasonable control | |
189 | structures for programs. | |
190 | .SH DIAGNOSTICS | |
191 | `x is unimplemented' where x is an octal number. | |
192 | .br | |
193 | `stack empty' for not enough elements on the stack to do what was asked. | |
194 | .br | |
195 | `Out of space' when the free list is exhausted (too many digits). | |
196 | .br | |
197 | `Out of headers' for too many numbers being kept around. | |
198 | .br | |
199 | `Out of pushdown' for too many items on the stack. | |
200 | .br | |
201 | `Nesting Depth' for too many levels of nested execution. |