Commit | Line | Data |
---|---|---|
7b4a7cb8 | 1 | .\" @(#)bc.1 6.2 (Berkeley) %G% |
67aa4194 | 2 | .\" |
db359672 | 3 | .TH BC 1 "" |
67aa4194 KM |
4 | .AT 3 |
5 | .SH NAME | |
7b4a7cb8 | 6 | bc \- arbitrary-precision arithmetic language and calculator |
67aa4194 KM |
7 | .SH SYNOPSIS |
8 | .B bc | |
9 | [ | |
10 | .B \-c | |
11 | ] [ | |
12 | .B \-l | |
13 | ] [ file ... ] | |
14 | .SH DESCRIPTION | |
15 | .I Bc | |
16 | is an interactive processor for a language which resembles | |
17 | C but provides unlimited precision arithmetic. | |
18 | It takes input from any files given, then reads | |
19 | the standard input. | |
20 | The | |
21 | .B \-l | |
22 | argument stands for the name | |
23 | of an arbitrary precision math library. | |
24 | The syntax for | |
25 | .I bc | |
26 | programs is as follows; | |
27 | L means letter a-z, | |
28 | E means expression, S means statement. | |
29 | .HP 6 | |
30 | Comments | |
31 | .br | |
32 | are enclosed in /* and */. | |
33 | .HP 6 | |
34 | Names | |
35 | .br | |
36 | simple variables: L | |
37 | .br | |
38 | array elements: L [ E ] | |
39 | .br | |
40 | The words `ibase', `obase', and `scale' | |
41 | .HP 6 | |
42 | Other operands | |
43 | .br | |
44 | arbitrarily long numbers with optional sign and decimal point. | |
45 | .br | |
46 | ( E ) | |
47 | .br | |
48 | sqrt ( E ) | |
49 | .br | |
50 | length ( E ) number of significant decimal digits | |
51 | .br | |
52 | scale ( E ) number of digits right of decimal point | |
53 | .br | |
54 | L ( E , ... , E ) | |
55 | .HP 6 | |
56 | Operators | |
57 | .br | |
58 | + \- * / % ^ | |
59 | (% is remainder; ^ is power) | |
60 | .br | |
61 | ++ \-\- (prefix and postfix; apply to names) | |
62 | .br | |
63 | == <= >= != < > | |
64 | .br | |
65 | = += \-= *= /= %= ^= | |
66 | .br | |
67 | .HP 6 | |
68 | Statements | |
69 | .br | |
70 | E | |
71 | .br | |
72 | { S ; ... ; S } | |
73 | .br | |
74 | if ( E ) S | |
75 | .br | |
76 | while ( E ) S | |
77 | .br | |
78 | for ( E ; E ; E ) S | |
79 | .br | |
80 | null statement | |
81 | .br | |
82 | break | |
83 | .br | |
84 | quit | |
85 | .HP 6 | |
86 | Function definitions | |
87 | .br | |
88 | define L ( L ,..., L ) { | |
89 | .br | |
90 | auto L, ... , L | |
91 | .br | |
92 | S; ... S | |
93 | .br | |
94 | return ( E ) | |
95 | .br | |
96 | } | |
97 | .HP 6 | |
98 | Functions in | |
99 | .B \-l | |
100 | math library | |
101 | .br | |
102 | s(x) sine | |
103 | .br | |
104 | c(x) cosine | |
105 | .br | |
106 | e(x) exponential | |
107 | .br | |
108 | l(x) log | |
109 | .br | |
110 | a(x) arctangent | |
111 | .br | |
112 | j(n,x) Bessel function | |
113 | .PP | |
114 | .DT | |
115 | All function arguments are passed by value. | |
116 | .PP | |
117 | The value of a statement that is an expression is printed | |
118 | unless the main operator is an assignment. | |
119 | Either semicolons or newlines may separate statements. | |
120 | Assignment to | |
121 | .I scale | |
122 | influences the number of digits to be retained on arithmetic | |
123 | operations in the manner of | |
124 | .IR dc (1). | |
125 | Assignments to | |
126 | .I ibase | |
127 | or | |
128 | .I obase | |
129 | set the input and output number radix respectively. | |
130 | .PP | |
131 | The same letter may be used as an array, a function, | |
132 | and a simple variable simultaneously. | |
133 | All variables are global to the program. | |
134 | `Auto' variables are pushed down during function calls. | |
135 | When using arrays as function arguments | |
136 | or defining them as automatic variables | |
137 | empty square brackets must follow the array name. | |
138 | .PP | |
139 | For example | |
140 | .PP | |
141 | .nf | |
142 | scale = 20 | |
143 | define e(x){ | |
144 | auto a, b, c, i, s | |
145 | a = 1 | |
146 | b = 1 | |
147 | s = 1 | |
148 | for(i=1; 1==1; i++){ | |
149 | a = a*x | |
150 | b = b*i | |
151 | c = a/b | |
152 | if(c == 0) return(s) | |
153 | s = s+c | |
154 | } | |
155 | } | |
156 | .PP | |
157 | .fi | |
158 | defines a function to compute an approximate value of | |
159 | the exponential function and | |
160 | .PP | |
161 | .nf | |
162 | for(i=1; i<=10; i++) e(i) | |
163 | .fi | |
164 | .PP | |
165 | prints approximate values of the exponential function of | |
166 | the first ten integers. | |
167 | .PP | |
168 | .I Bc | |
169 | is actually a preprocessor for | |
170 | .IR dc (1), | |
171 | which it invokes automatically, unless the | |
172 | .B \-c | |
173 | (compile only) | |
174 | option is present. | |
175 | In this case the | |
176 | .I dc | |
177 | input is sent to the standard output instead. | |
178 | .SH FILES | |
179 | .ta \w'/usr/lib/lib.b 'u | |
180 | /usr/lib/lib.b mathematical library | |
181 | .br | |
182 | dc(1) desk calculator proper | |
183 | .SH "SEE ALSO" | |
184 | dc(1) | |
185 | .br | |
186 | L. L. Cherry and R. Morris, | |
187 | .I | |
188 | BC \- An arbitrary precision desk-calculator language | |
189 | .SH BUGS | |
190 | No &&, \(or\|\(or, or ! operators. | |
191 | .br | |
192 | .I For | |
193 | statement must have all three E's. | |
194 | .br | |
195 | .I Quit | |
196 | is interpreted when read, not when executed. |