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