unixdev.net


Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (OSF1-V5.1-alpha)
Page:
Section:
Apropos / Subsearch:
optional field



bc(1)									bc(1)



NAME

  bc - Provides	a processor for	arbitrary-precision arithmetic language

SYNOPSIS

  bc [-cl] [file...]

  The bc command is an interactive program that	provides unlimited precision
  arithmetic.  It is a preprocessor for	the dc command.

STANDARDS

  Interfaces documented	on this	reference page conform to industry standards
  as follows:

  bc:  XCU5.0

  Refer	to the standards(5) reference page for more information	about indus-
  try standards	and associated tags.

OPTIONS

  -c  [Tru64 UNIX]  Compiles file, but does not	invoke dc.

  -l  Includes a library of mathematical functions.  Also sets the number of
      digits retained after the	decimal	point (the scale) to 20; by default
      the scale	is 0.

OPERANDS

  file
      Pathname of a text file containing program statements. After file	has
      been exhausted, standard input is	read.

DESCRIPTION

  [Tru64 UNIX]	The bc command invokes dc automatically, unless	the -c (com-
  pile only) option is specified.  If the -c option is specified, the output
  from bc goes to the standard output.

  The bc command lets you specify an input and output base in decimal, octal,
  or hexadecimal (the default is decimal).  The	command	also has a scaling
  provision for	decimal	point notation.	 The syntax for	bc is similar to that
  of the C language.

  The bc command takes input first from	the specified file.  When bc reaches
  the end of the input file, it	reads standard input.

  In the following description of syntax for bc, letter	means one of the
  letters a-z.



  Comments


  Comments are enclosed	in /* and */.


  Names


  Simple variables: letter

  Array	elements: letter[expression]

  The words ibase, obase, and scale

  Other	Operands


  Arbitrarily long numbers with	optional sign and decimal point.

  (expression)

  sqrt (expression)

  length (expression)
      Number of	significant decimal digits

  scale	(expression)
      Number of	digits to right	of decimal point

  letter (expression,...,expression)

  Operators


  +  -	*  /  %	 ^  (% is remainder; ^ is power)

  ++  -- (prefix and suffix; apply to names)

  ==  <=  >=  !=  <>

  =  =+	 =-  =*	 =/  =%	 ^=

  +=  -=  *=  /=  %=

  Statements


  expression

  {statement;...;statement}

  if (expression) statement

  while	(expression) statement

  for (expression;expression;expression) statement

  (null	statement)

  break

  quit



  Function Definitions


       define letter ( letter,...,letter ) {

	      auto letter,...,letter
	      statement;...statement
	      return ( expression )
       }


  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

  General Syntax


  All function parameters are passed by	value.

  The value of a statement that	is an expression is displayed, unless the
  main operator	is an assignment.  A semicolon or newline character separates
  statements.  Assignments to scale control the	number of decimal places
  printed on output and	maintained during multiplication, division, and
  exponentiation.  Assignments to ibase	or obase set the input and output
  number radix,	respectively.

  The same letter may refer to an array, a function, and a simple variable
  simultaneously.  All variables are global to the program.  Automatic vari-
  ables	are pushed down	during function	calls. When you	use arrays as func-
  tion parameters, or define them as automatic variables, empty	brackets must
  follow the array name.

  All for statements must have all three expressions.

  The quit statement is	interpreted when read, not when	executed.

EXIT STATUS

  The following	exit values are	returned:

  0   Successful completion.

  !0  An error occurred.





EXAMPLES

  When you enter bc expressions	directly from the keyboard, press the End-
  of-File key sequence to end the bc session and return	to the shell command
  line.

   1.  To use bc as a calculator, proceed as follows:

       Enter:
	    $ bc
	    1/4

       The system responds as follows:
	    0

       Enter:
	    scale = 1  /* Keep 1 decimal place	*/
	    1/4

       The system responds as follows:
	    0.2

       Enter:
	    scale = 3  /* Keep 3 decimal places	*/
	    1/4

       The system responds as follows:
	    0.250

       Enter:
	    16+63/5

       The system responds as follows:
	    28.600

       Enter:
	    (16+63)/5

       The system responds as follows:
	    15.800

       Enter:
	    71/6

       The system responds as follows:
	    11.833

       Enter:
	    1/6

       The system responds as follows:
	    0.166

       You may type the	comments (enclosed in /* */), but they are provided
       only for	your information. The bc command displays the value of each
       expression when you press <&lt;Return>&gt;, except for assignments.

   2.  To convert numbers from one base	to another, proceed as follows:

       Enter:
	    bc
	    obase = 16	    /* Display numbers in Hexadecimal */
	    ibase = 8		    /* Input numbers in	Octal	    */
	    12

       The system responds as follows:
	    A

       Enter:
	    123

       The system responds as follows:
	    53

       Enter:
	    123456

       The system responds as follows:
	    A72E

   3.  To write	and run	C-like programs, proceed as follows:

       Create the following file prog.bc:


	    /* compute the factorial of	n */

	      define f(n) {
		    auto i, r;

		    r =	1;
		    for	(i=2; i<=n; i++) r =* i;
		    return (r);
	      }

       Enter:
	    bc -l prog.bc

       This interprets the bc program saved in prog.bc,	then reads more	bc
       command statements from standard	input (the keyboard). Starting the bc
       command with the	-l option makes	the math library available.  This
       example uses the	e (exponential)	function from the math library,	and f
       is defined in the program prog.bc.

       Enter:
	    e(2)    /*	e squared   */

       The system responds as follows:
	    7.38905609893065022723

       Enter:
	    f(5)    /*	5 factorial */

       The system responds as follows:
	    120

       Enter:
	    f(10)   /* 10 factorial */

       The system responds as follows:
	    3628800

       The statement following a for or	while statement	must begin on the
       same line.

   4.  To convert an infix expression to Reverse Polish	Notation (RPN),
       enter:

       Enter:
	    bc -c
	    (a * b) % (3 + 4 * c)

       The system responds as follows:
	    lalb* 3 4lc*+%ps.

       This compiles the bc infix-notation expression into one that the	dc
       command can interpret.  The dc command evaluates	extended RPN
       expressions.  In	the compiled output, the lowercase l before each
       variable	name is	the dc subcommand to load the value of the variable
       onto the	stack.	The p displays the value on top	of the stack, and the
       s. discards the top value by storing it in register . (dot).  You can
       save the	RPN expression in a file for dc	to evaluate later by
       redirecting the standard	output of this command.

ENVIRONMENT VARIABLES

  The following	environment variables affect the execution of bc:

  LANG
      Provides a default value for the internationalization variables that
      are unset	or null. If LANG is unset or null, the corresponding value
      from the default locale is used.	If any of the internationalization
      variables	contain	an invalid setting, the	utility	behaves	as if none of
      the variables had	been defined.

  LC_ALL
      If set to	a non-empty string value, overrides the	values of all the
      other internationalization variables.

  LC_CTYPE
      Determines the locale for	the interpretation of sequences	of bytes of
      text data	as characters (for example, single-byte	as opposed to multi-
      byte characters in arguments).

  LC_MESSAGES
      Determines the locale for	the format and contents	of diagnostic mes-
      sages written to standard	error.

  NLSPATH
      Determines the location of message catalogues for	the processing of
      LC_MESSAGES.

FILES

  /usr/share/lib/lib.b
      Mathematical library.

  /usr/bin/dc
      Desk calculator proper; uses bc as preprocessor.

SEE ALSO

  Commands:  awk(1), dc(1)

  Standards:  standards(5)