bc
bc
bc [options] [files]
bc is a language (and compiler) whose syntax resembles that of C, but with unlimited-precision arithmetic. bc consists of identifiers
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.
Options
Print help message and exit.
Interactive mode.
Make functions from the math library available.
Ignore all extensions, and process exactly as in POSIX.
When extensions to POSIX bc are used, print a warning.
Do not display welcome message.
Print version number.
Identifiers
An identifier is a series of one or more characters. It must begin with a lowercase letter but may also contain digits and underscores. No uppercase letters are allowed. Identifiers are used as names for variables, arrays, and functions. Variables normally store arbitrary-precision numbers. 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.
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.
Input-output keywords
ibase, obase, scale, and last store a value. Typing them on a line by themselves displays their current value. You can also change their values through assignment. The letters A-F are treated as digits whose values are 10-15.
Numbers that are input (e.g., typed) are read as base n (default is 10).
Numbers that are displayed are in base n (default is 10). Note: once ibase has been changed from 10, use A to restore ibase or obase to decimal.
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.
Value of last printed number.
Statement keywords
A semicolon or a newline separates one statement from another. Curly braces are needed when grouping multiple statements:
Do one or more statements if relational expression rel-expr is true. Otherwise, do nothing, or if else (an extension) is specified, do alternative statements. For example:
if (x= =y) {i = i + 1} else {i = i - 1}
Repeat one or more statements while rel-expr is true. For example:
while (i>0) {p = p*n; q = a/b; i = i-1}
Similar to while. For example, to print the first 10 multiples of 5, you could type:
for (i=1; i<=10; i++) i*5
GNU bc does not require three arguments to for. A missing argument 1 or 3 means that those expressions will never be evaluated. A missing argument 2 evaluates to the value 1.
Terminate a while or for statement.
GNU extension. It provides an alternate means of output. list consists of a series of comma-separated strings and expressions; print displays these entities in the order of the list. It does not print a newline when it terminates. Expressions are evaluated, printed, and assigned to the special variable last. Strings (which may contain special characters—i.e., characters beginning with ) are simply printed. Special characters can be:
a Alert or bell
b Backspace
f Form feed
n Newline
r Carriage return
q Double quote
t Tab
Backslash
GNU extension. When within a for statement, jump to the next iteration.
GNU extension. Cause the bc processor to quit when executed.
GNU extension. Cause the bc processor to quit whether line is executed or not.
GNU extension. Print the limits enforced by the local version of bc.
Function keywords
Begin the definition of function f having the arguments args. The arguments are separated by commas. Statements follow on successive lines. End with }.
Set up x and y as variables local to a function definition, initialized to 0 and meaningless outside the function. Must appear first.
Pass the value of expression expr back to the program. Return 0 if (expr) is left off. Used in function definitions.
Compute the square root of expression expr.
Compute how many significant digits are in expr.
Same as length, but count only digits to the right of the decimal point.
GNU extension. Read a number from standard input. Return value is the number read, converted via the value of ibase.
Math library functions
These are available when bc is invoked with -l. Library functions set scale to 20:
Compute the sine of angle, a constant or expression in radians.
Compute the cosine of angle, a constant or expression in radians.
Compute the arctangent of n, returning an angle in radians.
Compute e to the power of expr.
Compute the natural log of expr.
Compute the Bessel function of integer order n.
Operators
These consist of operators and other symbols. Operators can be arithmetic, unary, assignment, or relational:
+ - * / % ^
- ++ --
=+ =- =* =/ =% =^ =
< <= > >= = = !=
Other symbols
Enclose comments.
Control the evaluation of expressions (change precedence). Can also be used around assignment statements to force the result to print.
Use to group statements.
Indicate array index.
Use as a statement to print text.
Examples
Note in these examples
ibase = 8
The following lines show the use of functions:
define p(r,n){