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