## Bc

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

'''bc''' ("basic calculator") is the standard calculator for [[Unix]] systems.

bc boasts unlimited precision, to handle numbers with very many digits.

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 `sqrt` will not give an infinite number of digits.

The special variable `scale` 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').

Expressions print themselves, unless they are assignments.

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.

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

bc has no way to read user input, except to go to interactive mode after loading a program.

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