COHERENT manpages

This page displays the COHERENT manpage for bc [Interactive calculator with arbitrary precision].

List of available manpages
Index


bc -- Command

Interactive calculator with arbitrary precision
bc [ -l ] [ file ... ]

bc is  a language that  performs calculations on numbers  with an arbitrary
number of  digits.  bc is most commonly used  as an interactive calculator,
where the  user types arithmetic expressions in a  syntax reminiscent of C.
If you invoke  bc with no file argument, it  reads the standard input.  For
example:

     Input        Output
     (1000+23)*42 42966
     k = 2^10
     16 * k       16384
     2 ^ 100      1267650600228229401496703205376

You can  invoke bc with  one or more  file arguments.  After  bc reads each
file, it reads the standard input.   This provides a convenient way to read
programs  that  are  stored  in  files.   COHERENT includes  a  library  of
mathematical functions for bc; to use it, invoke bc with its option -l.

The  following  summarizes  briefly the  facilities  provided  by bc.  More
information is available  in the tutorial to bc that  is included with this
manual.

The  delimiters `/*'  and  `*/' enclose  comments.  Names  of variables  or
functions consist of a lower-case  letter followed by any number of letters
or digits.   (Names cannot begin with an  upper-case letter because numbers
with  a  base  greater than  ten  may  need  upper-case  letters for  their
notation.) The three  built-in variables obase, ibase, and scale represent,
respectively,  the number  base for  printing  numbers (default,  ten), the
number base  for reading numbers  (default, ten), and the  number of digits
after the  decimal (radix) point (default, zero).   Variables may be simple
variables or  arrays, and need  not be pre-declared, with  the exception of
variables  internal to  functions.  Some  examples  of variables  and array
elements are x25, array[10], and number.

Numbers are any  string of digits, and may have  one decimal point.  Digits
are taken  from the ordinary  digits (0-9) and then  the upper-case letters
(A-F), in that order.

Certain names are reserved for use  as key words.  The key words recognized
by bc include the following:

if, for, do, while
     Test conditions and define loops, with syntax identical to C

break, continue
     Alter control flow within for and while loops.

quit Tell bc to exit immediately

define function (arg, ..., arg)
     Define a bc function by a compound statement, as in C.

auto var, ..., var
     Define  variables that  are local  to a  function, rather  than having
     global scope.

return (value)
     Return a value from a function.

scale (value)
     Return  the number  of digits  to the  right of  the decimal  point in
     value.

sqrt (value)
     Return the square root of value

length (value)
     Return the number of decimal digits in value.

bc recognizes the following operators:

    +   -   *   /   %   ^   ++
    --  =   +=  -=  *=  /=  %=
    ^=  ==  !=  <    <=   >>=

These operators are similar to those  in C, with the exception of ^ and ^=,
which  are  exponentiation  operators.   Expressions  can be  grouped  with
parentheses.  Statements are separated with semicolons or newlines, and may
be grouped with braces into compound statements.

bc prints  the value of any  statement that is an expression  but is not an
assignment.

As in the editor ed, an  `!' at the beginning of a line causes that line to
be sent as a command to the COHERENT shell sh.

The library  lib.b holds code written in bc  for the following mathematical
variables and functions:

atan(z) Arctangent of z
cos(z)  Cosine of z
exp(z)  Exponential function of z
j(n,z)  nth order Bessel function of z
ln(z)   Natural logarithm of z
pi      Value of pi to 100 digits
sin(z)  Sine of z

If you  invoke bc  with its option  -l, it reads  lib.b and thus  makes the
above functions and constants available to you.

Examples

The first example calculates the factorial of its positive integer argument
by recursion.

/*
 * Factorial function implemented by recursion.
 */
define fact(n) {
    if (n <= 1) return (n);
    return (n * fact(n-1));
}

The second  example also calculates  the factorial of  its positive integer
argument, this time by iteration.

/*
 * Factorial function implemented by iteration.
 */
define fact(n) {
    auto result;

    result = 1;
    for (i=1; i<=n; i++) result *= i;
    return (result);
}

Files

/usr/lib/lib.b -- Source code for the library

See Also

commands,
conv,
dc,
libmp
bc Desk Calculator Language, tutorial

Notes

Line numbers do not accompany error messages in source files.

bc performs integer  calculations with arbitrary precision, limited only by
the memory available.  However, the results of some calculations on numbers
with fractional parts depends on  the specified scale; see the tutorial for
details.