32v 1m bc

From Computer History Wiki
Jump to: navigation, search

BC(1) UNIX Programmer's Manual BC(1)


NAME

    bc - arbitrary-precision arithmetic language

SYNOPSIS

    bc [ -c ] [ -l ] [ file ... ]

DESCRIPTION

    _B_c 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 an arbitrary
    precision math library.  The syntax for _b_c programs is as
    follows; L means letter a-z, E means expression, S means
    statement.
    Comments
          are enclosed in /* and */.
    Names
          simple variables: L
          array elements: L [ E ]
          The words `ibase', `obase', and `scale'
    Other operands
          arbitrarily long numbers with optional sign and
          decimal point.
          ( E )
          sqrt ( E )
          length ( E )   number of significant decimal digits
          scale ( E )    number of digits right of decimal point
          L ( E , ... , E )
    Operators
          +  -  *  /  %  ^ (% is remainder; ^ is power)
          ++   --         (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
          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 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
    _s_c_a_l_e influences the number of digits to be retained on
    arithmetic operations in the manner of _d_c(1).  Assignments
    to _i_b_a_s_e or _o_b_a_s_e 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.  `Auto' variables are pushed down during func-
    tion calls.  When using arrays 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.
    _B_c is actually a preprocessor for _d_c(1), which it invokes
    automatically, unless the -c (compile only) option is
    present.  In this case the _d_c input is sent to the standard
    output instead.

FILES

    /usr/lib/lib.b mathematical library
    dc(1)          desk calculator proper

SEE ALSO

    dc(1)
    L. L. Cherry and R. Morris, _B_C - _A_n _a_r_b_i_t_r_a_r_y _p_r_e_c_i_s_i_o_n
    _d_e_s_k-_c_a_l_c_u_l_a_t_o_r _l_a_n_g_u_a_g_e

BUGS

    No &&, ||, or ! operators.
    _F_o_r statement must have all three E's.
    _Q_u_i_t is interpreted when read, not when executed.