|
|
1.1 root 1: .TH DC 1
2: .CT 1 numbers
3: .SH NAME
4: dc \- desk calculator
5: .SH SYNOPSIS
6: .B dc
7: [
8: .I file
9: ]
10: .SH DESCRIPTION
11: .I Dc
12: is an arbitrary precision desk calculator.
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: .TP
25: number
26: The value of the number is pushed on the stack.
27: A number is an unbroken string of the digits
28: .BR 0 - 9A - F .
29: It may be preceded by an underscore _ to input a
30: negative number.
31: Numbers may contain decimal points.
32: .TP
33: .L
34: + - / * % ^
35: Add
36: .LR + ,
37: subtract
38: .LR - ,
39: multiply
40: .LR * ,
41: divide
42: .LR / ,
43: remainder
44: .LR % ,
45: or exponentiate
46: .L ^
47: the top two values on the stack.
48: The two entries are popped off the stack;
49: the result is pushed on the stack in their place.
50: Any fractional part of an exponent is ignored.
51: .TP
52: .BI s x
53: .br
54: .ns
55: .TP
56: .BI S x
57: Pop the top of the stack and store into
58: a register named
59: .I x,
60: where
61: .I x
62: may be any character.
63: Under operation
64: .B S
65: register
66: .I x
67: is treated as a stack and the value is pushed on it.
68: .TP
69: .BI l x
70: .br
71: .ns
72: .TP
73: .BI L x
74: Push the value in register
75: .I x
76: onto the stack.
77: The register
78: .I x
79: is not altered.
80: All registers start with zero value.
81: Under operation
82: .B L
83: register
84: .I x
85: is treated as a stack and its top value is popped onto the main stack.
86: .TP
87: .B d
88: Duplicate the
89: top value on the stack.
90: .TP
91: .B p
92: Print the top value on the stack.
93: The top value remains unchanged.
94: .B P
95: interprets the top of the stack as an
96: .SM ASCII
97: string,
98: removes it, and prints it.
99: .TP
100: .B f
101: Print the values on the stack.
102: .TP
103: .B q
104: .br
105: .ns
106: .TP
107: .B Q
108: Exit the program.
109: If executing a string, the recursion level is
110: popped by two.
111: Under operation
112: .B Q
113: the top value on the stack is popped and the string execution level is popped
114: by that value.
115: .TP
116: .B x
117: Treat the top element of the stack as a character string
118: and execute it as a string of
119: .I dc
120: commands.
121: .TP
122: .B X
123: Replace the number on the top of the stack with its scale factor.
124: .TP
125: .B "[ ... ]"
126: Put the bracketed
127: .SM ASCII
128: string on the top of the stack.
129: .TP
130: .BI < "x " > "x " = x
131: Pop and compare the
132: top two elements of the stack.
133: Register
134: .I x
135: is executed if they obey the stated
136: relation.
137: .TP
138: .B v
139: Replace the top element on the stack by its square root.
140: Any existing fractional part of the argument is taken
141: into account, but otherwise the scale factor is ignored.
142: .TP
143: .B !
144: Interpret the rest of the line as a UNIX command.
145: .TP
146: .B c
147: Clear the stack.
148: .TP
149: .B i
150: The top value on the stack is popped and used as the
151: number base for further input.
152: .TP
153: .B I
154: Push the input base on the top of the stack.
155: .TP
156: .B o
157: The top value on the stack is popped and used as the
158: number base for further output.
159: In bases larger than 10, each `digit' prints as a group of decimal digits.
160: .TP
161: .B O
162: Push the output base on the top of the stack.
163: .TP
164: .B k
165: Pop the top of the stack, and use that value as
166: a non-negative scale factor:
167: the appropriate number of places
168: are printed on output,
169: and maintained during multiplication, division, and exponentiation.
170: The interaction of scale factor,
171: input base, and output base will be reasonable if all are changed
172: together.
173: .TP
174: .B z
175: Push the stack level is pushed onto the stack.
176: .TP
177: .B Z
178: Replace the number on the top of the stack with its length.
179: .TP
180: .B ?
181: A line of input is taken from the input source (usually the terminal)
182: and executed.
183: .TP
184: .B "; :"
185: Used by
186: .I bc
187: for array operations.
188: .PP
189: The scale factor set by
190: .B k
191: determines how many digits are kept to the right of
192: the decimal point.
193: If
194: .I s
195: is the current scale factor,
196: .I sa
197: is the scale of the first operand,
198: .I sb
199: is the scale of the second,
200: and
201: .I b
202: is the (integer) second operand,
203: results are truncated to the following scales.
204: .IP
205: .nf
206: \fL+\fR,\fL-\fR max(\fIsa,sb\fR)
207: \fL*\fR min(\fIsa\fR+\fIsb \fR, max\fR(\fIs,sa,sb\fR))
208: \fL/\fI s
209: \fL%\fR so that dividend = divisor*quotient + remainder; remainder has sign of dividend
210: \fL^\fR min(\fIsa\(mu|\fIb\fR|, max(\fIs,sa\fR))
211: \fLv\fR max(\fIs,sa\fR)
212: .fi
213: .SH EXAMPLES
214: .EX
215: [la1+dsa*pla10>y]sy
216: 0sa1
217: lyx
218: .EE
219: .ns
220: .IP
221: Print the first ten values of
222: .IR n !
223: .SH "SEE ALSO"
224: .IR bc (1),
225: .IR hoc (1)
226: .SH DIAGNOSTICS
227: .I x
228: .LR "is unimplemented" ,
229: where
230: .I x
231: is an octal number: an internal error.
232: .br
233: `Out of headers'
234: for too many numbers being kept around.
235: .br
236: `Nesting depth'
237: for too many levels of nested execution.
238: .SH BUGS
239: When the input base exceeds 16,
240: there is no notation for digits greater than
241: .BR F .
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.