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
.
Do not invoke dc ; compile only. (Since bc is a preprocessor for dc , bc normally invokes dc .)
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 below. Examples follow at 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:
Variable x .
i
]
Element
i
of array
x
.
i
can range from 0 to 2047 and can also be an expression.
Call function x with parameters y and z .
ibase , obase , and scale 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.
n
Numbers that are input (e.g., typed) are read as base
n
(default is 10).
n
Numbers 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.
n
Display 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.
rel-expr
) {
statements
}
Do one or more
statements
if relational expression
rel-expr
is true; for example:
if(x==y) i = i + 1
.
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}
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
Terminate a while or for statement.
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 }.
x
,
y
Set up
x
and
y
as variables local to a function definition, initialized to 0 and meaningless outside the function. Must appear first.
expr
)
Pass the value of expression
expr
back to the program. Return 0 if
(
expr
)
is left off. Used in function definitions.
expr
)
Compute the square root of expression
expr
.
expr
)
Compute how many digits are in
expr
.
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.
angle
)
Compute the sine of
angle
, a constant or expression in radians.
angle
)
Compute the cosine of
angle
, a constant or expression in radians.
n
)
Compute the arctangent of
n
, returning an angle in radians.
expr
)
Compute
e
to the power of
expr
.
expr
)
Compute natural log of
expr
.
n
,
x
)
Compute Bessel function of integer order
n
.
These consist of operators and other symbols. Operators can be arithmetic, unary, assignment, or 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 below that when you type some quantity (a number or expression), it is evaluated and printed, but assignment statements produce no display.
ibase = 8
Octal input .20
Evaluate this octal number .16
Terminal displays decimal value .obase = 2
Display output in base 2 instead of base 10 .20
Octal input .10000
Terminal now displays binary value .ibase = A
Restore base 10 input .scale = 3
Truncate results to 3 places .8/7
Evaluate a division .1.001001000
Oops! Forgot to reset output base to 10 .obase=10
Input is decimal now, so "A" isn't needed .8/7
1.142
Terminal displays result (truncated) .
The following lines show the use of functions:
define p(r,n){
Function p uses two arguments .auto v
v is a local variable .v = r^n
r raised to the n power .return(v)}
Value returned .scale=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 right of decimal point . 2