|
|
1.1 ! root 1: .\" Copyright (c) 1990 Regents of the University of California. ! 2: .\" All rights reserved. The Berkeley software License Agreement ! 3: .\" specifies the terms and conditions for redistribution. ! 4: .\" ! 5: .\" @(#)bc.1 6.6 (Berkeley) 7/24/90 ! 6: .\" ! 7: .Dd July 24, 1990 ! 8: .Dt BC 1 ! 9: .Os ATT 7th ! 10: .Sh NAME ! 11: .Nm bc ! 12: .Nd arbitrary-precision arithmetic language and calculator ! 13: .Sh SYNOPSIS ! 14: .Nm bc ! 15: .Op Fl c ! 16: .Op Fl l ! 17: .Ar ! 18: .Sh DESCRIPTION ! 19: .Nm Bc ! 20: is an interactive processor for a language which resembles ! 21: C but provides unlimited precision arithmetic. ! 22: It takes input from any files given, then reads ! 23: the standard input. ! 24: The ! 25: .Tp Fl l ! 26: allow specification ! 27: of an arbitrary precision math library. ! 28: .Tp Fl c ! 29: .Nm Bc ! 30: is actually a preprocessor for ! 31: .Ar dc 1 , ! 32: which it invokes automatically, unless the ! 33: .Fl c ! 34: compile only. ! 35: option is present. ! 36: In this case the ! 37: .Ar dc ! 38: input is sent to the standard output instead. ! 39: .Tp ! 40: .Pp ! 41: The syntax for ! 42: .Nm bc ! 43: programs is as follows; ! 44: L means letter a-z, ! 45: E means expression, S means statement. ! 46: .Pp ! 47: Comments ! 48: .Ds I ! 49: are enclosed in /* and */. ! 50: .De ! 51: .Pp ! 52: Names ! 53: .Ds I ! 54: simple variables: L ! 55: array elements: L [ E ] ! 56: The words `ibase', `obase', and `scale' ! 57: .De ! 58: .Pp ! 59: Other operands ! 60: .Ds I ! 61: arbitrarily long numbers with optional sign and decimal point. ! 62: \&( E \&) ! 63: sqrt ( E ) ! 64: length ( E ) number of significant decimal digits ! 65: scale ( E ) number of digits right of decimal point ! 66: L ( E , ... , E ) ! 67: .De ! 68: .Pp ! 69: Operators ! 70: .Ds I ! 71: \&+ \- * / % ^ (% is remainder; ^ is power) ! 72: \&++ \-\- (prefix and postfix; apply to names) ! 73: \&== <= >= != < > ! 74: \&= += \-= *= /= %= ^= ! 75: .De ! 76: .Pp ! 77: Statements ! 78: .Ds I ! 79: E ! 80: { S ; ... ; S } ! 81: if ( E ) S ! 82: while ( E ) S ! 83: for ( E ; E ; E ) S ! 84: null statement ! 85: break ! 86: quit ! 87: .De ! 88: .Pp ! 89: Function definitions ! 90: .Ds I ! 91: define L ( L ,..., L ) { ! 92: auto L, ... , L ! 93: S; ... S ! 94: return ( E ) ! 95: } ! 96: .De ! 97: .Pp ! 98: Functions in ! 99: .Fl l ! 100: math library ! 101: .Dw j(n,x) ! 102: .Dp s(x) ! 103: sine ! 104: .Dp c(x) ! 105: cosine ! 106: .Dp e(x) ! 107: exponential ! 108: .Dp l(x) ! 109: log ! 110: .Dp a(x) ! 111: arctangent ! 112: .Dp j(n,x) ! 113: Bessel function ! 114: .Dp ! 115: .Pp ! 116: All function arguments are passed by value. ! 117: .Pp ! 118: The value of a statement that is an expression is printed ! 119: unless the main operator is an assignment. ! 120: Either semicolons or newlines may separate statements. ! 121: Assignment to ! 122: .Ar scale ! 123: influences the number of digits to be retained on arithmetic ! 124: operations in the manner of ! 125: .Xr dc 1 . ! 126: Assignments to ! 127: .Ar ibase ! 128: or ! 129: .Ar obase ! 130: set the input and output number radix respectively. ! 131: .Pp ! 132: The same letter may be used as an array, a function, ! 133: and a simple variable simultaneously. ! 134: All variables are global to the program. ! 135: `Auto' variables are pushed down during function calls. ! 136: When using arrays as function arguments ! 137: or defining them as automatic variables ! 138: empty square brackets must follow the array name. ! 139: .Pp ! 140: For example ! 141: .Pp ! 142: .Ds I ! 143: scale = 20 ! 144: define e(x){ ! 145: auto a, b, c, i, s ! 146: a = 1 ! 147: b = 1 ! 148: s = 1 ! 149: for(i=1; 1==1; i++){ ! 150: a = a*x ! 151: b = b*i ! 152: c = a/b ! 153: if(c == 0) return(s) ! 154: s = s+c ! 155: } ! 156: } ! 157: .De ! 158: .Pp ! 159: .fi ! 160: defines a function to compute an approximate value of ! 161: the exponential function and ! 162: .Pp ! 163: .Dl for(i=1; i<=10; i++) e(i) ! 164: .Pp ! 165: prints approximate values of the exponential function of ! 166: the first ten integers. ! 167: .Sh FILES ! 168: .\" /usr/lib/lib.b mathematical library ! 169: .Dw Dc(1) ! 170: .Di L ! 171: .Dp Pa dc(1) desk calculator proper ! 172: .Dp ! 173: .Sh SEE ALSO ! 174: .Xr dc 1 ! 175: .br ! 176: L. L. Cherry and R. Morris, ! 177: .Em BC \- An arbitrary precision desk-calculator language ! 178: .Sh HISTORY ! 179: The ! 180: .Nm bc ! 181: command appeared in Version 7 AT&T UNIX. ! 182: .Sh BUGS ! 183: No &&, \(or\\(or, or ! operators. ! 184: .br ! 185: .Ql For ! 186: statement must have all three E's. ! 187: .br ! 188: .Ql Quit ! 189: is interpreted when read, not when executed.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.