# 32v 1m bc

From Computer History Wiki

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

## Contents

## 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.