|
|
1.1 ! root 1: .TH DC 1 ! 2: .CT 1 numbers ! 3: .SH NAME ! 4: dc \- desk calculator ! 5: .SH SYNOPSIS ! 6: .B dc ! 7: [ ! 8: .I file ! 9: ] ! 10: .SH DESCRIPTION ! 11: .I Dc ! 12: is an arbitrary precision desk calculator. ! 13: Ordinarily it operates on decimal integers, ! 14: but one may specify an input base, output base, ! 15: and a number of fractional digits to be maintained. ! 16: The overall structure of ! 17: .I dc ! 18: is ! 19: a stacking (reverse Polish) calculator. ! 20: If an argument is given, ! 21: input is taken from that file until its end, ! 22: then from the standard input. ! 23: The following constructions are recognized: ! 24: .TP ! 25: number ! 26: The value of the number is pushed on the stack. ! 27: A number is an unbroken string of the digits ! 28: .BR 0 - 9A - F . ! 29: It may be preceded by an underscore _ to input a ! 30: negative number. ! 31: Numbers may contain decimal points. ! 32: .TP ! 33: .L ! 34: + - / * % ^ ! 35: Add ! 36: .LR + , ! 37: subtract ! 38: .LR - , ! 39: multiply ! 40: .LR * , ! 41: divide ! 42: .LR / , ! 43: remainder ! 44: .LR % , ! 45: or exponentiate ! 46: .L ^ ! 47: the top two values on the stack. ! 48: The two entries are popped off the stack; ! 49: the result is pushed on the stack in their place. ! 50: Any fractional part of an exponent is ignored. ! 51: .TP ! 52: .BI s x ! 53: .br ! 54: .ns ! 55: .TP ! 56: .BI S x ! 57: Pop the top of the stack and store into ! 58: a register named ! 59: .I x, ! 60: where ! 61: .I x ! 62: may be any character. ! 63: Under operation ! 64: .B S ! 65: register ! 66: .I x ! 67: is treated as a stack and the value is pushed on it. ! 68: .TP ! 69: .BI l x ! 70: .br ! 71: .ns ! 72: .TP ! 73: .BI L x ! 74: Push the value in register ! 75: .I x ! 76: onto the stack. ! 77: The register ! 78: .I x ! 79: is not altered. ! 80: All registers start with zero value. ! 81: Under operation ! 82: .B L ! 83: register ! 84: .I x ! 85: is treated as a stack and its top value is popped onto the main stack. ! 86: .TP ! 87: .B d ! 88: Duplicate the ! 89: top value on the stack. ! 90: .TP ! 91: .B p ! 92: Print the top value on the stack. ! 93: The top value remains unchanged. ! 94: .B P ! 95: interprets the top of the stack as an ! 96: .SM ASCII ! 97: string, ! 98: removes it, and prints it. ! 99: .TP ! 100: .B f ! 101: Print the values on the stack. ! 102: .TP ! 103: .B q ! 104: .br ! 105: .ns ! 106: .TP ! 107: .B Q ! 108: Exit the program. ! 109: If executing a string, the recursion level is ! 110: popped by two. ! 111: Under operation ! 112: .B Q ! 113: the top value on the stack is popped and the string execution level is popped ! 114: by that value. ! 115: .TP ! 116: .B x ! 117: Treat the top element of the stack as a character string ! 118: and execute it as a string of ! 119: .I dc ! 120: commands. ! 121: .TP ! 122: .B X ! 123: Replace the number on the top of the stack with its scale factor. ! 124: .TP ! 125: .B "[ ... ]" ! 126: Put the bracketed ! 127: .SM ASCII ! 128: string on the top of the stack. ! 129: .TP ! 130: .BI < "x " > "x " = x ! 131: Pop and compare the ! 132: top two elements of the stack. ! 133: Register ! 134: .I x ! 135: is executed if they obey the stated ! 136: relation. ! 137: .TP ! 138: .B v ! 139: Replace the top element on the stack by its square root. ! 140: Any existing fractional part of the argument is taken ! 141: into account, but otherwise the scale factor is ignored. ! 142: .TP ! 143: .B ! ! 144: Interpret the rest of the line as a UNIX command. ! 145: .TP ! 146: .B c ! 147: Clear the stack. ! 148: .TP ! 149: .B i ! 150: The top value on the stack is popped and used as the ! 151: number base for further input. ! 152: .TP ! 153: .B I ! 154: Push the input base on the top of the stack. ! 155: .TP ! 156: .B o ! 157: The top value on the stack is popped and used as the ! 158: number base for further output. ! 159: In bases larger than 10, each `digit' prints as a group of decimal digits. ! 160: .TP ! 161: .B O ! 162: Push the output base on the top of the stack. ! 163: .TP ! 164: .B k ! 165: Pop the top of the stack, and use that value as ! 166: a non-negative scale factor: ! 167: the appropriate number of places ! 168: are printed on output, ! 169: and maintained during multiplication, division, and exponentiation. ! 170: The interaction of scale factor, ! 171: input base, and output base will be reasonable if all are changed ! 172: together. ! 173: .TP ! 174: .B z ! 175: Push the stack level is pushed onto the stack. ! 176: .TP ! 177: .B Z ! 178: Replace the number on the top of the stack with its length. ! 179: .TP ! 180: .B ? ! 181: A line of input is taken from the input source (usually the terminal) ! 182: and executed. ! 183: .TP ! 184: .B "; :" ! 185: Used by ! 186: .I bc ! 187: for array operations. ! 188: .PP ! 189: The scale factor set by ! 190: .B k ! 191: determines how many digits are kept to the right of ! 192: the decimal point. ! 193: If ! 194: .I s ! 195: is the current scale factor, ! 196: .I sa ! 197: is the scale of the first operand, ! 198: .I sb ! 199: is the scale of the second, ! 200: and ! 201: .I b ! 202: is the (integer) second operand, ! 203: results are truncated to the following scales. ! 204: .IP ! 205: .nf ! 206: \fL+\fR,\fL-\fR max(\fIsa,sb\fR) ! 207: \fL*\fR min(\fIsa\fR+\fIsb \fR, max\fR(\fIs,sa,sb\fR)) ! 208: \fL/\fI s ! 209: \fL%\fR so that dividend = divisor*quotient + remainder; remainder has sign of dividend ! 210: \fL^\fR min(\fIsa\(mu|\fIb\fR|, max(\fIs,sa\fR)) ! 211: \fLv\fR max(\fIs,sa\fR) ! 212: .fi ! 213: .SH EXAMPLES ! 214: .EX ! 215: [la1+dsa*pla10>y]sy ! 216: 0sa1 ! 217: lyx ! 218: .EE ! 219: .ns ! 220: .IP ! 221: Print the first ten values of ! 222: .IR n ! ! 223: .SH "SEE ALSO" ! 224: .IR bc (1), ! 225: .IR hoc (1) ! 226: .SH DIAGNOSTICS ! 227: .I x ! 228: .LR "is unimplemented" , ! 229: where ! 230: .I x ! 231: is an octal number: an internal error. ! 232: .br ! 233: `Out of headers' ! 234: for too many numbers being kept around. ! 235: .br ! 236: `Nesting depth' ! 237: for too many levels of nested execution. ! 238: .SH BUGS ! 239: When the input base exceeds 16, ! 240: there is no notation for digits greater than ! 241: .BR F .
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.