BC(1)                                                       BC(1)

          bc - arbitrary-precision arithmetic language

          bc [ -cdls ] [ file ... ]

          Bc is an interactive processor for a language that resembles
          C but provides arithmetic on numbers of arbitrary length
          with up to 100 digits right of the decimal point.  It takes
          input from any files given, then reads the standard input.

          The -d option enables debugging output.  The -l option
          stands for the name of an arbitrary precision math library.
          The -s option suppresses the automatic display of calcula-
          tion results; all output is via the print command.

          The following syntax for bc programs is like that of C; L
          means letter a-z, E means expression, S means statement.

                     comments are enclosed in /* */
                     newlines end statements
                     simple variables: L
                     array elements: L[E]
                     The words ibase, obase, and scale
          Other operands
                     arbitrarily long numbers with optional sign and
                     decimal point.
                          number of significant decimal digits
                          number of digits right of decimal point
                          function call
                     +  -  *  /  %  ^  (% is remainder; ^ is power)
                     ++  --
                     ==  <=  >=  !=  <  >
                     =  +=  -=  *=  /=  %=  ^=
                     { S ; ...  ; S }
                     print E
                     if ( E ) S
                     while ( E ) S
                     for ( E ; E ; E ) S

     Page 1                       Plan 9             (printed 4/18/24)

     BC(1)                                                       BC(1)

                     null statement
          Function definitions
                     define L ( L , ...  , L ){
                     auto L , ...  , L
                     S ; ...  ; S
                     return E
          Functions in
                     -l math library
                     s(x) sine
                     c(x) cosine
                     e(x) exponential
                     l(x) log
                     a(x) arctangent
                     j(n, x)
                          Bessel function
          All function arguments are passed by value.

          The value of an expression at the top level is printed
          unless the main operator is an assignment or the -s command
          line argument is given.  Text in quotes, which may include
          newlines, is always printed.  Either semicolons or newlines
          may separate statements.  Assignment to scale influences the
          number of digits to be retained on arithmetic operations in
          the manner of dc(1). Assignments to ibase or obase set the
          input and output number radix respectively.

          The same letter may be used as an array, a function, and a
          simple variable simultaneously.  All variables are global to
          the program.  Automatic variables are pushed down during
          function calls.  In a declaration of an array as a function
          argument or automatic variable empty square brackets must
          follow the array name.

          Bc is actually a preprocessor for dc(1), which it invokes
          automatically, unless the -c (compile only) option is pre-
          sent.  In this case the dc input is sent to the standard
          output instead.

          Define a function to compute an approximate value of the
          exponential.  Use it to print 10 values.  (The exponential
          function in the library gives better answers.)

          scale = 20
          define e(x) {
               auto a, b, c, i, s
               a = 1
               b = 1

     Page 2                       Plan 9             (printed 4/18/24)

     BC(1)                                                       BC(1)

               s = 1
               for(i=1; 1; i++) {
                    a *= x
                    b *= i
                    c = a/b
                    if(c == 0) return s
                    s += c
          for(i=1; i<=10; i++) print e(i)

          /sys/lib/bclib mathematical library


          dc(1), hoc(1)

          No `&&', `||', or `!'  operators.

          A `for' statement must have all three `E's.

          A `quit' is interpreted when read, not when executed.

     Page 3                       Plan 9             (printed 4/18/24)