


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



Printed 11/26/99	October 21, 1996			1






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



		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.



Printed 11/26/99	October 21, 1996			2






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



     _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/share/misc/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.





































Printed 11/26/99	October 21, 1996			3



