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