bc(1) General Commands Manual bc(1) bc - bc [ -hlwsqv ] [-] [ ... ] bc . C. . . bc . bc . . ( bc .) bc bc POSIX. . . . -h, --help . -i, --interactive . -l, --mathlib . -w, --warn POSIX bc. -s, --standard POSIX bc . -q, --quiet GNU bc . -v, --version . bc . . . . ( .) : . bc . : .000001 6 6. 1935.000 7 3. : . . . . ( POSIX bc .) ([]). : scale ibase obase last. scale . scale 0. ibase obase . 10. last () . . . bc /* */. . ( .) . bc . # . . . . "". . ( .) . bc ibase. ( .) ibase 2 36. ( 16 .) ibase 2 36. 0-9 A-Z. (: .) ibase. ( A = 10.) bc ibase ibase-1. ZZZ 3 . . . . scale. scale 0 C. "expr" "var" . [expr] . - expr . ++ var . -- var . var ++ . var -- . expr + expr . expr - expr . expr * expr . expr / expr . scale. expr % expr "" . a%b a/b scale. a-(a/b)*b scale+scale(b) scale(a). scale . expr ^ expr . . ( .) scale . scale . ( scale(a^b) = min(scale(a)*b, max( scale, scale(a))).) expr^0 1. ( expr ) . var = expr . var = expr "var = var expr" "var" . "var" . 0 1 0 1 . . ( POSIX bc if while for .) expr1 < expr2 1 expr1 expr2. expr1 <= expr2 1 expr1 expr2. expr1 > expr2 1 expr1 expr2. expr1 >= expr2 1 expr1 expr2. expr1 == expr2 1 expr1 expr2. expr1 != expr2 1 expr1 expr2. . (POSIX bc ). 0 1 ( false true) . : !expr 1 expr 0. expr && expr 1 . expr || expr 1 . : ( ) || && ! + - * / % ^ - ++ -- bc POSIX . . : a = 3 < 5 C "3 < 5" ( 1) "a". bc 3 "a" 3 5. . bc. . "()". . : length ( expression ) length . read ( ) read ( ) . . . read ibase . scale ( expression ) scale (expression). sqrt ( expression ) sqrt . . (STATEMENTS) ( ) . bc " ". . bc. . . . "\" bc . . bc : ( ([]) ). expression . " ..." . . . "a=1" "(a=1)" . obase. obase 2 BC_BASE_MAX. ( LIMITS.) 2 16 . 16 bc 10. . "obase-1". . "\" . 70. bc last. . last . last. ( (.) last.) string . . . . print list print ( ) . "list" . . . last. . (\). bc "a" ( ) "b" ( ) "f" ( ) "n" ( ) "r" ( ) "q" ( ) "t" () "\" ( ). . { statement_list } . . if ( expression ) statement1 [else statement2] if statement1 statement2 . statement1. statement2 0 statement2. ( else ). while ( expression ) statement while . . break. for ( [expression1] ; [expression2] ; [expression3] ) statement for . Expression1 . Expression2 . . . expression3 expression2. expression1 expression3 . expression2 1 expression2. ( . POSIX bc .) for: expression1; while (expression2) { statement; expression3; } break while for . continue continue ( ) for . halt halt ( ) bc . "if (0 == 1) halt" bc halt . return 0 . ( ). return ( expression ) . ( ). . (PSEUDO STATEMENTS) . . "". limits bc. . quit quit bc quit. "if (0 == 1) quit" bc. warranty . . . bc . "" . . . : define name ( parameters ) { newline auto_list statement_list } "name(parameters)". (). . . "name[]". . . . . . . auto_list "". auto ( ) "auto name, ... ;". ( ). name . . . . ( ). . A B B A B . bc . bc. . . . "return" 0 . "return ( expression )" . "return (0)" . 0 return . ibase. ibase . ibase read ibase . . . define . bc . . define d (n) { return (2*n); } define d (n) { return (2*n); } void. (void) . . void define . . define py (y) { print "--->", y, "<---", "\n"; } define void px (x) { print "--->", x, "<---", "\n"; } py(1) --->1<--- 0 px(1) --->1<--- py (void) py(1) . . px(1) . . "*name[]". . (MATH LIBRARY) bc -l 20. . : s (x) (sine) x x . c (x) (cosine) x x . a (x) (arctangent) x . l (x) x. e (x) e x. j (n,x) (Bessel) n x. /bin/sh "pi" pi. pi=$(echo "scale=10; 4*a(1)" | bc -l) . POSIX bc. scale = 20 /* e^x = (e^(x/2))^2 x : e^x = 1 + x + x^2/2! + x^3/3! + ... */ define e(x) { auto a, d, e, f, i, m, v, z /* x. */ if (x<0) { m = 1 x = -x } /* x . */ z = scale; scale = 4 + z + .44*x; while (x > 1) { f += 1; x /= 2; } /* . */ v = 1+x a = x d = 1 for (i=2; 1; i++) { e = (a *= x) / (d *= i) if (e == 0) { if (f>0) while (f--) v = v*v; scale = z if (m) return (1/v); return (v/1); } v += e } } bc . . scale=2 print "\n !\n" print " .\n" print " 0.\n\n" print " "; bal = read() bal /= 1 print "\n" while (1) { " = "; bal " "; trans = read() if (trans == 0) break; bal -= trans bal /= 1 } quit (factorial) . define f (x) { if (x <= 1) return (1); return (f(x-1) * x); } READLINE LIBEDIT GNU bc ( ) GNU readline BSD libedit. bc. . bc . history . readline -1 . history . 0 . 100. GNU readline history BSD libedit. readline libedit . bc POSIX P1003.2/D11 . dc(1). (byte code) . " " (-c) . . . . LANG POSIX LANG LC_. names () bc POSIX . (underscore). (Strings) NUL. POSIX . last POSIX bc last. bc (.) . (comparisons) POSIX bc if while for. . if else bc POSIX else. for bc POSIX for. &&, ||, ! bc POSIX . read bc POSIX read. print bc POSIX print. continue bc POSIX continue. return bc POSIX return. bc POSIX () . POSIX . ( .) bc . bc POSIX define auto . =+, =-, =*, =/, =%, =^ bc POSIX " " . . limits . " " "a =- 1" a 1 a -1. bc . "x=1 3" 13 x. bc. . . . . . a = 1 b = 2 { a = 1 b = 2 } . . . SIGINT ( control-C ) . " " . bc . (non-auto) . . SIGINT bc . bc . . limits . BC_BASE_MAX 10^9 . 16. BC_DIM_MAX 65535 . . BC_SCALE_MAX INT_MAX . INT_MAX . BC_STRING_MAX INT_MAX . (^) LONG_MAX. 32767 . bc: POSIXLY_CORRECT -s. BC_ENV_ARGS bc. . . "" bc. bc. BC_LINE_LENGTH . . . 3 70. bc . . . bug-bc@gnu.org. "bc" ":". Philip A. Nelson philnelson@acm.org Steve Sommars (Steve.Sommars@att.com) . . . 3 . . : . 10 2025 bc(1)