BC(I)                        2/20/75                        BC(I)



NAME
     bc - arbitrary precision interactive language

SYNOPSIS
     bc [ -l ] [ file ... ]

DESCRIPTION
     Bc  is  an interactive processor for a language which resem-
     bles C but  provides  unlimited  precision  arithmetic.   It
     takes  input  from  any files given, then reads the standard
     input.  The `-l' argument stands for the name of  a  library
     of mathematical subroutines which contains sine (named `s'),
     cosine (`c'), arctangent (`a'), natural logarithm (`l'), and
     exponential  (`e').   The  syntax for bc programs is as fol-
     lows; E means expression, S means statement.

     Comments
           are enclosed in /* and */.

     Names
           letters a-z
           array elements: letter[E]
           The words `ibase', `obase', and `scale'

     Other operands
           arbitrarily long numbers with optional sign and  deci-
           mal point.
           ( E )
           sqrt ( E )
           <letter> ( E , ... , E )

     Operators
           +  -  *  /  %  ^
           ++   --         (prefix and postfix; apply to names)
           ==  <=  >=  !=  <  >
           =  =+  =-  =*  =/  =%  =^

     Statements
           E
           { S ; ... ; S }
           if ( E ) S
           while ( E ) S
           for ( E ; E ; E ) S
           null statement
           break
           quit

     Function definitions are exemplified by
           define <letter> ( <letter> ,..., <letter> ) {
                 auto <letter>, ... , <letter>
                 S; ... S
                 return ( E )
           }

     All function arguments are passed by value.


                              - 1 -




BC(I)                        2/20/75                        BC(I)


     The  value  of  a statement that is an expression is printed
     unless the main operator is  an  assignment.   Either  semi-
     colons  or  newlines may separate statements.  Assignment to
     scale influences the number of  digits  to  be  retained  on
     arithmetic  operations.   Assignments  to ibase or obase set
     the input and output number radix respectively.

     The same letter may be used as an  array  name,  a  function
     name,  and  a  simple variable simultaneously.  `Auto' vari-
     ables are saved and restored  during  function  calls.   All
     other  variables  are global to the program.  When using ar-
     rays as function arguments or  defining  them  as  automatic
     variables  empty square brackets must follow the array name.

     For example

     scale = 20
     define e(x){
             auto a, b, c, i, s
             a = 1
             b = 1
             s = 1
             for(i=1; 1==1; i++){
                     a = a*x
                     b = b*i
                     c = a/b
                     if(c == 0) return(s)
                     s = s+c
             }
     }

     defines a function to compute an approximate  value  of  the
     exponential function and

             for(i=1; i<=10; i++) e(i)

     prints approximate values of the exponential function of the
     first ten integers.

FILES
     /usr/lib/lib.b  mathematical library

SEE ALSO
     dc(I), C Reference Manual, ``BC -  An  Arbitrary  Precision
     Desk-Calculator Language.''

BUGS
     No &&, | | yet.
     for statement must have all three E's
     quit is interpreted when read, not when executed.








                              - 2 -