bc
[options] [files]Interactively perform arbitrary-precision arithmetic or convert numbers from one base to another. Input can be taken from files or read from the standard input. To exit, type quit
or EOF.
-c
Do not invoke dc; compile only. (Since bc is a preprocessor for dc, bc normally invokes dc.)
-l
Make available functions from the math library.
bc is a language (and compiler) whose syntax resembles that of C. bc consists of identifiers, keywords, and symbols, which are briefly described here. Examples follow at the end.
An identifier is a single character, consisting of the lowercase letters a-z. Identifiers are used as names for variables, arrays, and functions. Within the same program you may name a variable, an array, and a function using the same letter. The following identifiers would not conflict:
x | Variable |
x[ i] | Element i of array |
x(y,z) | Call function |
ibase
, obase
, and scale
each store a value. Typing them on a line by themselves displays their current value. More commonly, you would change their values through assignment. Letters A-F are treated as digits whose values are 10-15.
ibase =
nNumbers that are input (e.g., typed) are read as base n (default is 10).
obase =
nNumbers displayed are in base n (default is 10). Note: once ibase
has been changed from 10, use digit "A" to restore ibase
or obase
to decimal.
scale =
nDisplay computations using n decimal places (default is 0, meaning that results are truncated to integers). scale
is normally used only for base-10 computations.
A semicolon or a newline separates one statement from another. Curly braces are needed only when grouping multiple statements.
if (
rel-expr) {
statements}
Do one or more statements if relational expression rel-expr is true; for example:
if (x == y) i = i + 1
while (
rel-expr) {
statements}
Repeat one or more statements while rel-expr is true; for example:
while (i > 0) {p = p*n; q = a/b; i = i-1}
for (
expr1;
rel-expr;
expr2) {
statements}
Similar to while
; for example, to print the first 10 multiples of 5, you could type:
for (i = 1; i <= 10; i++) i*5
break
Terminate a while
or for
statement.
quit
Exit bc.
define
j(
k) {
Begin the definition of function j having a single argument k. Additional arguments are allowed, separated by commas. Statements follow on successive lines. End with a }
.
auto
x,
ySet up x and y as variables local to a function definition, initialized to 0 and meaningless outside the function. Must appear first.
return(
expr)
Pass the value of expression expr back to the program. Return 0 if (
expr)
is left off. Used in function definitions.
sqrt(
expr)
Compute the square root of expression expr.
length(
expr)
Compute how many digits are in expr.
scale(
expr)
Same, but count only digits to the right of the decimal point.
These are available when bc is invoked with -l
. Library functions set scale
to 20.
s(
angle)
Compute the sine of angle, a constant or expression in radians.
c(
angle)
Compute the cosine of angle, a constant or expression in radians.
a(
n)
Compute the arctangent of n, returning an angle in radians.
e(
expr)
Compute e to the power of expr.
l(
expr)
Compute natural log of expr.
j(
n,
x)
Compute Bessel function of integer order n.
These consist of operators and other symbols. Operators can be arithmetic, unary, assignment, or relational.
Arithmetic |
|
Unary |
|
Assignment |
|
Relational |
|
/* */
Enclose comments.
( )
Control the evaluation of expressions (change precedence). Can also be used around assignment statements to force the result to print.
{ }
Used to group statements.
[ ]
Array index.
"
text"
Use as a statement to print text.
Note that when you type some quantity (a number or expression), it is evaluated and printed, but assignment statements produce no display:
ibase = 8
Octal input20
Evaluate this octal number16
Terminal displays decimal valueobase = 2
Display output in base 2 instead of base 1020
Octal input 10000 Terminal now displays binary valueibase = A
Restore base 10 inputscale = 3
Truncate results to three places8/7
Evaluate a division1.001001000
Oops! Forgot to reset output base to 10obase = 10
Input is decimal now, so "A" isn't needed8/7
1.142 Terminal displays result (truncated)
The following lines show the use of functions:
define p(r,n){
Function p uses two argumentsauto v
v is a local variablev = r^n
r raised to the n powerreturn(v)}
Value returnedscale = 5
x = p(2.5,2)
x = 2.5 ^ 2x
Print value of x 6.25length(x)
Number of digits 3scale(x)
Number of places to right of decimal point 2