Content deleted Content added
Stevebroshar (talk | contribs) there is a language, but's primarily a program, a tool, software |
|||
(41 intermediate revisions by 28 users not shown) | |||
Line 1:
{{Short description|Arbitrary-precision calculator supporting interactive and scripted use}}{{Not to be confused with|B programming language|C programming language}}{{more footnotes|date=June 2013}}
{{lowercase|title=bc programming language}}
{{Infobox
| name = bc
| logo =
Line 7:
| screenshot size =
| caption =
| developer = [[Robert Morris (cryptographer)|Robert Morris]] and [[Lorinda Cherry]] of [[Bell Labs]]
| released = {{Release year|df=yes|1975}}
| latest release version =
| latest release date =
| operating system = [[Unix]], [[Unix-like]],
| platform = [[Cross-platform]]
| genre = [[Command (computing)|Command]]
| license =
| website =
}}
'''bc''', for ''basic calculator''
==Overview==
A typical interactive usage is typing the command <code>bc</code> on a [[Unix]] [[Command-line interface#Command prompt|command prompt]] and entering a mathematical expression, such as {{code|(1 + 3) * 2}}, whereupon {{samp|8}} will be output. While bc can work with arbitrary precision, it actually defaults to zero digits after the decimal point, so the expression {{code|2/3}} yields {{samp|0}} (results are truncated, not rounded). This can surprise new bc users unaware of this fact. The {{code|-l}} option to bc sets the default ''scale'' (digits after the decimal point) to 20 and adds several additional mathematical functions to the language.
==History==
bc first appeared in [[Version 6 Unix]] in 1975.
In 1991, [[POSIX]] rigorously defined and standardized bc.
==Implementations==
===POSIX
The POSIX standardized
In this form, the
Functions are defined using a '''<code>define</code>''' keyword, and values are returned from them using a '''<code>return</code>''' followed by the return value in parentheses. The '''<code>auto</code>''' keyword (optional in C) is used to declare a variable as local to a function.
Line 36 ⟶ 37:
All numbers and variable contents are [[arbitrary-precision]] numbers whose precision (in decimal places) is determined by the global '''<code>scale</code>''' variable.
The [[
Output is generated by deliberately not assigning the result of a calculation to a variable.
Line 55 ⟶ 56:
=====Similar to C=====
The [[Modulus operator|modulus]] operators, <code>%</code> and <code>%=</code> behave exactly like their C counterparts only when the global '''<code>scale</code>''' variable is set to 0, i.e. all calculations are integer-only. Otherwise the computation is done with the appropriate scale. <code>a%b</code> is defined as <code>a-(a/b)*b</code>. Examples:
<
$ bc
bc 1.06
Line 67 ⟶ 68:
scale=20; 5%3
.00000000000000000002
</syntaxhighlight>
=====Conflicting with C=====
Line 79 ⟶ 80:
====="Missing" operators relative to C=====
The [[bitwise operation|bitwise]], [[Boolean logic|
& | ^ && ||
Line 97 ⟶ 98:
bc's standard math library (defined with the '''-l''' option) contains functions for calculating [[sine]], [[cosine]], [[arctangent]], [[natural logarithm]], the [[exponential function]] and the two parameter [[Bessel function]] ''J''. Most standard mathematical functions (including the other inverse trigonometric functions) can be constructed using these. See external links for implementations of many other functions.
{| class="wikitable"
|+The bc standard library<ref name=":0">{{
!bc command
!Function
Line 130 ⟶ 131:
===Plan 9 bc===
[[Plan 9 from Bell Labs|Plan 9]] bc is identical to POSIX bc but for an additional '''<code>print</code>''' statement.
===GNU bc===
GNU bc derives from the POSIX standard and includes many
GNU bc variables, arrays and function names may contain more than one character, some more operators have been included from C, and notably, an '''<code>if</code>''' clause may be followed by an '''<code>else</code>'''.
Line 179 ⟶ 180:
</syntaxhighlight>
===Calculating π to 10000
Calculate [[pi]] using the builtin [[Inverse trigonometric functions|arctangent]] function, {{mono|a()}}:
<syntaxhighlight lang="console" highlight="3">
Line 201 ⟶ 202:
</syntaxhighlight>
With some necessary changes to accommodate bc's different syntax, and
<syntaxhighlight lang="bc">
Line 216 ⟶ 217:
==Using bc in shell scripts==
bc can be used non-interactively, with input through a [[Pipeline (Unix)|pipe]]. This is useful inside [[shell script]]s. For example:
<
$ result=$(echo "scale=2; 5 * 7 /3;" | bc)
$ echo $result
11.66
</syntaxhighlight>
In contrast, note that the [[Bash (Unix shell)|bash shell]] only performs integer arithmetic, e.g.:
<
$ result=$((5 * 7 /3))
$ echo $result
11
</syntaxhighlight>
One can also use the [[Here document|here-string]] idiom (in bash, ksh, csh):
<
$ bc -l <<< "5*7/3"
11.66666666666666666666
</syntaxhighlight>
==See also==
Line 244 ⟶ 245:
* [https://www.gnu.org/software/bc/manual/html_mono/bc.html GNU bc manual page]
* [https://web.archive.org/web/20090501204511/http://manpages.ubuntu.com/manpages/jaunty/en/man1/bc.1posix.html POSIX bc manual page]
* {{man|1|bc|Plan 9}}
* [http://plan9.bell-labs.com/7thEdMan/vol2/bc 7th Edition Unix bc manual page] {{Webarchive|url=https://web.archive.org/web/20061008193920/http://plan9.bell-labs.com/7thEdMan/vol2/bc |date=2006-10-08 }}
* [http://compilers.iecc.com/comparch/article/95-09-015 A comp.compilers article on the design and implementation of C-bc]
* [http://minnie.tuhs.org/cgi-bin/utree.pl?file=V6/usr/source/s1/bc.y 6th Edition Unix bc source code], the first release of bc, from May 1975, compiling bc syntax into dc syntax
* [http://ftp.gnu.org/gnu/bc/ GNU bc source code]
{{Refend}}
==External links==
{{Wikibooks|Guide to Unix|Commands}}
* [https://doi.acm.org/10.1145/152923.152925 Dittmer, I. 1993. Error in Unix commands dc and bc for multiple-precision-arithmetic. SIGNUM Newsl. 28, 2 (Apr. 1993), 8–11.]
* [http://www.phodd.net
* [https://www.gnu.org/software/bc/ GNU bc] (and an [http://alpha.gnu.org/gnu/bc/ alpha version]) from the Free Software Foundation
* [https://web.archive.org/web/20160222234922/http://gnuwin32.sourceforge.net/packages/bc.htm bc for Windows] from [[GnuWin32]]
* [https://github.com/gavinhoward/bc Gavin Howard bc] - another open source implementation of bc by Gavin Howard with GNU and BSD extensions
* [https://web.archive.org/web/20160304084708/http://x-bc.sourceforge.net/ X-bc] - A Graphical User Interface to bc
** [https://web.archive.org/web/20160304092132/http://x-bc.sourceforge.net/
** [https://web.archive.org/web/20160304081309/http://x-bc.sourceforge.net/scientific_constants_bc.html scientific_constants.bc] - contains particle masses, basic constants, such as speed of light in the vacuum and the gravitational constant
{{Unix commands}}
{{Plan 9 commands}}
[[Category:Software calculators]]
Line 268 ⟶ 272:
[[Category:Standard Unix programs]]
[[Category:Unix SUS2008 utilities]]
[[Category:Plan 9 commands]]
|