272 lines
12 KiB
HTML
272 lines
12 KiB
HTML
<head>
|
|
<title>bc(1) - Plan 9 from User Space</title>
|
|
<meta content="text/html; charset=utf-8" http-equiv=Content-Type>
|
|
</head>
|
|
<body bgcolor=#ffffff>
|
|
<table border=0 cellpadding=0 cellspacing=0 width=100%>
|
|
<tr height=10><td>
|
|
<tr><td width=20><td>
|
|
<tr><td width=20><td><b>BC(1)</b><td align=right><b>BC(1)</b>
|
|
<tr><td width=20><td colspan=2>
|
|
<br>
|
|
<p><font size=+1><b>NAME </b></font><br>
|
|
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
|
|
|
|
bc – arbitrary-precision arithmetic language<br>
|
|
|
|
</table>
|
|
<p><font size=+1><b>SYNOPSIS </b></font><br>
|
|
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
|
|
|
|
<tt><font size=+1>bc</font></tt> [ <tt><font size=+1>−c</font></tt> ] [ <tt><font size=+1>−l</font></tt> ] [ <tt><font size=+1>−s</font></tt> ] [ <i>file ...</i> ]<br>
|
|
|
|
</table>
|
|
<p><font size=+1><b>DESCRIPTION </b></font><br>
|
|
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
|
|
|
|
<i>Bc</i> is an interactive processor for a language that resembles C
|
|
but provides arithmetic on numbers of arbitrary length with up
|
|
to 100 digits right of the decimal point. It takes input from
|
|
any files given, then reads the standard input. The <tt><font size=+1>−l</font></tt> argument
|
|
stands for the name of an arbitrary precision math library. The
|
|
<tt><font size=+1>−s
|
|
</font></tt>argument suppresses the automatic display of calculation results;
|
|
all output is via the <tt><font size=+1>print</font></tt> command.
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
|
|
|
|
The following syntax for <i>bc</i> programs is like that of C; <i>L</i> means
|
|
letter <tt><font size=+1>a</font></tt>-<tt><font size=+1>z</font></tt>, <i>E</i> means expression, <i>S</i> means statement.<br>
|
|
Lexical<br>
|
|
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
|
|
|
|
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
|
|
|
|
comments are enclosed in <tt><font size=+1>/* */<br>
|
|
</font></tt>newlines end statements<br>
|
|
|
|
</table>
|
|
|
|
</table>
|
|
Names<br>
|
|
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
|
|
|
|
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
|
|
|
|
simple variables: <i>L<br>
|
|
</i>array elements: <i>L</i><tt><font size=+1>[</font></tt><i>E</i><tt><font size=+1>]<br>
|
|
</font></tt>The words <tt><font size=+1>ibase</font></tt>, <tt><font size=+1>obase</font></tt>, and <tt><font size=+1>scale<br>
|
|
</font></tt>
|
|
</table>
|
|
|
|
</table>
|
|
Other operands<br>
|
|
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
|
|
|
|
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
|
|
|
|
arbitrarily long numbers with optional sign and decimal point.<br>
|
|
<tt><font size=+1>(</font></tt><i>E</i><tt><font size=+1>)<br>
|
|
sqrt(</font></tt><i>E</i><tt><font size=+1>)<br>
|
|
length(</font></tt><i>E</i><tt><font size=+1>)<br>
|
|
</font></tt>number of significant decimal digits<br>
|
|
<tt><font size=+1>scale(</font></tt><i>E</i><tt><font size=+1>)<br>
|
|
</font></tt>number of digits right of decimal point<br>
|
|
<i>L</i><tt><font size=+1>(</font></tt><i>E</i><tt><font size=+1>,</font></tt><i>...</i><tt><font size=+1>,</font></tt><i>E</i><tt><font size=+1>)<br>
|
|
</font></tt>function call<br>
|
|
|
|
</table>
|
|
|
|
</table>
|
|
Operators<br>
|
|
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
|
|
|
|
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
|
|
|
|
<tt><font size=+1>+ − * / % ^ </font></tt> (<tt><font size=+1>%</font></tt> is remainder; <tt><font size=+1>^</font></tt> is power)<br>
|
|
<tt><font size=+1>++ −− <br>
|
|
== <= >= != < ><br>
|
|
= += −= *= /= %= ^=<br>
|
|
</font></tt>
|
|
</table>
|
|
|
|
</table>
|
|
Statements<br>
|
|
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
|
|
|
|
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
|
|
|
|
<i>E<br>
|
|
</i><tt><font size=+1>{</font></tt> <i>S</i> <tt><font size=+1>;</font></tt> ... <tt><font size=+1>;</font></tt> <i>S</i> <tt><font size=+1>}<br>
|
|
print</font></tt> <i>E<br>
|
|
</i><tt><font size=+1>if (</font></tt> <i>E</i> <tt><font size=+1>)</font></tt> <i>S<br>
|
|
</i><tt><font size=+1>while (</font></tt> <i>E</i> <tt><font size=+1>)</font></tt> <i>S<br>
|
|
</i><tt><font size=+1>for (</font></tt> <i>E</i> <tt><font size=+1>;</font></tt> <i>E</i> <tt><font size=+1>;</font></tt> <i>E</i> <tt><font size=+1>)</font></tt> <i>S<br>
|
|
</i>null statement<br>
|
|
<tt><font size=+1>break<br>
|
|
quit<br>
|
|
"</font></tt>text<tt><font size=+1>"<br>
|
|
</font></tt>
|
|
</table>
|
|
|
|
</table>
|
|
Function definitions<br>
|
|
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
|
|
|
|
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
|
|
|
|
<tt><font size=+1>define</font></tt> <i>L</i> <tt><font size=+1>(</font></tt> <i>L</i> <tt><font size=+1>,</font></tt> ... <tt><font size=+1>,</font></tt> <i>L</i> <tt><font size=+1>){<br>
|
|
auto</font></tt> <i>L</i> <tt><font size=+1>,</font></tt> ... <tt><font size=+1>,</font></tt> <i>L<br>
|
|
S</i> <tt><font size=+1>;</font></tt> ... <tt><font size=+1>;</font></tt> <i>S<br>
|
|
</i><tt><font size=+1>return</font></tt> <i>E
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
|
|
</i>
|
|
<tt><font size=+1>}<br>
|
|
</font></tt>
|
|
</table>
|
|
|
|
</table>
|
|
Functions in<tt><font size=+1> −l</font></tt> math library<br>
|
|
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
|
|
|
|
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
|
|
|
|
<tt><font size=+1>s(</font></tt><i>x</i><tt><font size=+1>)</font></tt>sine<br>
|
|
<tt><font size=+1>c(</font></tt><i>x</i><tt><font size=+1>)</font></tt>cosine<br>
|
|
<tt><font size=+1>e(</font></tt><i>x</i><tt><font size=+1>)</font></tt>exponential<br>
|
|
<tt><font size=+1>l(</font></tt><i>x</i><tt><font size=+1>)</font></tt>log<br>
|
|
<tt><font size=+1>a(</font></tt><i>x</i><tt><font size=+1>)</font></tt>arctangent<br>
|
|
<tt><font size=+1>j(</font></tt><i>n, x</i><tt><font size=+1>)<br>
|
|
</font></tt>Bessel function<br>
|
|
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
|
|
|
|
|
|
</table>
|
|
|
|
</table>
|
|
All function arguments are passed by value.
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
|
|
|
|
The value of an expression at the top level is printed unless
|
|
the main operator is an assignment or the <tt><font size=+1>−s</font></tt> command line argument
|
|
is given. Text in quotes, which may include newlines, is always
|
|
printed. Either semicolons or newlines may separate statements.
|
|
Assignment to <tt><font size=+1>scale</font></tt> influences the number of digits to
|
|
be retained on arithmetic operations in the manner of <a href="../man1/dc.html"><i>dc</i>(1)</a>. Assignments
|
|
to <tt><font size=+1>ibase</font></tt> or <tt><font size=+1>obase</font></tt> set the input and output number radix respectively.
|
|
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
|
|
|
|
The same letter may be used as an array, a function, and a simple
|
|
variable simultaneously. All variables are global to the program.
|
|
Automatic variables are pushed down during function calls. In
|
|
a declaration of an array as a function argument or automatic
|
|
variable empty square brackets must follow the array name.
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
|
|
|
|
<i>Bc</i> is actually a preprocessor for <a href="../man1/dc.html"><i>dc</i>(1)</a>, which it invokes automatically,
|
|
unless the <tt><font size=+1>−c</font></tt> (compile only) option is present. In this case the
|
|
<i>dc</i> input is sent to the standard output instead.<br>
|
|
|
|
</table>
|
|
<p><font size=+1><b>EXAMPLE </b></font><br>
|
|
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
|
|
|
|
Define a function to compute an approximate value of the exponential.
|
|
Use it to print 10 values. (The exponential function in the library
|
|
gives better answers.)
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
|
|
|
|
<tt><font size=+1>scale = 20<br>
|
|
define e(x) {<br>
|
|
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
|
|
|
|
auto a, b, c, i, s<br>
|
|
a = 1<br>
|
|
b = 1<br>
|
|
s = 1<br>
|
|
for(i=1; 1; i++) {<br>
|
|
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
|
|
|
|
a *= x<br>
|
|
b *= i<br>
|
|
c = a/b<br>
|
|
if(c == 0) return s<br>
|
|
s += c<br>
|
|
|
|
</table>
|
|
}<br>
|
|
|
|
</table>
|
|
}<br>
|
|
for(i=1; i<=10; i++) print e(i)<br>
|
|
</font></tt>
|
|
</table>
|
|
<p><font size=+1><b>FILES </b></font><br>
|
|
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
|
|
|
|
<tt><font size=+1>/usr/local/plan9/lib/bclib</font></tt> mathematical library<br>
|
|
|
|
</table>
|
|
<p><font size=+1><b>SOURCE </b></font><br>
|
|
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
|
|
|
|
<tt><font size=+1>/usr/local/plan9/src/cmd/bc.y<br>
|
|
</font></tt>
|
|
</table>
|
|
<p><font size=+1><b>SEE ALSO </b></font><br>
|
|
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
|
|
|
|
<a href="../man1/dc.html"><i>dc</i>(1)</a>, <a href="../man1/hoc.html"><i>hoc</i>(1)</a><br>
|
|
|
|
</table>
|
|
<p><font size=+1><b>BUGS </b></font><br>
|
|
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
|
|
|
|
No <tt><font size=+1>&&</font></tt>, <tt><font size=+1>||</font></tt>, or <tt><font size=+1>!</font></tt> operators.
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
|
|
|
|
A <tt><font size=+1>for</font></tt> statement must have all three <tt><font size=+1>E</font></tt>s.
|
|
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
|
|
|
|
A <tt><font size=+1>quit</font></tt> is interpreted when read, not when executed.<br>
|
|
|
|
</table>
|
|
|
|
<td width=20>
|
|
<tr height=20><td>
|
|
</table>
|
|
<!-- TRAILER -->
|
|
<table border=0 cellpadding=0 cellspacing=0 width=100%>
|
|
<tr height=15><td width=10><td><td width=10>
|
|
<tr><td><td>
|
|
<center>
|
|
<a href="../../"><img src="../../dist/spaceglenda100.png" alt="Space Glenda" border=1></a>
|
|
</center>
|
|
</table>
|
|
<!-- TRAILER -->
|
|
</body></html>
|