{{language
|exec=interpreted
|checking=static
|hopl id=1854
}}

'''bc''' ("basic calculator") is the standard calculator for [[Unix]] systems. <br>
bc boasts unlimited precision, to handle numbers with very many digits. <br>
With the bc language, you can write programs that perform numeric calculations 
and print the results. 

;See also :
* [[wp:Bc programming language|Bc programming language]] on Wikipedia
* [[:Category:Dc|dc]] - the unix '''d'''esktop '''c'''alculator. 

bc has an interactive mode, which is convenient for brief calculations:

 $ '''bc'''
 '''2 + 3'''
 5
 '''2 ^ 200'''
 1606938044258990275541962092341162602522202993782792835301376
 '''i = -5'''
 '''3 - i * 4'''
 23
 '''obase = 2'''
 '''i'''
 -101
 '''ibase = 16'''
 '''FE80'''
 1111111010000000

Division and <tt>sqrt</tt> will not give an infinite number of digits. <br>
The special variable <tt>scale</tt> controls when to stop.

 $ '''bc'''
 '''65.9 / 3'''
 21
 '''scale = 6'''
 '''65.9 / 3'''
 21.966666
 '''sqrt(2)'''
 1.414213
 '''scale = 60'''
 '''sqrt(2)'''
 1.414213562373095048801688724209698078569671875376948073176679

bc language resembles [[C|C language]]: bc has most of the same operators 
and control structures ('if', 'while', 'for'). <br>
Expressions print themselves, unless they are assignments. <br>
The newline is a statement separator, like the semicolon.

bc has excellent numeric operations, but is a poor language. 
The original bc, the "Bell Calculator" of Unix V7, 
translated the program to [[dc]] and inherited the limitations of [[dc]].

* Names of variables, and custom functions, may have only one letter.
* There is no 'else' branch of an 'if' statement.
* Relational operators (== <= => != < >) only work in the condition of an 'if', 'while' or 'for' statement.
* There are no boolean operators (! && ||).

Some newer implementations, like [[GNU bc]] and [[OpenBSD bc]], 
discard these silly limitations, but users can still feel their effects. <br>
OpenBSD says, "a = b < c is interpreted as "(a = b) < c, which is probably not what the programmer intended," and "!a < b is interpreted as !(a < b)".

bc can only print a string, and has no other string operations, 
so bc cannot do tasks like [[reverse a string]]. <br>
bc has no way to read user input, except to go to interactive mode 
after loading a program.

[[Category:Mathematical programming languages]]
[[Category:Utility]]