Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

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