Blame


1 058b0118 2005-01-03 devnull .TH BC 1
2 058b0118 2005-01-03 devnull .SH NAME
3 058b0118 2005-01-03 devnull bc \- arbitrary-precision arithmetic language
4 058b0118 2005-01-03 devnull .SH SYNOPSIS
5 058b0118 2005-01-03 devnull .B bc
6 058b0118 2005-01-03 devnull [
7 058b0118 2005-01-03 devnull .B -c
8 058b0118 2005-01-03 devnull ]
9 058b0118 2005-01-03 devnull [
10 058b0118 2005-01-03 devnull .B -l
11 058b0118 2005-01-03 devnull ]
12 058b0118 2005-01-03 devnull [
13 058b0118 2005-01-03 devnull .B -s
14 058b0118 2005-01-03 devnull ]
15 058b0118 2005-01-03 devnull [
16 058b0118 2005-01-03 devnull .I file ...
17 058b0118 2005-01-03 devnull ]
18 058b0118 2005-01-03 devnull .SH DESCRIPTION
19 058b0118 2005-01-03 devnull .I Bc
20 058b0118 2005-01-03 devnull is an interactive processor for a language that resembles
21 058b0118 2005-01-03 devnull C but provides arithmetic on numbers of arbitrary length with up
22 058b0118 2005-01-03 devnull to 100 digits right of the decimal point.
23 058b0118 2005-01-03 devnull It takes input from any files given, then reads
24 058b0118 2005-01-03 devnull the standard input.
25 058b0118 2005-01-03 devnull The
26 058b0118 2005-01-03 devnull .B -l
27 058b0118 2005-01-03 devnull argument stands for the name
28 058b0118 2005-01-03 devnull of an arbitrary precision math library.
29 058b0118 2005-01-03 devnull The
30 058b0118 2005-01-03 devnull .B -s
31 058b0118 2005-01-03 devnull argument suppresses the automatic display
32 058b0118 2005-01-03 devnull of calculation results; all output is via the
33 058b0118 2005-01-03 devnull .B print
34 058b0118 2005-01-03 devnull command.
35 058b0118 2005-01-03 devnull .PP
36 058b0118 2005-01-03 devnull The following syntax for
37 058b0118 2005-01-03 devnull .I bc
38 058b0118 2005-01-03 devnull programs is like that of C;
39 058b0118 2005-01-03 devnull .I L
40 058b0118 2005-01-03 devnull means letter
41 058b0118 2005-01-03 devnull .BR a - z ,
42 058b0118 2005-01-03 devnull .I E
43 058b0118 2005-01-03 devnull means expression,
44 058b0118 2005-01-03 devnull .I S
45 058b0118 2005-01-03 devnull means statement.
46 058b0118 2005-01-03 devnull .TF length(E)
47 058b0118 2005-01-03 devnull .TP
48 058b0118 2005-01-03 devnull Lexical
49 058b0118 2005-01-03 devnull .RS
50 058b0118 2005-01-03 devnull .HP
51 058b0118 2005-01-03 devnull comments are enclosed in
52 058b0118 2005-01-03 devnull .B /* */
53 058b0118 2005-01-03 devnull .HP
54 058b0118 2005-01-03 devnull newlines end statements
55 058b0118 2005-01-03 devnull .RE
56 058b0118 2005-01-03 devnull .TP
57 058b0118 2005-01-03 devnull Names
58 058b0118 2005-01-03 devnull .IP
59 058b0118 2005-01-03 devnull simple variables:
60 058b0118 2005-01-03 devnull .I L
61 058b0118 2005-01-03 devnull .br
62 058b0118 2005-01-03 devnull array elements:
63 058b0118 2005-01-03 devnull .IB L [ E ]
64 058b0118 2005-01-03 devnull .br
65 058b0118 2005-01-03 devnull The words
66 058b0118 2005-01-03 devnull .BR ibase ,
67 058b0118 2005-01-03 devnull .BR obase ,
68 058b0118 2005-01-03 devnull and
69 058b0118 2005-01-03 devnull .B scale
70 058b0118 2005-01-03 devnull .TP
71 058b0118 2005-01-03 devnull Other operands
72 058b0118 2005-01-03 devnull .IP
73 058b0118 2005-01-03 devnull arbitrarily long numbers with optional sign and decimal point.
74 058b0118 2005-01-03 devnull .RS
75 058b0118 2005-01-03 devnull .TP
76 058b0118 2005-01-03 devnull .BI ( E )
77 058b0118 2005-01-03 devnull .TP
78 058b0118 2005-01-03 devnull .BI sqrt( E )
79 058b0118 2005-01-03 devnull .TP
80 058b0118 2005-01-03 devnull .BI length( E )
81 058b0118 2005-01-03 devnull number of significant decimal digits
82 058b0118 2005-01-03 devnull .TP
83 058b0118 2005-01-03 devnull .BI scale( E )
84 058b0118 2005-01-03 devnull number of digits right of decimal point
85 058b0118 2005-01-03 devnull .TP
86 058b0118 2005-01-03 devnull .IB L ( E , ... ,\fIE\fP)
87 058b0118 2005-01-03 devnull function call
88 058b0118 2005-01-03 devnull .RE
89 058b0118 2005-01-03 devnull .TP
90 058b0118 2005-01-03 devnull Operators
91 058b0118 2005-01-03 devnull .RS
92 058b0118 2005-01-03 devnull .HP
93 058b0118 2005-01-03 devnull .B "+ - * / % ^\ "
94 058b0118 2005-01-03 devnull .RB ( %
95 058b0118 2005-01-03 devnull is remainder;
96 058b0118 2005-01-03 devnull .B ^
97 058b0118 2005-01-03 devnull is power)
98 058b0118 2005-01-03 devnull .HP
99 058b0118 2005-01-03 devnull .B "++ --\ "
100 058b0118 2005-01-03 devnull .TP
101 058b0118 2005-01-03 devnull .B "== <= >= != < >"
102 058b0118 2005-01-03 devnull .TP
103 058b0118 2005-01-03 devnull .B "= += -= *= /= %= ^="
104 058b0118 2005-01-03 devnull .RE
105 058b0118 2005-01-03 devnull .TP
106 058b0118 2005-01-03 devnull Statements
107 058b0118 2005-01-03 devnull .RS
108 058b0118 2005-01-03 devnull .br
109 058b0118 2005-01-03 devnull .I E
110 058b0118 2005-01-03 devnull .br
111 058b0118 2005-01-03 devnull .B {
112 058b0118 2005-01-03 devnull .I S
113 058b0118 2005-01-03 devnull .B ;
114 058b0118 2005-01-03 devnull \&...
115 058b0118 2005-01-03 devnull .B ;
116 058b0118 2005-01-03 devnull .I S
117 058b0118 2005-01-03 devnull .B }
118 058b0118 2005-01-03 devnull .br
119 058b0118 2005-01-03 devnull .B "print"
120 058b0118 2005-01-03 devnull .I E
121 058b0118 2005-01-03 devnull .br
122 058b0118 2005-01-03 devnull .B "if ("
123 058b0118 2005-01-03 devnull .I E
124 058b0118 2005-01-03 devnull .B )
125 058b0118 2005-01-03 devnull .I S
126 058b0118 2005-01-03 devnull .br
127 058b0118 2005-01-03 devnull .B "while ("
128 058b0118 2005-01-03 devnull .I E
129 058b0118 2005-01-03 devnull .B )
130 058b0118 2005-01-03 devnull .I S
131 058b0118 2005-01-03 devnull .br
132 058b0118 2005-01-03 devnull .B "for ("
133 058b0118 2005-01-03 devnull .I E
134 058b0118 2005-01-03 devnull .B ;
135 058b0118 2005-01-03 devnull .I E
136 058b0118 2005-01-03 devnull .B ;
137 058b0118 2005-01-03 devnull .I E
138 058b0118 2005-01-03 devnull .B ")"
139 058b0118 2005-01-03 devnull .I S
140 058b0118 2005-01-03 devnull .br
141 058b0118 2005-01-03 devnull null statement
142 058b0118 2005-01-03 devnull .br
143 058b0118 2005-01-03 devnull .B break
144 058b0118 2005-01-03 devnull .br
145 058b0118 2005-01-03 devnull .B quit
146 058b0118 2005-01-03 devnull .br
147 058b0118 2005-01-03 devnull \fL"\fRtext\fL"\fR
148 058b0118 2005-01-03 devnull .RE
149 058b0118 2005-01-03 devnull .TP
150 058b0118 2005-01-03 devnull Function definitions
151 058b0118 2005-01-03 devnull .RS
152 058b0118 2005-01-03 devnull .br
153 058b0118 2005-01-03 devnull .B define
154 058b0118 2005-01-03 devnull .I L
155 058b0118 2005-01-03 devnull .B (
156 058b0118 2005-01-03 devnull .I L
157 058b0118 2005-01-03 devnull .B ,
158 058b0118 2005-01-03 devnull \&...
159 058b0118 2005-01-03 devnull .B ,
160 058b0118 2005-01-03 devnull .I L
161 058b0118 2005-01-03 devnull .B ){
162 058b0118 2005-01-03 devnull .PD0
163 058b0118 2005-01-03 devnull .br
164 058b0118 2005-01-03 devnull .B auto
165 058b0118 2005-01-03 devnull .I L
166 058b0118 2005-01-03 devnull .B ,
167 058b0118 2005-01-03 devnull \&...
168 058b0118 2005-01-03 devnull .B ,
169 058b0118 2005-01-03 devnull .I L
170 058b0118 2005-01-03 devnull .br
171 058b0118 2005-01-03 devnull .I S
172 058b0118 2005-01-03 devnull .B ;
173 058b0118 2005-01-03 devnull \&...
174 058b0118 2005-01-03 devnull .B ;
175 058b0118 2005-01-03 devnull .I S
176 058b0118 2005-01-03 devnull .br
177 058b0118 2005-01-03 devnull .B return
178 058b0118 2005-01-03 devnull .I E
179 058b0118 2005-01-03 devnull .LP
180 058b0118 2005-01-03 devnull .B }
181 058b0118 2005-01-03 devnull .RE
182 058b0118 2005-01-03 devnull .TP
183 058b0118 2005-01-03 devnull Functions in
184 058b0118 2005-01-03 devnull .B -l
185 058b0118 2005-01-03 devnull math library
186 058b0118 2005-01-03 devnull .RS
187 058b0118 2005-01-03 devnull .TP
188 058b0118 2005-01-03 devnull .BI s( x )
189 058b0118 2005-01-03 devnull sine
190 058b0118 2005-01-03 devnull .TP
191 058b0118 2005-01-03 devnull .BI c( x )
192 058b0118 2005-01-03 devnull cosine
193 058b0118 2005-01-03 devnull .TP
194 058b0118 2005-01-03 devnull .BI e( x )
195 058b0118 2005-01-03 devnull exponential
196 058b0118 2005-01-03 devnull .TP
197 058b0118 2005-01-03 devnull .BI l( x )
198 058b0118 2005-01-03 devnull log
199 058b0118 2005-01-03 devnull .TP
200 058b0118 2005-01-03 devnull .BI a( x )
201 058b0118 2005-01-03 devnull arctangent
202 058b0118 2005-01-03 devnull .TP
203 058b0118 2005-01-03 devnull .BI j( "n, x" )
204 058b0118 2005-01-03 devnull Bessel function
205 058b0118 2005-01-03 devnull .RE
206 058b0118 2005-01-03 devnull .PP
207 058b0118 2005-01-03 devnull .DT
208 058b0118 2005-01-03 devnull All function arguments are passed by value.
209 058b0118 2005-01-03 devnull .PD
210 058b0118 2005-01-03 devnull .PP
211 058b0118 2005-01-03 devnull The value of an expression at the top level is printed
212 058b0118 2005-01-03 devnull unless the main operator is an assignment or the
213 058b0118 2005-01-03 devnull .B -s
214 058b0118 2005-01-03 devnull command line argument is given.
215 058b0118 2005-01-03 devnull Text in quotes, which may include newlines, is always printed.
216 058b0118 2005-01-03 devnull Either semicolons or newlines may separate statements.
217 058b0118 2005-01-03 devnull Assignment to
218 058b0118 2005-01-03 devnull .B scale
219 058b0118 2005-01-03 devnull influences the number of digits to be retained on arithmetic
220 058b0118 2005-01-03 devnull operations in the manner of
221 d32deab1 2020-08-16 rsc .MR dc (1) .
222 058b0118 2005-01-03 devnull Assignments to
223 058b0118 2005-01-03 devnull .B ibase
224 058b0118 2005-01-03 devnull or
225 058b0118 2005-01-03 devnull .B obase
226 058b0118 2005-01-03 devnull set the input and output number radix respectively.
227 058b0118 2005-01-03 devnull .PP
228 058b0118 2005-01-03 devnull The same letter may be used as an array, a function,
229 058b0118 2005-01-03 devnull and a simple variable simultaneously.
230 058b0118 2005-01-03 devnull All variables are global to the program.
231 058b0118 2005-01-03 devnull Automatic variables are pushed down during function calls.
232 058b0118 2005-01-03 devnull In a declaration of an array as a function argument
233 058b0118 2005-01-03 devnull or automatic variable
234 058b0118 2005-01-03 devnull empty square brackets must follow the array name.
235 058b0118 2005-01-03 devnull .PP
236 058b0118 2005-01-03 devnull .I Bc
237 058b0118 2005-01-03 devnull is actually a preprocessor for
238 d32deab1 2020-08-16 rsc .MR dc (1) ,
239 058b0118 2005-01-03 devnull which it invokes automatically, unless the
240 058b0118 2005-01-03 devnull .B -c
241 058b0118 2005-01-03 devnull (compile only)
242 058b0118 2005-01-03 devnull option is present.
243 058b0118 2005-01-03 devnull In this case the
244 058b0118 2005-01-03 devnull .I dc
245 058b0118 2005-01-03 devnull input is sent to the standard output instead.
246 058b0118 2005-01-03 devnull .SH EXAMPLE
247 058b0118 2005-01-03 devnull Define a function to compute an approximate value of
248 058b0118 2005-01-03 devnull the exponential.
249 058b0118 2005-01-03 devnull Use it to print 10 values.
250 058b0118 2005-01-03 devnull (The exponential function in the library gives better answers.)
251 058b0118 2005-01-03 devnull .PP
252 058b0118 2005-01-03 devnull .EX
253 058b0118 2005-01-03 devnull scale = 20
254 058b0118 2005-01-03 devnull define e(x) {
255 058b0118 2005-01-03 devnull auto a, b, c, i, s
256 058b0118 2005-01-03 devnull a = 1
257 058b0118 2005-01-03 devnull b = 1
258 058b0118 2005-01-03 devnull s = 1
259 058b0118 2005-01-03 devnull for(i=1; 1; i++) {
260 058b0118 2005-01-03 devnull a *= x
261 058b0118 2005-01-03 devnull b *= i
262 058b0118 2005-01-03 devnull c = a/b
263 058b0118 2005-01-03 devnull if(c == 0) return s
264 058b0118 2005-01-03 devnull s += c
265 058b0118 2005-01-03 devnull }
266 058b0118 2005-01-03 devnull }
267 058b0118 2005-01-03 devnull for(i=1; i<=10; i++) print e(i)
268 058b0118 2005-01-03 devnull .EE
269 058b0118 2005-01-03 devnull .SH FILES
270 c8b6342d 2005-01-13 devnull .B \*9/lib/bclib
271 058b0118 2005-01-03 devnull mathematical library
272 058b0118 2005-01-03 devnull .SH SOURCE
273 c3674de4 2005-01-11 devnull .B \*9/src/cmd/bc.y
274 058b0118 2005-01-03 devnull .SH "SEE ALSO"
275 058b0118 2005-01-03 devnull .IR dc (1),
276 d32deab1 2020-08-16 rsc .MR hoc (1)
277 058b0118 2005-01-03 devnull .SH BUGS
278 058b0118 2005-01-03 devnull No
279 058b0118 2005-01-03 devnull .LR && ,
280 058b0118 2005-01-03 devnull .LR || ,
281 058b0118 2005-01-03 devnull or
282 058b0118 2005-01-03 devnull .L !
283 058b0118 2005-01-03 devnull operators.
284 c8b6342d 2005-01-13 devnull .PP
285 058b0118 2005-01-03 devnull A
286 058b0118 2005-01-03 devnull .L for
287 058b0118 2005-01-03 devnull statement must have all three
288 058b0118 2005-01-03 devnull .LR E s.
289 c8b6342d 2005-01-13 devnull .PP
290 058b0118 2005-01-03 devnull A
291 058b0118 2005-01-03 devnull .L quit
292 058b0118 2005-01-03 devnull is interpreted when read, not when executed.