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