• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<!---
2
3SPDX-License-Identifier: BSD-2-Clause
4
5Copyright (c) 2018-2021 Gavin D. Howard and contributors.
6
7Redistribution and use in source and binary forms, with or without
8modification, are permitted provided that the following conditions are met:
9
10* Redistributions of source code must retain the above copyright notice, this
11  list of conditions and the following disclaimer.
12
13* Redistributions in binary form must reproduce the above copyright notice,
14  this list of conditions and the following disclaimer in the documentation
15  and/or other materials provided with the distribution.
16
17THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27POSSIBILITY OF SUCH DAMAGE.
28
29-->
30
31# NAME
32
33bc - arbitrary-precision decimal arithmetic language and calculator
34
35# SYNOPSIS
36
37**bc** [**-ghilPqRsvVw**] [**-\-global-stacks**] [**-\-help**] [**-\-interactive**] [**-\-mathlib**] [**-\-no-prompt**] [**-\-no-read-prompt**] [**-\-quiet**] [**-\-standard**] [**-\-warn**] [**-\-version**] [**-e** *expr*] [**-\-expression**=*expr*...] [**-f** *file*...] [**-\-file**=*file*...] [*file*...]
38
39# DESCRIPTION
40
41bc(1) is an interactive processor for a language first standardized in 1991 by
42POSIX. (The current standard is [here][1].) The language provides unlimited
43precision decimal arithmetic and is somewhat C-like, but there are differences.
44Such differences will be noted in this document.
45
46After parsing and handling options, this bc(1) reads any files given on the
47command line and executes them before reading from **stdin**.
48
49This bc(1) is a drop-in replacement for *any* bc(1), including (and
50especially) the GNU bc(1).
51
52# OPTIONS
53
54The following are the options that bc(1) accepts.
55
56**-g**, **-\-global-stacks**
57
58    Turns the globals **ibase**, **obase**, and **scale** into stacks.
59
60    This has the effect that a copy of the current value of all three are pushed
61    onto a stack for every function call, as well as popped when every function
62    returns. This means that functions can assign to any and all of those
63    globals without worrying that the change will affect other functions.
64    Thus, a hypothetical function named **output(x,b)** that simply printed
65    **x** in base **b** could be written like this:
66
67        define void output(x, b) {
68            obase=b
69            x
70        }
71
72    instead of like this:
73
74        define void output(x, b) {
75            auto c
76            c=obase
77            obase=b
78            x
79            obase=c
80        }
81
82    This makes writing functions much easier.
83
84    However, since using this flag means that functions cannot set **ibase**,
85    **obase**, or **scale** globally, functions that are made to do so cannot
86    work anymore. There are two possible use cases for that, and each has a
87    solution.
88
89    First, if a function is called on startup to turn bc(1) into a number
90    converter, it is possible to replace that capability with various shell
91    aliases. Examples:
92
93        alias d2o="bc -e ibase=A -e obase=8"
94        alias h2b="bc -e ibase=G -e obase=2"
95
96    Second, if the purpose of a function is to set **ibase**, **obase**, or
97    **scale** globally for any other purpose, it could be split into one to
98    three functions (based on how many globals it sets) and each of those
99    functions could return the desired value for a global.
100
101    If the behavior of this option is desired for every run of bc(1), then users
102    could make sure to define **BC_ENV_ARGS** and include this option (see the
103    **ENVIRONMENT VARIABLES** section for more details).
104
105    If **-s**, **-w**, or any equivalents are used, this option is ignored.
106
107    This is a **non-portable extension**.
108
109**-h**, **-\-help**
110
111:   Prints a usage message and quits.
112
113**-i**, **-\-interactive**
114
115:   Forces interactive mode. (See the **INTERACTIVE MODE** section.)
116
117    This is a **non-portable extension**.
118
119**-l**, **-\-mathlib**
120
121:   Sets **scale** (see the **SYNTAX** section) to **20** and loads the included
122    math library before running any code, including any expressions or files
123    specified on the command line.
124
125    To learn what is in the library, see the **LIBRARY** section.
126
127**-P**, **-\-no-prompt**
128
129:   This option is a no-op.
130
131    This is a **non-portable extension**.
132
133**-R**, **-\-no-read-prompt**
134
135:   Because bc(1) was built without support for prompts, this option is a no-op.
136
137    This is a **non-portable extension**.
138
139**-q**, **-\-quiet**
140
141:   This option is for compatibility with the [GNU bc(1)][2]; it is a no-op.
142    Without this option, GNU bc(1) prints a copyright header. This bc(1) only
143    prints the copyright header if one or more of the **-v**, **-V**, or
144    **-\-version** options are given.
145
146    This is a **non-portable extension**.
147
148**-s**, **-\-standard**
149
150:   Process exactly the language defined by the [standard][1] and error if any
151    extensions are used.
152
153    This is a **non-portable extension**.
154
155**-v**, **-V**, **-\-version**
156
157:   Print the version information (copyright header) and exit.
158
159    This is a **non-portable extension**.
160
161**-w**, **-\-warn**
162
163:   Like **-s** and **-\-standard**, except that warnings (and not errors) are
164    printed for non-standard extensions and execution continues normally.
165
166    This is a **non-portable extension**.
167
168**-e** *expr*, **-\-expression**=*expr*
169
170:   Evaluates *expr*. If multiple expressions are given, they are evaluated in
171    order. If files are given as well (see below), the expressions and files are
172    evaluated in the order given. This means that if a file is given before an
173    expression, the file is read in and evaluated first.
174
175    If this option is given on the command-line (i.e., not in **BC_ENV_ARGS**,
176    see the **ENVIRONMENT VARIABLES** section), then after processing all
177    expressions and files, bc(1) will exit, unless **-** (**stdin**) was given
178    as an argument at least once to **-f** or **-\-file**, whether on the
179    command-line or in **BC_ENV_ARGS**. However, if any other **-e**,
180    **-\-expression**, **-f**, or **-\-file** arguments are given after **-f-**
181    or equivalent is given, bc(1) will give a fatal error and exit.
182
183    This is a **non-portable extension**.
184
185**-f** *file*, **-\-file**=*file*
186
187:   Reads in *file* and evaluates it, line by line, as though it were read
188    through **stdin**. If expressions are also given (see above), the
189    expressions are evaluated in the order given.
190
191    If this option is given on the command-line (i.e., not in **BC_ENV_ARGS**,
192    see the **ENVIRONMENT VARIABLES** section), then after processing all
193    expressions and files, bc(1) will exit, unless **-** (**stdin**) was given
194    as an argument at least once to **-f** or **-\-file**. However, if any other
195    **-e**, **-\-expression**, **-f**, or **-\-file** arguments are given after
196    **-f-** or equivalent is given, bc(1) will give a fatal error and exit.
197
198    This is a **non-portable extension**.
199
200All long options are **non-portable extensions**.
201
202# STDOUT
203
204Any non-error output is written to **stdout**. In addition, if history (see the
205**HISTORY** section) and the prompt (see the **TTY MODE** section) are enabled,
206both are output to **stdout**.
207
208**Note**: Unlike other bc(1) implementations, this bc(1) will issue a fatal
209error (see the **EXIT STATUS** section) if it cannot write to **stdout**, so if
210**stdout** is closed, as in **bc <file> >&-**, it will quit with an error. This
211is done so that bc(1) can report problems when **stdout** is redirected to a
212file.
213
214If there are scripts that depend on the behavior of other bc(1) implementations,
215it is recommended that those scripts be changed to redirect **stdout** to
216**/dev/null**.
217
218# STDERR
219
220Any error output is written to **stderr**.
221
222**Note**: Unlike other bc(1) implementations, this bc(1) will issue a fatal
223error (see the **EXIT STATUS** section) if it cannot write to **stderr**, so if
224**stderr** is closed, as in **bc <file> 2>&-**, it will quit with an error. This
225is done so that bc(1) can exit with an error code when **stderr** is redirected
226to a file.
227
228If there are scripts that depend on the behavior of other bc(1) implementations,
229it is recommended that those scripts be changed to redirect **stderr** to
230**/dev/null**.
231
232# SYNTAX
233
234The syntax for bc(1) programs is mostly C-like, with some differences. This
235bc(1) follows the [POSIX standard][1], which is a much more thorough resource
236for the language this bc(1) accepts. This section is meant to be a summary and a
237listing of all the extensions to the standard.
238
239In the sections below, **E** means expression, **S** means statement, and **I**
240means identifier.
241
242Identifiers (**I**) start with a lowercase letter and can be followed by any
243number (up to **BC_NAME_MAX-1**) of lowercase letters (**a-z**), digits
244(**0-9**), and underscores (**\_**). The regex is **\[a-z\]\[a-z0-9\_\]\***.
245Identifiers with more than one character (letter) are a
246**non-portable extension**.
247
248**ibase** is a global variable determining how to interpret constant numbers. It
249is the "input" base, or the number base used for interpreting input numbers.
250**ibase** is initially **10**. If the **-s** (**-\-standard**) and **-w**
251(**-\-warn**) flags were not given on the command line, the max allowable value
252for **ibase** is **36**. Otherwise, it is **16**. The min allowable value for
253**ibase** is **2**. The max allowable value for **ibase** can be queried in
254bc(1) programs with the **maxibase()** built-in function.
255
256**obase** is a global variable determining how to output results. It is the
257"output" base, or the number base used for outputting numbers. **obase** is
258initially **10**. The max allowable value for **obase** is **BC_BASE_MAX** and
259can be queried in bc(1) programs with the **maxobase()** built-in function. The
260min allowable value for **obase** is **2**. Values are output in the specified
261base.
262
263The *scale* of an expression is the number of digits in the result of the
264expression right of the decimal point, and **scale** is a global variable that
265sets the precision of any operations, with exceptions. **scale** is initially
266**0**. **scale** cannot be negative. The max allowable value for **scale** is
267**BC_SCALE_MAX** and can be queried in bc(1) programs with the **maxscale()**
268built-in function.
269
270bc(1) has both *global* variables and *local* variables. All *local*
271variables are local to the function; they are parameters or are introduced in
272the **auto** list of a function (see the **FUNCTIONS** section). If a variable
273is accessed which is not a parameter or in the **auto** list, it is assumed to
274be *global*. If a parent function has a *local* variable version of a variable
275that a child function considers *global*, the value of that *global* variable in
276the child function is the value of the variable in the parent function, not the
277value of the actual *global* variable.
278
279All of the above applies to arrays as well.
280
281The value of a statement that is an expression (i.e., any of the named
282expressions or operands) is printed unless the lowest precedence operator is an
283assignment operator *and* the expression is notsurrounded by parentheses.
284
285The value that is printed is also assigned to the special variable **last**. A
286single dot (**.**) may also be used as a synonym for **last**. These are
287**non-portable extensions**.
288
289Either semicolons or newlines may separate statements.
290
291## Comments
292
293There are two kinds of comments:
294
2951.	Block comments are enclosed in **/\*** and **\*/**.
2962.	Line comments go from **#** until, and not including, the next newline. This
297	is a **non-portable extension**.
298
299## Named Expressions
300
301The following are named expressions in bc(1):
302
3031.	Variables: **I**
3042.	Array Elements: **I[E]**
3053.	**ibase**
3064.	**obase**
3075.	**scale**
3086.	**last** or a single dot (**.**)
309
310Number 6 is a **non-portable extension**.
311
312Variables and arrays do not interfere; users can have arrays named the same as
313variables. This also applies to functions (see the **FUNCTIONS** section), so a
314user can have a variable, array, and function that all have the same name, and
315they will not shadow each other, whether inside of functions or not.
316
317Named expressions are required as the operand of **increment**/**decrement**
318operators  and as the left side of **assignment** operators (see the *Operators*
319subsection).
320
321## Operands
322
323The following are valid operands in bc(1):
324
3251.	Numbers (see the *Numbers* subsection below).
3262.	Array indices (**I[E]**).
3273.	**(E)**: The value of **E** (used to change precedence).
3284.	**sqrt(E)**: The square root of **E**. **E** must be non-negative.
3295.	**length(E)**: The number of significant decimal digits in **E**.
3306.	**length(I[])**: The number of elements in the array **I**. This is a
331	**non-portable extension**.
3327.	**scale(E)**: The *scale* of **E**.
3338.	**abs(E)**: The absolute value of **E**. This is a **non-portable
334	extension**.
3359.	**I()**, **I(E)**, **I(E, E)**, and so on, where **I** is an identifier for
336	a non-**void** function (see the *Void Functions* subsection of the
337	**FUNCTIONS** section). The **E** argument(s) may also be arrays of the form
338	**I[]**, which will automatically be turned into array references (see the
339	*Array References* subsection of the **FUNCTIONS** section) if the
340	corresponding parameter in the function definition is an array reference.
34110.	**read()**: Reads a line from **stdin** and uses that as an expression. The
342	result of that expression is the result of the **read()** operand. This is a
343	**non-portable extension**.
34411.	**maxibase()**: The max allowable **ibase**. This is a **non-portable
345	extension**.
34612.	**maxobase()**: The max allowable **obase**. This is a **non-portable
347	extension**.
34813.	**maxscale()**: The max allowable **scale**. This is a **non-portable
349	extension**.
350
351## Numbers
352
353Numbers are strings made up of digits, uppercase letters, and at most **1**
354period for a radix. Numbers can have up to **BC_NUM_MAX** digits. Uppercase
355letters are equal to **9** + their position in the alphabet (i.e., **A** equals
356**10**, or **9+1**). If a digit or letter makes no sense with the current value
357of **ibase**, they are set to the value of the highest valid digit in **ibase**.
358
359Single-character numbers (i.e., **A** alone) take the value that they would have
360if they were valid digits, regardless of the value of **ibase**. This means that
361**A** alone always equals decimal **10** and **Z** alone always equals decimal
362**35**.
363
364## Operators
365
366The following arithmetic and logical operators can be used. They are listed in
367order of decreasing precedence. Operators in the same group have the same
368precedence.
369
370**++** **-\-**
371
372:   Type: Prefix and Postfix
373
374    Associativity: None
375
376    Description: **increment**, **decrement**
377
378**-** **!**
379
380:   Type: Prefix
381
382    Associativity: None
383
384    Description: **negation**, **boolean not**
385
386**\^**
387
388:   Type: Binary
389
390    Associativity: Right
391
392    Description: **power**
393
394**\*** **/** **%**
395
396:   Type: Binary
397
398    Associativity: Left
399
400    Description: **multiply**, **divide**, **modulus**
401
402**+** **-**
403
404:   Type: Binary
405
406    Associativity: Left
407
408    Description: **add**, **subtract**
409
410**=** **+=** **-=** **\*=** **/=** **%=** **\^=**
411
412:   Type: Binary
413
414    Associativity: Right
415
416    Description: **assignment**
417
418**==** **\<=** **\>=** **!=** **\<** **\>**
419
420:   Type: Binary
421
422    Associativity: Left
423
424    Description: **relational**
425
426**&&**
427
428:   Type: Binary
429
430    Associativity: Left
431
432    Description: **boolean and**
433
434**||**
435
436:   Type: Binary
437
438    Associativity: Left
439
440    Description: **boolean or**
441
442The operators will be described in more detail below.
443
444**++** **-\-**
445
446:   The prefix and postfix **increment** and **decrement** operators behave
447    exactly like they would in C. They require a named expression (see the
448    *Named Expressions* subsection) as an operand.
449
450    The prefix versions of these operators are more efficient; use them where
451    possible.
452
453**-**
454
455:   The **negation** operator returns **0** if a user attempts to negate any
456    expression with the value **0**. Otherwise, a copy of the expression with
457    its sign flipped is returned.
458
459**!**
460
461:   The **boolean not** operator returns **1** if the expression is **0**, or
462    **0** otherwise.
463
464    This is a **non-portable extension**.
465
466**\^**
467
468:   The **power** operator (not the **exclusive or** operator, as it would be in
469    C) takes two expressions and raises the first to the power of the value of
470    the second. The *scale* of the result is equal to **scale**.
471
472    The second expression must be an integer (no *scale*), and if it is
473    negative, the first value must be non-zero.
474
475**\***
476
477:   The **multiply** operator takes two expressions, multiplies them, and
478    returns the product. If **a** is the *scale* of the first expression and
479    **b** is the *scale* of the second expression, the *scale* of the result is
480    equal to **min(a+b,max(scale,a,b))** where **min()** and **max()** return
481    the obvious values.
482
483**/**
484
485:   The **divide** operator takes two expressions, divides them, and returns the
486    quotient. The *scale* of the result shall be the value of **scale**.
487
488    The second expression must be non-zero.
489
490**%**
491
492:   The **modulus** operator takes two expressions, **a** and **b**, and
493    evaluates them by 1) Computing **a/b** to current **scale** and 2) Using the
494    result of step 1 to calculate **a-(a/b)\*b** to *scale*
495    **max(scale+scale(b),scale(a))**.
496
497    The second expression must be non-zero.
498
499**+**
500
501:   The **add** operator takes two expressions, **a** and **b**, and returns the
502    sum, with a *scale* equal to the max of the *scale*s of **a** and **b**.
503
504**-**
505
506:   The **subtract** operator takes two expressions, **a** and **b**, and
507    returns the difference, with a *scale* equal to the max of the *scale*s of
508    **a** and **b**.
509
510**=** **+=** **-=** **\*=** **/=** **%=** **\^=**
511
512:   The **assignment** operators take two expressions, **a** and **b** where
513    **a** is a named expression (see the *Named Expressions* subsection).
514
515    For **=**, **b** is copied and the result is assigned to **a**. For all
516    others, **a** and **b** are applied as operands to the corresponding
517    arithmetic operator and the result is assigned to **a**.
518
519**==** **\<=** **\>=** **!=** **\<** **\>**
520
521:   The **relational** operators compare two expressions, **a** and **b**, and
522    if the relation holds, according to C language semantics, the result is
523    **1**. Otherwise, it is **0**.
524
525    Note that unlike in C, these operators have a lower precedence than the
526    **assignment** operators, which means that **a=b\>c** is interpreted as
527    **(a=b)\>c**.
528
529    Also, unlike the [standard][1] requires, these operators can appear anywhere
530    any other expressions can be used. This allowance is a
531    **non-portable extension**.
532
533**&&**
534
535:   The **boolean and** operator takes two expressions and returns **1** if both
536    expressions are non-zero, **0** otherwise.
537
538    This is *not* a short-circuit operator.
539
540    This is a **non-portable extension**.
541
542**||**
543
544:   The **boolean or** operator takes two expressions and returns **1** if one
545    of the expressions is non-zero, **0** otherwise.
546
547    This is *not* a short-circuit operator.
548
549    This is a **non-portable extension**.
550
551## Statements
552
553The following items are statements:
554
5551.	**E**
5562.	**{** **S** **;** ... **;** **S** **}**
5573.	**if** **(** **E** **)** **S**
5584.	**if** **(** **E** **)** **S** **else** **S**
5595.	**while** **(** **E** **)** **S**
5606.	**for** **(** **E** **;** **E** **;** **E** **)** **S**
5617.	An empty statement
5628.	**break**
5639.	**continue**
56410.	**quit**
56511.	**halt**
56612.	**limits**
56713.	A string of characters, enclosed in double quotes
56814.	**print** **E** **,** ... **,** **E**
56915.	**I()**, **I(E)**, **I(E, E)**, and so on, where **I** is an identifier for
570	a **void** function (see the *Void Functions* subsection of the
571	**FUNCTIONS** section). The **E** argument(s) may also be arrays of the form
572	**I[]**, which will automatically be turned into array references (see the
573	*Array References* subsection of the **FUNCTIONS** section) if the
574	corresponding parameter in the function definition is an array reference.
575
576Numbers 4, 9, 11, 12, 14, and 15 are **non-portable extensions**.
577
578Also, as a **non-portable extension**, any or all of the expressions in the
579header of a for loop may be omitted. If the condition (second expression) is
580omitted, it is assumed to be a constant **1**.
581
582The **break** statement causes a loop to stop iterating and resume execution
583immediately following a loop. This is only allowed in loops.
584
585The **continue** statement causes a loop iteration to stop early and returns to
586the start of the loop, including testing the loop condition. This is only
587allowed in loops.
588
589The **if** **else** statement does the same thing as in C.
590
591The **quit** statement causes bc(1) to quit, even if it is on a branch that will
592not be executed (it is a compile-time command).
593
594The **halt** statement causes bc(1) to quit, if it is executed. (Unlike **quit**
595if it is on a branch of an **if** statement that is not executed, bc(1) does not
596quit.)
597
598The **limits** statement prints the limits that this bc(1) is subject to. This
599is like the **quit** statement in that it is a compile-time command.
600
601An expression by itself is evaluated and printed, followed by a newline.
602
603## Print Statement
604
605The "expressions" in a **print** statement may also be strings. If they are, there
606are backslash escape sequences that are interpreted specially. What those
607sequences are, and what they cause to be printed, are shown below:
608
609-------- -------
610**\\a**  **\\a**
611**\\b**  **\\b**
612**\\\\** **\\**
613**\\e**  **\\**
614**\\f**  **\\f**
615**\\n**  **\\n**
616**\\q**  **"**
617**\\r**  **\\r**
618**\\t**  **\\t**
619-------- -------
620
621Any other character following a backslash causes the backslash and character to
622be printed as-is.
623
624Any non-string expression in a print statement shall be assigned to **last**,
625like any other expression that is printed.
626
627## Order of Evaluation
628
629All expressions in a statment are evaluated left to right, except as necessary
630to maintain order of operations. This means, for example, assuming that **i** is
631equal to **0**, in the expression
632
633    a[i++] = i++
634
635the first (or 0th) element of **a** is set to **1**, and **i** is equal to **2**
636at the end of the expression.
637
638This includes function arguments. Thus, assuming **i** is equal to **0**, this
639means that in the expression
640
641    x(i++, i++)
642
643the first argument passed to **x()** is **0**, and the second argument is **1**,
644while **i** is equal to **2** before the function starts executing.
645
646# FUNCTIONS
647
648Function definitions are as follows:
649
650```
651define I(I,...,I){
652	auto I,...,I
653	S;...;S
654	return(E)
655}
656```
657
658Any **I** in the parameter list or **auto** list may be replaced with **I[]** to
659make a parameter or **auto** var an array, and any **I** in the parameter list
660may be replaced with **\*I[]** to make a parameter an array reference. Callers
661of functions that take array references should not put an asterisk in the call;
662they must be called with just **I[]** like normal array parameters and will be
663automatically converted into references.
664
665As a **non-portable extension**, the opening brace of a **define** statement may
666appear on the next line.
667
668As a **non-portable extension**, the return statement may also be in one of the
669following forms:
670
6711.	**return**
6722.	**return** **(** **)**
6733.	**return** **E**
674
675The first two, or not specifying a **return** statement, is equivalent to
676**return (0)**, unless the function is a **void** function (see the *Void
677Functions* subsection below).
678
679## Void Functions
680
681Functions can also be **void** functions, defined as follows:
682
683```
684define void I(I,...,I){
685	auto I,...,I
686	S;...;S
687	return
688}
689```
690
691They can only be used as standalone expressions, where such an expression would
692be printed alone, except in a print statement.
693
694Void functions can only use the first two **return** statements listed above.
695They can also omit the return statement entirely.
696
697The word "void" is not treated as a keyword; it is still possible to have
698variables, arrays, and functions named **void**. The word "void" is only
699treated specially right after the **define** keyword.
700
701This is a **non-portable extension**.
702
703## Array References
704
705For any array in the parameter list, if the array is declared in the form
706
707```
708*I[]
709```
710
711it is a **reference**. Any changes to the array in the function are reflected,
712when the function returns, to the array that was passed in.
713
714Other than this, all function arguments are passed by value.
715
716This is a **non-portable extension**.
717
718# LIBRARY
719
720All of the functions below  are available when the **-l** or **-\-mathlib**
721command-line flags are given.
722
723## Standard Library
724
725The [standard][1] defines the following functions for the math library:
726
727**s(x)**
728
729:   Returns the sine of **x**, which is assumed to be in radians.
730
731    This is a transcendental function (see the *Transcendental Functions*
732    subsection below).
733
734**c(x)**
735
736:   Returns the cosine of **x**, which is assumed to be in radians.
737
738    This is a transcendental function (see the *Transcendental Functions*
739    subsection below).
740
741**a(x)**
742
743:   Returns the arctangent of **x**, in radians.
744
745    This is a transcendental function (see the *Transcendental Functions*
746    subsection below).
747
748**l(x)**
749
750:   Returns the natural logarithm of **x**.
751
752    This is a transcendental function (see the *Transcendental Functions*
753    subsection below).
754
755**e(x)**
756
757:   Returns the mathematical constant **e** raised to the power of **x**.
758
759    This is a transcendental function (see the *Transcendental Functions*
760    subsection below).
761
762**j(x, n)**
763
764:   Returns the bessel integer order **n** (truncated) of **x**.
765
766    This is a transcendental function (see the *Transcendental Functions*
767    subsection below).
768
769## Transcendental Functions
770
771All transcendental functions can return slightly inaccurate results (up to 1
772[ULP][4]). This is unavoidable, and [this article][5] explains why it is
773impossible and unnecessary to calculate exact results for the transcendental
774functions.
775
776Because of the possible inaccuracy, I recommend that users call those functions
777with the precision (**scale**) set to at least 1 higher than is necessary. If
778exact results are *absolutely* required, users can double the precision
779(**scale**) and then truncate.
780
781The transcendental functions in the standard math library are:
782
783* **s(x)**
784* **c(x)**
785* **a(x)**
786* **l(x)**
787* **e(x)**
788* **j(x, n)**
789
790# RESET
791
792When bc(1) encounters an error or a signal that it has a non-default handler
793for, it resets. This means that several things happen.
794
795First, any functions that are executing are stopped and popped off the stack.
796The behavior is not unlike that of exceptions in programming languages. Then
797the execution point is set so that any code waiting to execute (after all
798functions returned) is skipped.
799
800Thus, when bc(1) resets, it skips any remaining code waiting to be executed.
801Then, if it is interactive mode, and the error was not a fatal error (see the
802**EXIT STATUS** section), it asks for more input; otherwise, it exits with the
803appropriate return code.
804
805Note that this reset behavior is different from the GNU bc(1), which attempts to
806start executing the statement right after the one that caused an error.
807
808# PERFORMANCE
809
810Most bc(1) implementations use **char** types to calculate the value of **1**
811decimal digit at a time, but that can be slow. This bc(1) does something
812different.
813
814It uses large integers to calculate more than **1** decimal digit at a time. If
815built in a environment where **BC_LONG_BIT** (see the **LIMITS** section) is
816**64**, then each integer has **9** decimal digits. If built in an environment
817where **BC_LONG_BIT** is **32** then each integer has **4** decimal digits. This
818value (the number of decimal digits per large integer) is called
819**BC_BASE_DIGS**.
820
821The actual values of **BC_LONG_BIT** and **BC_BASE_DIGS** can be queried with
822the **limits** statement.
823
824In addition, this bc(1) uses an even larger integer for overflow checking. This
825integer type depends on the value of **BC_LONG_BIT**, but is always at least
826twice as large as the integer type used to store digits.
827
828# LIMITS
829
830The following are the limits on bc(1):
831
832**BC_LONG_BIT**
833
834:   The number of bits in the **long** type in the environment where bc(1) was
835    built. This determines how many decimal digits can be stored in a single
836    large integer (see the **PERFORMANCE** section).
837
838**BC_BASE_DIGS**
839
840:   The number of decimal digits per large integer (see the **PERFORMANCE**
841    section). Depends on **BC_LONG_BIT**.
842
843**BC_BASE_POW**
844
845:   The max decimal number that each large integer can store (see
846    **BC_BASE_DIGS**) plus **1**. Depends on **BC_BASE_DIGS**.
847
848**BC_OVERFLOW_MAX**
849
850:   The max number that the overflow type (see the **PERFORMANCE** section) can
851    hold. Depends on **BC_LONG_BIT**.
852
853**BC_BASE_MAX**
854
855:   The maximum output base. Set at **BC_BASE_POW**.
856
857**BC_DIM_MAX**
858
859:   The maximum size of arrays. Set at **SIZE_MAX-1**.
860
861**BC_SCALE_MAX**
862
863:   The maximum **scale**. Set at **BC_OVERFLOW_MAX-1**.
864
865**BC_STRING_MAX**
866
867:   The maximum length of strings. Set at **BC_OVERFLOW_MAX-1**.
868
869**BC_NAME_MAX**
870
871:   The maximum length of identifiers. Set at **BC_OVERFLOW_MAX-1**.
872
873**BC_NUM_MAX**
874
875:   The maximum length of a number (in decimal digits), which includes digits
876    after the decimal point. Set at **BC_OVERFLOW_MAX-1**.
877
878Exponent
879
880:   The maximum allowable exponent (positive or negative). Set at
881    **BC_OVERFLOW_MAX**.
882
883Number of vars
884
885:   The maximum number of vars/arrays. Set at **SIZE_MAX-1**.
886
887The actual values can be queried with the **limits** statement.
888
889These limits are meant to be effectively non-existent; the limits are so large
890(at least on 64-bit machines) that there should not be any point at which they
891become a problem. In fact, memory should be exhausted before these limits should
892be hit.
893
894# ENVIRONMENT VARIABLES
895
896bc(1) recognizes the following environment variables:
897
898**POSIXLY_CORRECT**
899
900:   If this variable exists (no matter the contents), bc(1) behaves as if
901    the **-s** option was given.
902
903**BC_ENV_ARGS**
904
905:   This is another way to give command-line arguments to bc(1). They should be
906    in the same format as all other command-line arguments. These are always
907    processed first, so any files given in **BC_ENV_ARGS** will be processed
908    before arguments and files given on the command-line. This gives the user
909    the ability to set up "standard" options and files to be used at every
910    invocation. The most useful thing for such files to contain would be useful
911    functions that the user might want every time bc(1) runs.
912
913    The code that parses **BC_ENV_ARGS** will correctly handle quoted arguments,
914    but it does not understand escape sequences. For example, the string
915    **"/home/gavin/some bc file.bc"** will be correctly parsed, but the string
916    **"/home/gavin/some \"bc\" file.bc"** will include the backslashes.
917
918    The quote parsing will handle either kind of quotes, **'** or **"**. Thus,
919    if you have a file with any number of single quotes in the name, you can use
920    double quotes as the outside quotes, as in **"some 'bc' file.bc"**, and vice
921    versa if you have a file with double quotes. However, handling a file with
922    both kinds of quotes in **BC_ENV_ARGS** is not supported due to the
923    complexity of the parsing, though such files are still supported on the
924    command-line where the parsing is done by the shell.
925
926**BC_LINE_LENGTH**
927
928:   If this environment variable exists and contains an integer that is greater
929    than **1** and is less than **UINT16_MAX** (**2\^16-1**), bc(1) will output
930    lines to that length, including the backslash (**\\**). The default line
931    length is **70**.
932
933# EXIT STATUS
934
935bc(1) returns the following exit statuses:
936
937**0**
938
939:   No error.
940
941**1**
942
943:   A math error occurred. This follows standard practice of using **1** for
944    expected errors, since math errors will happen in the process of normal
945    execution.
946
947    Math errors include divide by **0**, taking the square root of a negative
948    number, attempting to convert a negative number to a hardware integer,
949    overflow when converting a number to a hardware integer, and attempting to
950    use a non-integer where an integer is required.
951
952    Converting to a hardware integer happens for the second operand of the power
953    (**\^**) operator and the corresponding assignment operator.
954
955**2**
956
957:   A parse error occurred.
958
959    Parse errors include unexpected **EOF**, using an invalid character, failing
960    to find the end of a string or comment, using a token where it is invalid,
961    giving an invalid expression, giving an invalid print statement, giving an
962    invalid function definition, attempting to assign to an expression that is
963    not a named expression (see the *Named Expressions* subsection of the
964    **SYNTAX** section), giving an invalid **auto** list, having a duplicate
965    **auto**/function parameter, failing to find the end of a code block,
966    attempting to return a value from a **void** function, attempting to use a
967    variable as a reference, and using any extensions when the option **-s** or
968    any equivalents were given.
969
970**3**
971
972:   A runtime error occurred.
973
974    Runtime errors include assigning an invalid number to **ibase**, **obase**,
975    or **scale**; give a bad expression to a **read()** call, calling **read()**
976    inside of a **read()** call, type errors, passing the wrong number of
977    arguments to functions, attempting to call an undefined function, and
978    attempting to use a **void** function call as a value in an expression.
979
980**4**
981
982:   A fatal error occurred.
983
984    Fatal errors include memory allocation errors, I/O errors, failing to open
985    files, attempting to use files that do not have only ASCII characters (bc(1)
986    only accepts ASCII characters), attempting to open a directory as a file,
987    and giving invalid command-line options.
988
989The exit status **4** is special; when a fatal error occurs, bc(1) always exits
990and returns **4**, no matter what mode bc(1) is in.
991
992The other statuses will only be returned when bc(1) is not in interactive mode
993(see the **INTERACTIVE MODE** section), since bc(1) resets its state (see the
994**RESET** section) and accepts more input when one of those errors occurs in
995interactive mode. This is also the case when interactive mode is forced by the
996**-i** flag or **-\-interactive** option.
997
998These exit statuses allow bc(1) to be used in shell scripting with error
999checking, and its normal behavior can be forced by using the **-i** flag or
1000**-\-interactive** option.
1001
1002# INTERACTIVE MODE
1003
1004Per the [standard][1], bc(1) has an interactive mode and a non-interactive mode.
1005Interactive mode is turned on automatically when both **stdin** and **stdout**
1006are hooked to a terminal, but the **-i** flag and **-\-interactive** option can
1007turn it on in other cases.
1008
1009In interactive mode, bc(1) attempts to recover from errors (see the **RESET**
1010section), and in normal execution, flushes **stdout** as soon as execution is
1011done for the current input.
1012
1013# TTY MODE
1014
1015If **stdin**, **stdout**, and **stderr** are all connected to a TTY, bc(1) turns
1016on "TTY mode."
1017
1018TTY mode is required for history to be enabled (see the **COMMAND LINE HISTORY**
1019section). It is also required to enable special handling for **SIGINT** signals.
1020
1021TTY mode is different from interactive mode because interactive mode is required
1022in the [bc(1) specification][1], and interactive mode requires only **stdin**
1023and **stdout** to be connected to a terminal.
1024
1025# SIGNAL HANDLING
1026
1027Sending a **SIGINT** will cause bc(1) to stop execution of the current input. If
1028bc(1) is in TTY mode (see the **TTY MODE** section), it will reset (see the
1029**RESET** section). Otherwise, it will clean up and exit.
1030
1031Note that "current input" can mean one of two things. If bc(1) is processing
1032input from **stdin** in TTY mode, it will ask for more input. If bc(1) is
1033processing input from a file in TTY mode, it will stop processing the file and
1034start processing the next file, if one exists, or ask for input from **stdin**
1035if no other file exists.
1036
1037This means that if a **SIGINT** is sent to bc(1) as it is executing a file, it
1038can seem as though bc(1) did not respond to the signal since it will immediately
1039start executing the next file. This is by design; most files that users execute
1040when interacting with bc(1) have function definitions, which are quick to parse.
1041If a file takes a long time to execute, there may be a bug in that file. The
1042rest of the files could still be executed without problem, allowing the user to
1043continue.
1044
1045**SIGTERM** and **SIGQUIT** cause bc(1) to clean up and exit, and it uses the
1046default handler for all other signals. The one exception is **SIGHUP**; in that
1047case, when bc(1) is in TTY mode, a **SIGHUP** will cause bc(1) to clean up and
1048exit.
1049
1050# COMMAND LINE HISTORY
1051
1052bc(1) supports interactive command-line editing. If bc(1) is in TTY mode (see
1053the **TTY MODE** section), history is enabled. Previous lines can be recalled
1054and edited with the arrow keys.
1055
1056**Note**: tabs are converted to 8 spaces.
1057
1058# LOCALES
1059
1060This bc(1) ships with support for adding error messages for different locales
1061and thus, supports **LC_MESSAGES**.
1062
1063# SEE ALSO
1064
1065dc(1)
1066
1067# STANDARDS
1068
1069bc(1) is compliant with the [IEEE Std 1003.1-2017 (“POSIX.1-2017”)][1]
1070specification. The flags **-efghiqsvVw**, all long options, and the extensions
1071noted above are extensions to that specification.
1072
1073Note that the specification explicitly says that bc(1) only accepts numbers that
1074use a period (**.**) as a radix point, regardless of the value of
1075**LC_NUMERIC**.
1076
1077This bc(1) supports error messages for different locales, and thus, it supports
1078**LC_MESSAGES**.
1079
1080# BUGS
1081
1082None are known. Report bugs at https://git.yzena.com/gavin/bc.
1083
1084# AUTHORS
1085
1086Gavin D. Howard <gavin@yzena.com> and contributors.
1087
1088[1]: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html
1089[2]: https://www.gnu.org/software/bc/
1090[3]: https://en.wikipedia.org/wiki/Rounding#Round_half_away_from_zero
1091[4]: https://en.wikipedia.org/wiki/Unit_in_the_last_place
1092[5]: https://people.eecs.berkeley.edu/~wkahan/LOG10HAF.TXT
1093[6]: https://en.wikipedia.org/wiki/Rounding#Rounding_away_from_zero
1094