home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume24 / gnucalc / part37 < prev    next >
Text File  |  1991-10-31  |  57KB  |  1,240 lines

  1. Newsgroups: comp.sources.misc
  2. From: daveg@synaptics.com (David Gillespie)
  3. Subject:  v24i085:  gnucalc - GNU Emacs Calculator, v2.00, Part37/56
  4. Message-ID: <1991Oct31.214633.2697@sparky.imd.sterling.com>
  5. X-Md4-Signature: be1b39282f2d976b087f6ed2ed1affbf
  6. Date: Thu, 31 Oct 1991 21:46:33 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: daveg@synaptics.com (David Gillespie)
  10. Posting-number: Volume 24, Issue 85
  11. Archive-name: gnucalc/part37
  12. Environment: Emacs
  13. Supersedes: gmcalc: Volume 13, Issue 27-45
  14.  
  15. ---- Cut Here and unpack ----
  16. #!/bin/sh
  17. # do not concatenate these parts, unpack them in order with /bin/sh
  18. # file calc.texinfo continued
  19. #
  20. if test ! -r _shar_seq_.tmp; then
  21.     echo 'Please unpack part 1 first!'
  22.     exit 1
  23. fi
  24. (read Scheck
  25.  if test "$Scheck" != 37; then
  26.     echo Please unpack part "$Scheck" next!
  27.     exit 1
  28.  else
  29.     exit 0
  30.  fi
  31. ) < _shar_seq_.tmp || exit 1
  32. if test ! -f _shar_wnt_.tmp; then
  33.     echo 'x - still skipping calc.texinfo'
  34. else
  35. echo 'x - continuing file calc.texinfo'
  36. sed 's/^X//' << 'SHAR_EOF' >> 'calc.texinfo' &&
  37. X
  38. @kindex h c
  39. @pindex calc-describe-key-briefly
  40. The @kbd{h c} (@code{calc-describe-key-briefly}) command reads a
  41. key sequence and displays a brief one-line description of it at
  42. the bottom of the screen.  It looks for the key sequence in the
  43. Summary node of the Calc manual; if it doesn't find the sequence
  44. there, it acts just like its regular Emacs counterpart @kbd{C-h c}
  45. (@code{describe-key-briefly}).  For example, @kbd{h c H a S}
  46. gives the description:
  47. X
  48. @smallexample
  49. H a S runs calc-solve-for:  a `H a S' v  => fsolve(a,v)  (?=notes)
  50. @end smallexample
  51. X
  52. @noindent
  53. which means the command @kbd{H a S} or @kbd{H M-x calc-solve-for}
  54. takes a value @cite{a} from the stack, prompts for a value @cite{v},
  55. then applies the algebraic function @code{fsolve} to these values.
  56. The @samp{?=notes} message means you can now type @kbd{?} to see
  57. additional notes from the summary that apply to this command.
  58. X
  59. @kindex h f
  60. @pindex calc-describe-function
  61. The @kbd{h f} (@code{calc-describe-function}) command looks up an
  62. algebraic function or a command name in the Calc manual.  The
  63. prompt initially contains @samp{calcFunc-}; follow this with an
  64. algebraic function name to look up that function in the
  65. @samp{Function Index}.  Or, backspace and enter a command name
  66. beginning with @samp{calc-} to look it up in the @samp{Command Index}.
  67. This command will also look up operator symbols that can appear
  68. in algebraic formulas, like @samp{%} and @samp{=>}.
  69. X
  70. @kindex h v
  71. @pindex calc-describe-variable
  72. The @kbd{h v} (@code{calc-describe-variable}) command looks up a
  73. variable in the Calc manual.  The prompt initially contains the
  74. @samp{var-} prefix; just add a variable name like @code{pi} or
  75. @code{PlotRejects}.
  76. X
  77. @kindex h b
  78. @pindex describe-bindings
  79. The @kbd{h b} (@code{calc-describe-bindings}) command is just like
  80. @kbd{C-h b}, except that only local (Calc-related) key bindings are
  81. listed.
  82. X
  83. @kindex h n
  84. The @kbd{h n} or @kbd{h C-n} (@code{calc-view-news}) command displays
  85. the ``news'' or change history of Calc.  This is kept in the file
  86. @file{README}, which Calc looks for in the same directory as the Calc
  87. source files.
  88. X
  89. @kindex h C-c
  90. @kindex h C-d
  91. @kindex h C-w
  92. The @kbd{h C-c}, @kbd{h C-d}, and @kbd{h C-w} keys display copying,
  93. distribution, and warranty information about Calc.  These work by
  94. pulling up the appropriate parts of the @samp{Copying} or
  95. @samp{Reporting Bugs} sections of the manual.
  96. X
  97. @node Stack Basics, Numeric Entry, Help Commands, Introduction
  98. @section Stack Basics
  99. X
  100. @noindent
  101. @cindex Stack basics
  102. @c [fix-tut RPN Calculations and the Stack]
  103. Calc uses RPN notation.  If you are not familar with RPN, @pxref{RPN
  104. Tutorial}.
  105. X
  106. To add the numbers 1 and 2 in Calc you would type the keys:
  107. @kbd{1 @key{RET} 2 +}.
  108. (@key{RET} corresponds to the @key{ENTER} key on most calculators.)
  109. The first three keystrokes ``push'' the numbers 1 and 2 onto the stack.  The
  110. @kbd{+} key always ``pops'' the top two numbers from the stack, adds them,
  111. and pushes the result (3) back onto the stack.  This number is ready for
  112. further calculations:  @kbd{5 -} pushes 5 onto the stack, then pops the
  113. 3 and 5, subtracts them, and pushes the result (@i{-2}).@refill
  114. X
  115. Note that the ``top'' of the stack actually appears at the @emph{bottom}
  116. of the buffer.  A line containing a single @samp{.} character signifies
  117. the end of the buffer; Calculator commands operate on the number(s)
  118. directly above this line.  The @kbd{d t} (@code{calc-truncate-stack})
  119. command allows you to move the @samp{.} marker up and down in the stack;
  120. @pxref{Truncating the Stack}.
  121. X
  122. @kindex d l
  123. @pindex calc-line-numbering
  124. Stack elements are numbered consecutively, with number 1 being the top of
  125. the stack.  These line numbers are ordinarily displayed on the lefthand side
  126. of the window.  The @kbd{d l} (@code{calc-line-numbering}) command controls
  127. whether these numbers appear.  (Line numbers may be turned off since they
  128. slow the Calculator down a bit and also clutter the display.)
  129. X
  130. @kindex o
  131. @kindex d `
  132. @pindex calc-realign
  133. The unshifted letter @kbd{o} (@code{calc-realign}) command (also on the
  134. @w{@kbd{d `}} key) repositions the cursor to its top-of-stack ``home''
  135. position.  It also undoes any horizontal scrolling in the window.
  136. If you give it a numeric prefix argument, it instead moves the cursor
  137. to the specified stack element.
  138. X
  139. The @key{RET} (or equivalent @key{SPC}) key is only required to separate
  140. two consecutive numbers.
  141. (After all, if you typed @kbd{1 2} by themselves the Calculator
  142. would enter the number 12.)  If you press @kbd{RET} or @kbd{SPC} @emph{not}
  143. right after typing a number, the key duplicates the number on the top of
  144. the stack.  @kbd{@key{RET} *} is thus a handy way to square a number.@refill
  145. X
  146. The @key{DEL} key pops and throws away the top number on the stack.
  147. The @key{TAB} key swaps the top two objects on the stack.
  148. @xref{Stack and Trail}, for descriptions of these and other stack-related
  149. commands.@refill
  150. X
  151. @node Numeric Entry, Algebraic Entry, Stack Basics, Introduction
  152. @section Numeric Entry
  153. X
  154. @noindent
  155. @kindex 0-9
  156. @kindex .
  157. @kindex e
  158. @cindex Numeric entry
  159. @cindex Entering numbers
  160. Pressing a digit or other numeric key begins numeric entry using the
  161. minibuffer.  The number is pushed on the stack when you press the @key{RET}
  162. or @key{SPC} keys.  If you press any other non-numeric key, the number is
  163. pushed onto the stack and the appropriate operation is performed.  If
  164. you press a numeric key which is not valid (say, a second decimal point),
  165. the key is ignored.
  166. X
  167. @cindex Minus signs
  168. @cindex Negative numbers, entering
  169. @kindex _
  170. There are three different concepts corresponding to the word ``minus,''
  171. typified by @cite{a-b} (subtraction), @cite{-x}
  172. (change-sign), and @cite{-5} (negative number).  Calc uses three
  173. different keys for these operations, respectively:
  174. @kbd{-}, @kbd{n}, and @kbd{_} (the underscore).  The @kbd{-} key subtracts
  175. the two numbers on the top of the stack.  The @kbd{n} key changes the sign
  176. of the number on the top of the stack or the number currently being entered.
  177. The @kbd{_} key begins entry of a negative number or changes the sign of
  178. the number currently being entered.  The following sequences all enter the
  179. number @i{-5} onto the stack:  @kbd{0 @key{RET} 5 -}, @kbd{5 n @key{RET}},
  180. @kbd{5 @key{RET} n}, @kbd{_ 5 @key{RET}}, @kbd{5 _ @key{RET}}.@refill
  181. X
  182. The @kbd{#}, @kbd{@@}, @kbd{'}, @kbd{"}, @kbd{p}, and @kbd{M} keys are
  183. also active during numeric entry.  They are used for entering
  184. non-decimal numbers, HMS forms, and so on; these notations are
  185. described later in this manual with the corresponding data types.
  186. @xref{Data Types}.
  187. X
  188. During numeric entry, the only editing key available is @kbd{DEL}.
  189. X
  190. @node Algebraic Entry, Quick Calculator, Numeric Entry, Introduction
  191. @section Algebraic Entry
  192. X
  193. @noindent
  194. @kindex '
  195. @pindex calc-algebraic-entry
  196. @cindex Algebraic notation
  197. @cindex Formulas, entering
  198. Calculations can also be entered in algebraic form.  This is accomplished
  199. by typing the apostrophe key, @kbd{'}, followed by the expression in
  200. standard format:  @kbd{@key{'} 2+3*4 @key{RET}} computes
  201. @c{$2+(3\times4) = 14$}
  202. @cite{2+(3*4) = 14} and pushes that on the stack.  If you wish you can
  203. ignore the RPN aspect of Calc altogether and simply enter algebraic
  204. expressions in this way.  You may want to use @key{DEL} every so often to
  205. clear previous results off the stack.@refill
  206. X
  207. You can press the apostrophe key during normal numeric entry to switch
  208. the half-entered number into algebraic entry mode.  One reason to do this
  209. would be to use the full Emacs cursor motion and editing keys, which are
  210. available during algebraic entry but not during numeric entry.
  211. X
  212. In the same vein, during either numeric or algebraic entry you can
  213. press @kbd{`} to switch to @code{calc-edit} mode, where you complete
  214. your half-finished entry in a separate buffer.  @xref{Editing Stack Entries}.
  215. X
  216. @kindex m a
  217. @pindex calc-algebraic-mode
  218. @cindex Algebraic mode
  219. If you prefer algebraic entry, you can use the command @kbd{m a}
  220. (@code{calc-algebraic-mode}) to set Algebraic mode.  In this mode,
  221. digits and other keys that would normally start numeric entry instead
  222. start full algebraic entry; as long as your formula begins with a digit
  223. you can omit the apostrophe.  Open parentheses and square brackets also
  224. begin algebraic entry.  You can still do RPN calculations in this mode,
  225. but you will have to press @key{RET} to terminate every number:
  226. @kbd{2 @key{RET} 3 @key{RET} * 4 @key{RET} +} would accomplish the same
  227. thing as @kbd{2*3+4 @key{RET}}.@refill
  228. X
  229. @cindex Incomplete algebraic mode
  230. If you give a numeric prefix argument like @kbd{C-u} to the @kbd{m a}
  231. command, it enables Incomplete Algebraic mode; this is like regular
  232. Algebraic mode except that it applies to the @kbd{(} and @kbd{[} keys
  233. only.  Numeric keys still begin a numeric entry in this mode.
  234. X
  235. @kindex m t
  236. @pindex calc-total-algebraic-mode
  237. @cindex Total algebraic mode
  238. The @kbd{m t} (@code{calc-total-algebraic-mode}) gives you an even
  239. stronger algebraic-entry mode, in which @emph{all} regular letter and
  240. punctuation keys begin algebraic entry.  Use this if you prefer typing
  241. @w{@kbd{sqrt( )}} instead of @kbd{Q}, @w{@kbd{factor( )}} instead of
  242. @kbd{a f}, and so on.  To type regular Calc commands when you are in
  243. ``total'' algebraic mode, hold down the @key{META} key.  Thus @kbd{M-q}
  244. is the command to quit Calc, @kbd{M-p} sets the precision, and
  245. @kbd{M-m t} (or @kbd{M-m M-t}, if you prefer) turns total algebraic
  246. mode back off again.  Meta keys also terminate algebraic entry, so
  247. that @kbd{2+3 M-S} is equivalent to @kbd{2+3 RET M-S}.  The symbol
  248. @samp{Alg*} will appear in the mode line whenever you are in this mode.
  249. X
  250. Pressing @kbd{'} (the apostrophe) a second time re-enters the previous
  251. algebraic formula.  You can then use the normal Emacs editing keys to
  252. modify this formula to your liking before pressing @key{RET}.
  253. X
  254. @kindex $
  255. @cindex Formulas, referring to stack
  256. Within a formula entered from the keyboard, the symbol @kbd{$}
  257. represents the number on the top of the stack.  If an entered formula
  258. contains any @kbd{$} characters, the Calculator replaces the top of
  259. stack with that formula rather than simply pushing the formula onto the
  260. stack.  Thus, @kbd{' 1+2 @key{RET}} pushes 3 on the stack, and @kbd{$*2
  261. @key{RET}} replaces it with 6.  Note that the @kbd{$} key always
  262. initiates algebraic entry; the @kbd{'} is unnecessary if @kbd{$} is the
  263. first character in the new formula.@refill
  264. X
  265. Higher stack elements can be accessed from an entered formula with the
  266. symbols @kbd{$$}, @kbd{$$$}, and so on.  The number of stack elements
  267. removed (to be replaced by the entered values) equals the number of dollar
  268. signs in the longest such symbol in the formula.  For example, @samp{$$+$$$}
  269. adds the second and third stack elements, replacing the top three elements
  270. with the answer.  (All information about the top stack element is thus lost
  271. since no single @samp{$} appears in this formula.)@refill
  272. X
  273. A slightly different way to refer to stack elements is with a dollar
  274. sign followed by a number:  @samp{$1}, @samp{$2}, and so on are much
  275. like @samp{$}, @samp{$$}, etc., except that stack entries referred
  276. to numerically are not replaced by the algebraic entry.  That is, while
  277. @samp{$+1} replaces 5 on the stack with 6, @samp{$1+1} leaves the 5
  278. on the stack and pushes an additional 6.
  279. X
  280. If a sequence of formulas are entered separated by commas, each formula
  281. is pushed onto the stack in turn.  For example, @samp{1,2,3} pushes
  282. those three numbers onto the stack (leaving the 3 at the top), and
  283. @samp{$+1,$-1} replaces a 5 on the stack with 4 followed by 6.  Also,
  284. @samp{$,$$} exchanges the top two elements of the stack, just like the
  285. @key{TAB} key.
  286. X
  287. If you finish your algebraic entry by pressing @kbd{LFD} (or @kbd{C-j})
  288. instead of @key{RET}, Calc disables the default simplifications
  289. (as if by @kbd{m O}; @pxref{Simplification Modes}) while the entry
  290. is being pushed on the stack.  Thus @kbd{' 1+2 @key{RET}} pushes 3
  291. on the stack, but @kbd{' 1+2 @key{LFD}} pushes the formula @cite{1+2};
  292. you might then press @kbd{=} when it is time to evaluate this formula.
  293. X
  294. @node Quick Calculator, Prefix Arguments, Algebraic Entry, Introduction
  295. @section ``Quick Calculator'' Mode
  296. X
  297. @noindent
  298. @kindex M-# q
  299. @pindex quick-calc
  300. @cindex Quick Calculator
  301. There is another way to invoke the Calculator if all you need to do
  302. is make one or two quick calculations.  Type @kbd{M-# q} (or
  303. @kbd{M-x quick-calc}), then type any formula as an algebraic entry.
  304. The Calculator will compute the result and display it in the echo
  305. area, without ever actually putting up a Calculator window.
  306. X
  307. You can use the @kbd{$} character in a Quick Calculator formula to
  308. refer to the previous Quick Calculator result.  Older results are
  309. not retained; the Quick Calculator has no effect on the full
  310. Calculator's stack or trail.  If you compute a result and then
  311. forget what it was, just run @code{M-# q} again and enter
  312. @samp{$} as the formula.
  313. X
  314. If this is the first time you have used the Calculator in this Emacs
  315. session, the @kbd{M-# q} command will create the @code{*Calculator*}
  316. buffer and perform all the usual initializations; it simply will
  317. refrain from putting that buffer up in a new window.  The Quick
  318. Calculator refers to the @code{*Calculator*} buffer for all mode
  319. settings.  Thus, for example, to set the precision that the Quick
  320. Calculator uses, simply run the full Calculator momentarily and use
  321. the regular @kbd{p} command.
  322. X
  323. If you use @code{M-# q} from inside the Calculator buffer, the
  324. effect is the same as pressing the apostrophe key (algebraic entry).
  325. X
  326. The result of a Quick calculation is placed in the Emacs ``kill ring''
  327. as well as being displayed.  A subsequent @kbd{C-y} command will
  328. yank the result into the editing buffer.  You can also use this
  329. to yank the result into the next @kbd{M-# q} input line as a more
  330. explicit alternative to @kbd{$} notation, or to yank the result
  331. into the Calculator stack after typing @kbd{M-# c}.
  332. X
  333. If you finish your formula by typing @key{LFD} (or @kbd{C-j}) instead
  334. of @key{RET}, the result is inserted immediately into the buffer
  335. rather than going into the kill ring.
  336. X
  337. Quick Calculator results are actually evaluated as if by the @kbd{=}
  338. key (which replaces variable names by their stored values, if any).
  339. If the formula you enter is an assignment to a variable using the
  340. @samp{:=} operator, say, @samp{foo := 2 + 3} or @samp{foo := foo + 1},
  341. then the result of the evaluation is stored in that Calc variable.
  342. @xref{Store and Recall}.
  343. X
  344. If the result is an integer and the current display radix is decimal,
  345. the number will also be displayed in hex and octal formats.  If the
  346. integer is in the range from 1 to 126, it will also be displayed as
  347. an ASCII character.
  348. X
  349. For example, the quoted character @samp{"x"} produces the vector
  350. result @samp{[120]} (because 120 is the ASCII code of the lower-case
  351. `x'; @pxref{Strings}).  Since this is a vector, not an integer, it
  352. is displayed only according to the current mode settings.  But
  353. running Quick Calc again and entering @samp{120} will produce the
  354. result @samp{120 (16#78, 8#170, x)} which shows the number in its
  355. decimal, hexadecimal, octal, and ASCII forms.
  356. X
  357. Please note that the Quick Calculator is not any faster at loading
  358. or computing the answer than the full Calculator; the name ``quick''
  359. merely refers to the fact that it's much less hassle to use for
  360. small calculations.
  361. X
  362. @node Prefix Arguments, Undo, Quick Calculator, Introduction
  363. @section Numeric Prefix Arguments
  364. X
  365. @noindent
  366. Many Calculator commands use numeric prefix arguments.  Some, such as
  367. @kbd{d s} (@code{calc-sci-notation}), set a parameter to the value of
  368. the prefix argument or use a default if you don't use a prefix.
  369. Others (like @kbd{d f} (@code{calc-fix-notation}) require an argument
  370. and prompt for a number if you don't give one as a prefix.@refill
  371. X
  372. As a rule, stack-manipulation commands accept a numeric prefix argument
  373. which is interpreted as an index into the stack.  A positive argument
  374. operates on the top @var{n} stack entries; a negative argument operates
  375. on the @var{n}th stack entry in isolation; and a zero argument operates
  376. on the entire stack.
  377. X
  378. Most commands that perform computations (such as the arithmetic and
  379. scientific functions) accept a numeric prefix argument that allows the
  380. operation to be applied across many stack elements.  For unary operations
  381. (that is, functions of one argument like absolute value or complex
  382. conjugate), a prefix argument applies that function to the top @var{n}
  383. stack entries simultaneously.  For binary operations (functions of two
  384. arguments like addition, GCD, and vector concatenation), a positive
  385. prefix argument ``reduces'' the function across the top @var{n}
  386. stack elements (for example, @kbd{C-u 5 +} sums the top 5 stack entries;
  387. @pxref{Reducing and Mapping}), and a negative argument maps the next-to-top
  388. @var{n} stack elements with the top stack element as a second argument
  389. (for example, @kbd{7 c-u -5 +} adds 7 to the top 5 stack elements).
  390. This feature is not available for operations which use the numeric prefix
  391. argument for some other purpose.
  392. X
  393. Numeric prefixes are specified the same way as always in Emacs:  Press
  394. a sequence of @key{META}-digits, or press @key{ESC} followed by digits,
  395. or press @kbd{C-u} followed by digits.@refill
  396. X
  397. @kindex ~
  398. @pindex calc-num-prefix
  399. You can type @kbd{~} (@code{calc-num-prefix}) to pop an integer from the
  400. top of the stack and enter it as the numeric prefix for the next command.
  401. For example, @kbd{C-u 16 p} sets the precision to 16 digits; an alternate
  402. (silly) way to do this would be @kbd{2 @key{RET} 4 ^ ~ p}, i.e., compute 2
  403. to the fourth power and set the precision to that value.@refill
  404. X
  405. Conversely, if you have typed a numeric prefix argument the @kbd{~} key
  406. pushes it onto the stack in the form of an integer.
  407. X
  408. @node Undo, Error Messages, Prefix Arguments, Introduction
  409. @section Undoing Mistakes
  410. X
  411. @noindent
  412. @kindex U
  413. @kindex C-_
  414. @pindex calc-undo
  415. @cindex Mistakes, undoing
  416. @cindex Undoing mistakes
  417. @cindex Errors, undoing
  418. The shift-@kbd{U} key (@code{calc-undo}) undoes the most recent operation.
  419. If that operation added or dropped objects from the stack, those objects
  420. are removed or restored.  If it was a @code{store} operation, you are
  421. queried whether or not to restore the variable to its original value.
  422. The @kbd{U} key may be pressed any number of times to undo successively
  423. farther back in time; with a numeric prefix argument it undoes a
  424. specified number of operations.  The undo history is cleared only by the
  425. @kbd{q} (@code{calc-quit}) command.  (Recall that @kbd{M-# c} is usually
  426. made synonymous with @code{calc-quit} while inside the Calculator; this
  427. also clears the undo history.)
  428. X
  429. Currently the mode-setting commands (like @code{calc-precision}) are not
  430. undoable.  You can undo past a point where you changed a mode, but you
  431. will need to reset the mode yourself.
  432. X
  433. @kindex D
  434. @pindex calc-redo
  435. @cindex Redoing after an Undo
  436. The shift-@kbd{D} key (@code{calc-redo}) redoes an operation that was
  437. mistakenly undone.  Pressing @kbd{U} with a negative prefix argument is
  438. equivalent to executing @code{calc-redo}.  You can redo any number of
  439. times, up to the number of recent consecutive undo commands.  Redo
  440. information is cleared whenever you give any command that adds new undo
  441. information, i.e., if you undo, then enter a number on the stack or make
  442. any other change, then it will be too late to redo.
  443. X
  444. @kindex M-RET
  445. @pindex calc-last-args
  446. @cindex Last-arguments feature
  447. @cindex Arguments, restoring
  448. The @kbd{M-@key{RET}} key (@code{calc-last-args}) is like undo in that
  449. it restores the arguments of the most recent command onto the stack;
  450. however, it does not remove the result of that command.  Given a numeric
  451. prefix argument, this command applies to the @cite{n}th most recent
  452. command which removed items from the stack; it pushes those items back
  453. onto the stack.
  454. X
  455. The @kbd{K} (@code{calc-keep-args}) command provides a related function
  456. to @kbd{M-@key{RET}}.  @xref{Stack and Trail}.
  457. X
  458. It is also possible to recall previous results or inputs using the trail.
  459. @xref{Trail Commands}.
  460. X
  461. The standard Emacs @kbd{C-_} undo key is recognized as a synonym for @kbd{U}.
  462. X
  463. @node Error Messages, Multiple Calculators, Undo, Introduction
  464. @section Error Messages
  465. X
  466. @noindent
  467. @kindex w
  468. @pindex calc-why
  469. @cindex Errors, messages
  470. @cindex Why did an error occur?
  471. Many situations that would produce an error message in other calculators
  472. simply create unsimplified formulas in the Emacs Calculator.  For example,
  473. @kbd{1 @key{RET} 0 /} pushes the formula @cite{1 / 0}; @w{@kbd{0 L}} pushes
  474. the formula @samp{ln(0)}.  Floating-point overflow and underflow are also
  475. reasons for this to happen.
  476. X
  477. When a function call must be left in symbolic form, Calc usually
  478. produces a message explaining why.  Messages that are probably
  479. surprising or indicative of user errors are displayed automatically.
  480. Other messages are simply kept in Calc's memory and are displayed only
  481. if you type @kbd{w} (@code{calc-why}).  You can also press @kbd{w} if
  482. the same computation results in several messages.  (The first message
  483. will end with @samp{[w=more]} in this case.)
  484. X
  485. @kindex d w
  486. @pindex calc-auto-why
  487. The @kbd{d w} (@code{calc-auto-why}) command controls when error messages
  488. are displayed automatically (Calc effectively presses @kbd{w} for you
  489. after your computation finishes).  By default, this occurs only for
  490. ``important'' messages.  The other modes are to report @emph{all} messages
  491. automatically, or to report none automatically (so that you must press
  492. @kbd{w} yourself to see the messages).
  493. X
  494. @node Multiple Calculators, Troubleshooting Commands, Error Messages, Introduction
  495. @section Multiple Calculators
  496. X
  497. @noindent
  498. @pindex another-calc
  499. It is possible to have any number of Calc Mode buffers at once.
  500. Usually this is done by executing @kbd{M-x another-calc}, which
  501. is similar to @kbd{M-# c} except that if a @samp{*Calculator*}
  502. buffer already exists, a new, independent one with a name of the
  503. form @samp{*Calculator*<@var{n}>} is created.  You can also use the
  504. command @code{calc-mode} to put any buffer into Calculator mode, but
  505. this would ordinarily never be done.
  506. X
  507. The @kbd{q} (@code{calc-quit}) command does not destroy a Calculator buffer;
  508. it only closes its window.  Use @kbd{M-x kill-buffer} to destroy a
  509. Calculator buffer.
  510. X
  511. Each Calculator buffer keeps its own stack, undo list, and mode settings
  512. such as precision, angular mode, and display formats.  In Emacs terms,
  513. variables such as @code{calc-stack} are buffer-local variables.  The
  514. global default values of these variables are used only when a new
  515. Calculator buffer is created.  The @code{calc-quit} command saves
  516. the stack and mode settings of the buffer being quit as the new defaults.
  517. X
  518. There is only one trail buffer, @samp{*Calc Trail*}, used by all
  519. Calculator buffers.
  520. X
  521. @node Troubleshooting Commands, , Multiple Calculators, Introduction
  522. @section Troubleshooting Commands
  523. X
  524. @noindent
  525. This section describes commands you can use in case a computation
  526. incorrectly fails or gives the wrong answer.
  527. X
  528. @xref{Reporting Bugs}, if you find a problem that appears to be due
  529. to a bug or deficiency in Calc.
  530. X
  531. @menu
  532. * Recursion Depth::
  533. * Caches::
  534. * Debugging Calc::
  535. @end menu
  536. X
  537. @node Recursion Depth, Caches, Troubleshooting Commands, Troubleshooting Commands
  538. @subsection Recursion Depth
  539. X
  540. @noindent
  541. @kindex M
  542. @kindex I M
  543. @pindex calc-more-recursion-depth
  544. @pindex calc-less-recursion-depth
  545. @cindex Recursion depth
  546. @cindex ``Computation got stuck'' message
  547. @cindex @code{max-lisp-eval-depth}
  548. @cindex @code{max-specpdl-size}
  549. Calc uses recursion in many of its calculations.  Emacs Lisp keeps a
  550. variable @code{max-lisp-eval-depth} which limits the amount of recursion
  551. possible in an attempt to recover from program bugs.  If a calculation
  552. ever halts incorrectly with the message ``Computation got stuck or
  553. ran too long,'' use the @kbd{M} command (@code{calc-more-recursion-depth})
  554. to increase this limit.@refill
  555. X
  556. The limit is always increased (multiplied) by a factor of two.  There
  557. is also an @kbd{I M} (@code{calc-less-recursion-depth}) command which
  558. decreases this limit by a factor of two, down to a minimum value of 200.
  559. The default value is 1000.
  560. X
  561. These commands also double or halve @code{max-specpdl-size}, another
  562. internal Lisp recursion limit.  The minimum value for this limit is 600.
  563. X
  564. @node Caches, Debugging Calc, Recursion Depth, Troubleshooting Commands
  565. @subsection Caches
  566. X
  567. @noindent
  568. @cindex Caches
  569. @cindex Flushing caches
  570. Calc saves certain values after they have been computed once.  For
  571. example, the @kbd{P} (@code{calc-pi}) command initially ``knows'' the
  572. constant @c{$\pi$}
  573. @cite{pi} to about 20 decimal places; if the current precision
  574. is greater than this, it will recompute @c{$\pi$}
  575. @cite{pi} using a series
  576. approximation.  This value will not need to be recomputed ever again
  577. unless you raise the precision still further.  Many operations such as
  578. logarithms and sines make use of similarly cached values such as
  579. @c{$\pi \over 4$}
  580. @cite{pi/4} and @c{$\ln 2$}
  581. @cite{ln(2)}.  The visible effect of caching is that
  582. high-precision computations may be especially slow the first time.
  583. Other things cached include powers of two (for the binary arithmetic
  584. functions), matrix inverses and determinants, symbolic integrals, and
  585. data computed by the graphing commands.
  586. X
  587. @pindex calc-flush-caches
  588. If you suspect a Calculator cache has become corrupt, you can use the
  589. @code{calc-flush-caches} command to reset all caches to the empty state.
  590. (This should only be necessary in event of bugs in the Calculator.)
  591. The @kbd{M-# 0} (with the zero key) command also resets caches along
  592. with all other aspects of the Calculator's state.
  593. X
  594. @node Debugging Calc, , Caches, Troubleshooting Commands
  595. @subsection Debugging Calc
  596. X
  597. @noindent
  598. A few commands exist to help in the debugging of Calc commands.
  599. @xref{Programming}, to see the various ways that you can write
  600. your own Calc commands.
  601. X
  602. @kindex Z T
  603. @pindex calc-timing
  604. The @kbd{Z T} (@code{calc-timing}) command turns on and off a mode
  605. in which the timing of slow commands is reported in the Trail.
  606. Any Calc command that takes two seconds or longer writes a line
  607. to the Trail showing how many seconds it took.  This value is
  608. accurate only to within one second.
  609. X
  610. All steps of executing a command are included; in particular, time
  611. taken to format the result for display in the stack and trail is
  612. counted.  Some prompts also count time taken waiting for them to
  613. be answered, while others do not; this depends on the exact
  614. implementation of the command.  For best results, if you are timing
  615. a sequence that includes prompts or multiple commands, define a
  616. keyboard macro to run the whole sequence at once.  Calc's @kbd{X}
  617. command (@pxref{Keyboard Macros}) will then report the time taken
  618. to execute the whole macro.
  619. X
  620. Another advantage of the @kbd{X} command is that while it is
  621. executing, the stack and trail are not updated from step to step.
  622. So if you expect the output of your test sequence to leave a result
  623. that may take a long time to format and you don't wish to count
  624. this formatting time, end your sequence with a @key{DEL} keystroke
  625. to clear the result from the stack.  When you run the sequence with
  626. @kbd{X}, Calc will never bother to format the large result.
  627. X
  628. Another thing @kbd{Z T} does is to increase the Emacs variable
  629. @code{gc-cons-threshold} to a much higher value (two million; the
  630. usual default in Calc is 250,000) for the duration of each command.
  631. This generally prevents garbage collection during the timing of
  632. the command, though it may cause your Emacs process to grow
  633. abnormally large.  (Garbage collection time is a major unpredictable
  634. factor in the timing of Emacs operations.)
  635. X
  636. Another command that is useful when debugging your own Lisp
  637. extensions to Calc is @kbd{M-x calc-pass-errors}, which disables
  638. the error handler that changes the ``@code{max-lisp-eval-depth}
  639. exceeded'' message to the much more friendly ``Computation got
  640. stuck or ran too long.''  This handler interferes with the Emacs
  641. Lisp debugger's @code{debug-on-error} mode.  Errors are reported
  642. in the handler itself rather than at the true location of the
  643. error.  After you have executed @code{calc-pass-errors}, Lisp
  644. errors will be reported correctly but the user-friendly message
  645. will be lost.
  646. X
  647. @node Data Types, Stack and Trail, Introduction, Top
  648. @chapter Data Types
  649. X
  650. @noindent
  651. This chapter discusses the various types of objects that can be placed
  652. on the Calculator stack, how they are displayed, and how they are
  653. entered.  (@xref{Data Type Formats}, for information on how these data
  654. types are represented as Lisp objects.)@refill
  655. X
  656. Integers, fractions, and floats are various ways of describing real
  657. numbers.  HMS forms also for many purposes act as real numbers.  These
  658. types can be combined to form complex numbers, modulo forms, error forms,
  659. or interval forms.  (But these last four types cannot be combined with
  660. each other: error forms may not contain modulo forms, for example.)
  661. Finally, all these types of numbers may be combined into vectors,
  662. matrices, or algebraic formulas.
  663. X
  664. @menu
  665. * Integers::                The most basic data type.
  666. * Fractions::               This and above are called @dfn{rationals}.
  667. * Floats::                  This and above are called @dfn{reals}.
  668. * Complex Numbers::         This and above are called @dfn{numbers}.
  669. * Infinities::
  670. * Vectors and Matrices::
  671. * Strings::
  672. * HMS Forms::
  673. * Date Forms::
  674. * Modulo Forms::
  675. * Error Forms::
  676. * Interval Forms::
  677. * Incomplete Objects::
  678. * Variables::
  679. * Formulas::
  680. @end menu
  681. X
  682. @node Integers, Fractions, Data Types, Data Types
  683. @section Integers
  684. X
  685. @noindent
  686. @cindex Integers
  687. The Calculator stores integers to arbitrary precision.  Addition,
  688. subtraction, and multiplication of integers always yields an exact
  689. integer result.  (If the result of a division or exponentiation of
  690. integers is not an integer, it is expressed in fractional or
  691. floating-point form according to the current Fraction Mode.
  692. @xref{Fraction Mode}.)
  693. X
  694. A decimal integer is represented as an optional sign followed by a
  695. sequence of digits.  Grouping (@pxref{Grouping Digits}) can be used to
  696. insert a comma at every third digit for display purposes, but such
  697. commas are not allowed during the entry of numbers.@refill
  698. X
  699. @kindex #
  700. A non-decimal integer is represented as an optional sign, a radix
  701. between 2 and 36, a @samp{#} symbol, and one or more digits.  For radix 11
  702. and above, the letters A through Z (upper- or lower-case) count as
  703. digits and do not terminate numeric entry mode.  @xref{Radix Modes}, for how
  704. to set the default radix for display of integers.  Numbers of any radix
  705. may be entered at any time.  If you press @kbd{#} at the beginning of a
  706. number, the current display radix is used.@refill
  707. X
  708. @node Fractions, Floats, Integers, Data Types
  709. @section Fractions
  710. X
  711. @noindent
  712. @cindex Fractions
  713. A @dfn{fraction} is a ratio of two integers.  Fractions are traditionally
  714. written ``2/3'' but Calc uses the notation @samp{2:3}.  (The @kbd{/} key
  715. performs RPN division; the following two sequences push the number
  716. @samp{2:3} on the stack:  @kbd{2 :@: 3 @key{RET}}, @kbd{2 @key{RET} 3 /},
  717. assuming Fraction Mode has been enabled.)
  718. When the Calculator produces a fractional result it always reduces it to
  719. simplest form, which may in fact be an integer.@refill
  720. X
  721. Fractions may also be entered in a three-part form, where @samp{2:3:4}
  722. represents two-and-three-quarters.  @xref{Fraction Formats}, for fraction
  723. display formats.@refill
  724. X
  725. Non-decimal fractions are entered and displayed as
  726. @samp{@var{radix}#@var{num}:@var{denom}} (or in the analogous three-part
  727. form).  The numerator and denominator always use the same radix.@refill
  728. X
  729. @node Floats, Complex Numbers, Fractions, Data Types
  730. @section Floats
  731. X
  732. @noindent
  733. @cindex Floating-point numbers
  734. A floating-point number or @dfn{float} is a number stored in scientific
  735. notation.  The number of significant digits in the fractional part is
  736. governed by the current floating precision (@pxref{Precision}).  The
  737. range of acceptable values is from @c{$10^{-4000000}$}
  738. @cite{10^-4000000} to @c{$10^{4000000}$}
  739. @cite{10^4000000},
  740. plus zero and corresponding negative values.
  741. X
  742. Calculations that would exceed the allowable range of values (such
  743. as @samp{exp(exp(20))}) are left in symbolic form by the Calculator.
  744. The messages ``floating-point overflow'' or ``floating-point underflow''
  745. indicate that during the calculation, a number would have been produced
  746. that was too large or too close to zero, respectively, to be represented
  747. by Calc.  This does not necessarily mean the final result would have
  748. overflowed, just that an overflow occurred while computing the result.
  749. X
  750. If a rational number and a float are mixed in a calculation, the result
  751. will in general be expressed as a float.  Commands that require an integer
  752. value (such as @code{calc-gcd}) will also accept integer-valued floats,
  753. i.e., a floating-point number with nothing after the decimal point.
  754. X
  755. Floats are identified by the presence of a decimal point and/or an
  756. exponent.  In general a float consists of an optional sign, digits
  757. including an optional decimal point, and an optional exponent consisting
  758. of an @samp{e}, an optional sign, and one to seven exponent digits.
  759. For example, @samp{23.5e-2} is 23.5 times ten to the minus-second power,
  760. or 0.235.
  761. X
  762. Floating-point numbers are normally displayed in decimal notation with
  763. all significant figures shown.  Exceedingly large or small numbers are
  764. displayed in scientific notation.  Various other display options are
  765. available.  @xref{Float Formats}.
  766. X
  767. @cindex Accuracy of computations
  768. Floating-point numbers are stored in decimal, not binary.  The result
  769. of each operation is rounded to the nearest value representable in the
  770. number of significant digits specified by the current precision,
  771. rounding away from zero in the case of a tie.  Thus (in the default
  772. display mode) what you see is exactly what you get.  Some operations such
  773. as square roots and transcendental functions are performed with several
  774. digits of extra precision and then rounded down, in an effort to make the
  775. final result accurate to the full requested precision.  However,
  776. accuracy is not rigorously guaranteed.  If you suspect the validity of a
  777. result, try doing the same calculation in a higher precision.  The
  778. Calculator's arithmetic is not intended to be IEEE-conformant in any
  779. way.@refill
  780. X
  781. While floats are always @emph{stored} in decimal, they can be entered
  782. and displayed in any radix just like integers and fractions.  The
  783. notation @samp{@var{radix}#@var{ddd}.@var{ddd}} is a floating-point
  784. number whose digits are in the specified radix.  Note that the @samp{.}
  785. is usually referred to as a ``radix point'' rather than a decimal
  786. point in this case.  The number @samp{8#123.4567} is defined as
  787. @samp{8#1234567 * 8^-4}.  If the radix is 14 or less, you can use
  788. @samp{e} notation to write a non-decimal number in scientific notation.
  789. The exponent is written in decimal, and is considered to be a power
  790. of the radix: @samp{8#1234567e-4}.  If the radix is 15 or above, the
  791. letter @samp{e} is a digit, so scientific notation must be written
  792. out, e.g., @samp{16#123.4567*16^2}.  The first two exercises of the
  793. Modes Tutorial explore some of the properties of non-decimal floats.
  794. X
  795. @node Complex Numbers, Infinities, Floats, Data Types
  796. @section Complex Numbers
  797. X
  798. @noindent
  799. @cindex Complex numbers
  800. There are two supported formats for complex numbers: rectangular and
  801. polar.  The default format is rectangular, displayed in the form
  802. @samp{(@var{real},@var{imag})} where @var{real} is the real part and
  803. @var{imag} is the imaginary part, each of which may be any real number.
  804. Rectangular complex numbers can also be displayed in @samp{@var{a}+@var{b}i}
  805. notation; @pxref{Complex Formats}.@refill
  806. X
  807. Polar complex numbers are displayed in the form `@t{(}@var{r}@t{;}@c{$\theta$}
  808. @var{theta}@t{)}'
  809. where @var{r} is the nonnegative magnitude and @c{$\theta$}
  810. @var{theta} is the argument
  811. or phase angle.  The range of @c{$\theta$}
  812. @var{theta} depends on the current angular
  813. mode (@pxref{Angular Modes}); it is generally between @i{-180} and
  814. @i{+180} degrees or the equivalent range in radians.@refill
  815. X
  816. Complex numbers are entered in stages using incomplete objects.
  817. @xref{Incomplete Objects}.
  818. X
  819. Operations on rectangular complex numbers yield rectangular complex
  820. results, and similarly for polar complex numbers.  Where the two types
  821. are mixed, or where new complex numbers arise (as for the square root of
  822. a negative real), the current @dfn{Polar Mode} is used to determine the
  823. type.  @xref{Polar Mode}.
  824. X
  825. A complex result in which the imaginary part is zero (or the phase angle
  826. is 0 or 180 degrees or @c{$\pi$}
  827. @cite{pi} radians) is automatically converted to a real
  828. number.
  829. X
  830. @node Infinities, Vectors and Matrices, Complex Numbers, Data Types
  831. @section Infinities
  832. X
  833. @noindent
  834. @cindex Infinity
  835. @cindex @code{inf} variable
  836. @cindex @code{uinf} variable
  837. @cindex @code{nan} variable
  838. @vindex inf
  839. @vindex uinf
  840. @vindex nan
  841. The word @code{inf} represents the mathematical concept of @dfn{infinity}.
  842. Calc actually has three slightly different infinity-like values:
  843. @code{inf}, @code{uinf}, and @code{nan}.  These are just regular
  844. variable names (@pxref{Variables}); you should avoid using these
  845. names for your own variables because Calc gives them special
  846. treatment.  Infinities, like all variable names, are normally
  847. entered using algebraic entry.
  848. X
  849. Mathematically speaking, it is not rigorously correct to treat
  850. ``infinity'' as if it were a number, but mathematicians often do
  851. so informally.  When they say that @samp{1 / inf = 0}, what they
  852. really mean is that @cite{1 / x}, as @cite{x} becomes larger and
  853. larger, becomes arbitrarily close to zero.  So you can imagine
  854. that if @cite{x} got ``all the way to infinity,'' then @cite{1 / x}
  855. would go all the way to zero.  Similarly, when they say that
  856. @samp{exp(inf) = inf}, they mean that @c{$e^x$}
  857. @cite{exp(x)} grows without
  858. bound as @cite{x} grows.  The symbol @samp{-inf} likewise stands
  859. for an infinitely negative real value; for example, we say that
  860. @samp{exp(-inf) = 0}.  You can have an infinity pointing in any
  861. direction on the complex plane:  @samp{sqrt(-inf) = i inf}.
  862. X
  863. The same concept of limits can be used to define @cite{1 / 0}.  We
  864. really want the value that @cite{1 / x} approaches as @cite{x}
  865. approaches zero.  But if all we have is @cite{1 / 0}, we can't
  866. tell which direction @cite{x} was coming from.  If @cite{x} was
  867. positive and decreasing toward zero, then we should say that
  868. @samp{1 / 0 = inf}.  But if @cite{x} was negative and increasing
  869. toward zero, the answer is @samp{1 / 0 = -inf}.  In fact, @cite{x}
  870. could be an imaginary number, giving the answer @samp{i inf} or
  871. @samp{-i inf}.  Calc uses the special symbol @samp{uinf} to mean
  872. @dfn{undirected infinity}, i.e., a value which is infinitely
  873. large but with an unknown sign (or direction on the complex plane).
  874. X
  875. Calc actually has three modes that say how infinities are handled.
  876. Normally, infinities never arise from calculations that didn't
  877. already have them.  Thus, @cite{1 / 0} is treated simply as an
  878. error and left unevaluated.  The @kbd{m i} (@code{calc-infinite-mode})
  879. command (@pxref{Infinite Mode}) enables a mode in which
  880. @cite{1 / 0} evaluates to @code{uinf} instead.  There is also
  881. an alternative type of infinite mode which says to treat zeros
  882. as if they were positive, so that @samp{1 / 0 = inf}.  While this
  883. is less mathematically correct, it may be the answer you want in
  884. some cases.
  885. X
  886. Since all infinities are ``as large'' as all others, Calc simplifies,
  887. e.g., @samp{5 inf} to @samp{inf}.  Another example is
  888. @samp{5 - inf = -inf}, where the @samp{-inf} is so large that
  889. adding a finite number like five to it does not affect it.
  890. Note that @samp{a - inf} also results in @samp{-inf}; Calc assumes
  891. that variables like @code{a} always stand for finite quantities.
  892. Just to show that infinities really are all the same size,
  893. note that @samp{sqrt(inf) = inf^2 = exp(inf) = inf} in Calc's
  894. notation.
  895. X
  896. It's not so easy to define some formulas like @samp{0 * inf} and
  897. @samp{inf / inf}.  Depending on where these zeros and infinities
  898. came from, the answer could be literally anything.  The latter
  899. formula could be the limit of @cite{x / x} (giving a result of one),
  900. or @cite{2 x / x} (giving two), or @cite{x^2 / x} (giving @code{inf}),
  901. or @cite{x / x^2} (giving zero).  Calc uses the symbol @code{nan}
  902. to represent such an @dfn{indeterminate} value.  (The name ``nan''
  903. comes from analogy with the ``NAN'' concept of IEEE standard
  904. arithmetic; it stands for ``Not A Number.''  This is somewhat of a
  905. misnomer, since @code{nan} @emph{does} stand for some number or
  906. infinity, it's just that @emph{which} number it stands for
  907. cannot be determined.)  In Calc's notation, @samp{0 * inf = nan}
  908. and @samp{inf / inf = nan}.  A few other common indeterminate
  909. expressions are @samp{inf - inf} and @samp{inf ^ 0}.  Also,
  910. @samp{0 / 0 = nan} if you have turned on ``infinite mode''
  911. (as described above).
  912. X
  913. Infinities are especially useful as parts of @dfn{intervals}.
  914. @xref{Interval Forms}.
  915. X
  916. @node Vectors and Matrices, Strings, Infinities, Data Types
  917. @section Vectors and Matrices
  918. X
  919. @noindent
  920. @cindex Vectors
  921. @cindex Plain vectors
  922. @cindex Matrices
  923. The @dfn{vector} data type is flexible and general.  A vector is simply a
  924. list of zero or more data objects.  When these objects are numbers, the
  925. whole is a vector in the mathematical sense.  When these objects are
  926. themselves vectors of equal (nonzero) length, the whole is a @dfn{matrix}.
  927. A vector which is not a matrix is referred to here as a @dfn{plain vector}.
  928. X
  929. A vector is displayed as a list of comma-separated values enclosed in
  930. square brackets:  @samp{[1, 2, 3]}.  Thus the following is a 2 row by
  931. 3 column matrix:  @samp{[[1, 2, 3], [4, 5, 6]]}.  Vectors, like complex
  932. numbers, are entered as incomplete objects.  @xref{Incomplete Objects}.
  933. During algebraic entry, vectors are entered all at once in the usual
  934. brackets-and-commas form.  Matrices may be entered algebraically as nested
  935. vectors, or using the shortcut notation @samp{[1, 2, 3; 4, 5, 6]},
  936. with rows separated by semicolons.  The commas may usually be omitted
  937. when entering vectors:  @samp{[1 2 3]}.  Curly braces may be used in
  938. place of brackets: @samp{@{1, 2, 3@}}, but the commas are required in
  939. this case.
  940. X
  941. Traditional vector and matrix arithmetic is also supported;
  942. @pxref{Basic Arithmetic} and @pxref{Matrix Functions}.
  943. Many other operations are applied to vectors element-wise.  For example,
  944. the complex conjugate of a vector is a vector of the complex conjugates
  945. of its elements.@refill
  946. X
  947. @tindex vec
  948. Algebraic functions for building vectors include @samp{vec(a, b, c)}
  949. to build @samp{[a, b, c]}, @samp{cvec(a, n, m)} to build an @c{$n\times m$}
  950. @asis{@var{n}x@var{m}}
  951. matrix of @samp{a}s, and @samp{index(n)} to build a vector of integers
  952. from 1 to @samp{n}.
  953. X
  954. @node Strings, HMS Forms, Vectors and Matrices, Data Types
  955. @section Strings
  956. X
  957. @noindent
  958. @kindex "
  959. @cindex Strings
  960. @cindex Character strings
  961. Character strings are not a special data type in the Calculator.
  962. Rather, a string is represented simply as a vector all of whose
  963. elements are integers in the range 0 to 255.  You can enter a string
  964. at any time by pressing the @kbd{"} key.  Quotation marks and
  965. backslashes are written @samp{\"} and @samp{\\}, respectively,
  966. inside strings.  Other notations introduced by backslashes are:
  967. X
  968. @example
  969. \a     7
  970. \b     8
  971. \e     27
  972. \f     12
  973. \n     10
  974. \r     13
  975. \t     9
  976. \^@    0
  977. \^a-z  1-26
  978. \^[    27
  979. \^\\   28
  980. \^]    29
  981. \^^    30
  982. \^_    31
  983. \^?    127
  984. @end example
  985. X
  986. @noindent
  987. Finally, a backslash followed by three octal digits produces any
  988. character from its ASCII code.
  989. X
  990. @kindex d "
  991. @pindex calc-display-strings
  992. Strings are normally displayed in vector-of-integers form.  The
  993. @w{@kbd{d "}} (@code{calc-display-strings}) command toggles a mode in
  994. which any vectors of the appropriate form are displayed as quoted
  995. strings instead.
  996. X
  997. The backslash notations shown above are also used for displaying
  998. strings.  Characters 128 and above are not translated by Calc; unless
  999. you have an Emacs modified for 8-bit fonts, these will show up in
  1000. backslash-octal-digits notation.  But for characters below 32, and
  1001. for character 127, Calc uses the backslash-letter combination if
  1002. there is one, or otherwise uses a @samp{\^} sequence.
  1003. X
  1004. The only Calc feature that uses strings is @dfn{compositions};
  1005. @pxref{Compositions}.  Strings also provide a convenient
  1006. way to do conversions between ASCII characters and integers.
  1007. X
  1008. @tindex string
  1009. There is a @code{string} function which provides a different display
  1010. format for strings.  Basically, @samp{string(@var{s})}, where @var{s}
  1011. is a vector of integers in the proper range, is displayed as the
  1012. corresponding string of characters with no surrounding quotations
  1013. marks or other modifications.  Thus @samp{string("ABC")} (or
  1014. @samp{string([65 66 67])}) will look like @samp{ABC} on the stack.
  1015. This happens regardless of whether @w{@kbd{d "}} has been used.  The
  1016. only way to turn it off is to use @kbd{d U} (unformatted language
  1017. mode) which will display @samp{string("ABC")} instead.
  1018. X
  1019. Control characters are displayed somewhat differently by @code{string}.
  1020. Characters below 32, and character 127, are shown using @samp{^} notation
  1021. (same as shown above, but without the backslash).  The quote and
  1022. backslash characters are left alone, as are characters 128 and above.
  1023. X
  1024. @tindex bstring
  1025. The @code{bstring} function is just like @code{string} except that
  1026. the resulting string is breakable across multiple lines if it doesn't
  1027. fit all on one line.  Potential break points occur at every space
  1028. character in the string.
  1029. X
  1030. @node HMS Forms, Date Forms, Strings, Data Types
  1031. @section HMS Forms
  1032. X
  1033. @noindent
  1034. @cindex Hours-minutes-seconds forms
  1035. @cindex Degrees-minutes-seconds forms
  1036. @dfn{HMS} stands for Hours-Minutes-Seconds; when used as an angular
  1037. argument, the interpretation is Degrees-Minutes-Seconds.  All functions
  1038. that operate on angles accept HMS forms.  These are interpreted as
  1039. degrees regardless of the current angular mode.  It is also possible to
  1040. use HMS as the angular mode so that calculated angles are expressed in
  1041. degrees, minutes, and seconds.
  1042. X
  1043. @kindex @@
  1044. @kindex ' (HMS forms)
  1045. @kindex " (HMS forms)
  1046. @kindex h (HMS forms)
  1047. @kindex o (HMS forms)
  1048. @kindex m (HMS forms)
  1049. @kindex s (HMS forms)
  1050. The default format for HMS values is
  1051. @samp{@var{hours}@@ @var{mins}' @var{secs}"}.  During entry, the letters
  1052. @samp{h} (for ``hours'') or
  1053. @samp{o} (approximating the ``degrees'' symbol) are accepted as well as
  1054. @samp{@@}, @samp{m} is accepted in place of @samp{'}, and @samp{s} is
  1055. accepted in place of @samp{"}.
  1056. The @var{hours} value is an integer (or integer-valued float).
  1057. The @var{mins} value is an integer or integer-valued float between 0 and 59.
  1058. The @var{secs} value is a real number between 0 (inclusive) and 60
  1059. (exclusive).  A positive HMS form is interpreted as @var{hours} +
  1060. @var{mins}/60 + @var{secs}/3600.  A negative HMS form is interpreted
  1061. as - @var{hours} - @var{mins}/60 - @var{secs}/3600.
  1062. Display format for HMS forms is quite flexible.  @xref{HMS Formats}.@refill
  1063. X
  1064. HMS forms can be added and subtracted.  When they are added to numbers,
  1065. the numbers are interpreted according to the current angular mode.  HMS
  1066. forms can also be multiplied and divided by real numbers.  Dividing
  1067. two HMS forms produces a real-valued ratio of the two angles.
  1068. X
  1069. @pindex calc-time
  1070. @cindex Time of day
  1071. Just for kicks, @code{calc-time} pushes the current time of day on
  1072. the stack as an HMS form.
  1073. X
  1074. @node Date Forms, Modulo Forms, HMS Forms, Data Types
  1075. @section Date Forms
  1076. X
  1077. @noindent
  1078. @cindex Date forms
  1079. A @dfn{date form} represents a date and possibly an associated time.
  1080. Simple date arithmetic is supported:  Adding a number to a date
  1081. produces a new date shifted by that many days; adding an HMS form to
  1082. a date shifts it by that many hours.  Subtracting two date forms
  1083. computes the number of days between them (represented as a simple
  1084. number).  Many other operations, such as multiplying two date forms,
  1085. are nonsensical and are not allowed by Calc.
  1086. X
  1087. Date forms are entered and displayed enclosed in @samp{< >} brackets.
  1088. The default format is, e.g., @samp{<Wed Jan 9, 1991>} for dates,
  1089. or @samp{<3:32:20pm Wed Jan 9, 1991>} for dates with times.
  1090. Input is flexible; date forms can be entered in any of the usual
  1091. notations for dates and times.  @xref{Date Formats}.
  1092. X
  1093. Date forms are stored internally as numbers, specifically the number
  1094. of days since midnight on the morning of January 1 of the year 1 AD.
  1095. If the internal number is an integer, the form represents a date only;
  1096. if the internal number is a fraction or float, the form represents
  1097. a date and time.  For example, @samp{<6:00am Wed Jan 9, 1991>}
  1098. is represented by the number 726842.25.  The standard precision of
  1099. 12 decimal digits is enough to ensure that a (reasonable) date and
  1100. time can be stored without roundoff error.
  1101. X
  1102. If the current precision is greater than 12, date forms will keep
  1103. additional digits in the seconds portion.  For example, if the
  1104. precision is 15, the seconds will keep three digits after the
  1105. decimal point.  Decreasing the precision below 12 may cause the
  1106. time part of a date form to become inaccurate.  This can also happen
  1107. if astronomically high years are used, though this will not be an
  1108. issue in everyday (or even everymillenium) use.  Note that date
  1109. forms without times are stored as exact integers, so roundoff is
  1110. never an issue for them.
  1111. X
  1112. You can use the @code{calc-pack} and @code{calc-unpack} commands
  1113. to get at the numerical representation of a date form.
  1114. @xref{Packing and Unpacking}.
  1115. X
  1116. Date forms can go arbitrarily far into the future or past.  Negative
  1117. year numbers represent years BC.  Calc uses a combination of the
  1118. Gregorian and Julian calendars, following the history of Great
  1119. Britain and the British colonies.  This is the same calendar that
  1120. is used by the @file{cal} program in most Unix implementations.
  1121. X
  1122. @cindex Julian calendar
  1123. @cindex Gregorian calendar
  1124. Some historical background:  The Julian calendar was created by
  1125. Julius Caesar in the year 46 BC as an attempt to fix the gradual
  1126. drift caused by the lack of leap years in the calendar used
  1127. until that time.  The Julian calendar introduced an extra day in
  1128. all years divisible by four.  After some initial confusion, the
  1129. calendar was adopted around the year we call 8 AD.  Some centuries
  1130. later it became apparent that the Julian year of 365.25 days was
  1131. itself not quite right.  In 1582 Pope Gregory XIII introduced the
  1132. Gregorian calendar, which added the new rule that years divisible
  1133. by 100, but not by 400, were not to be considered leap years
  1134. despite being divisible by four.  Many countries delayed adoption
  1135. of the Gregorian calendar because of religious differences;
  1136. in Britain it was put off until the year 1752, by which time
  1137. the Julian calendar had fallen eleven days behind the true
  1138. seasons.  So the switch to the Gregorian calendar in early
  1139. September 1752 introduced a discontinuity:  The day after
  1140. Sep 2, 1752 is Sep 14, 1752.  Calc follows this convention.
  1141. To take another example, Russia waited until 1918 before
  1142. adopting the new calendar, and thus needed to remove thirteen
  1143. days (between Feb 1, 1918 and Feb 14, 1918).  This means that
  1144. Calc's reckoning will be inconsistent with Russian history between
  1145. 1752 and 1918, and similarly for various other countries.
  1146. X
  1147. Today's timekeepers introduce an occasional ``leap second'' as
  1148. well, but Calc does not take these minor effects into account.
  1149. (If it did, it would have to report a non-integer number of days
  1150. between, say, @samp{<12:00am Mon Jan 1, 1900>} and
  1151. @samp{<12:00am Sat Jan 1, 2000>}.)
  1152. X
  1153. Calc uses the Julian calendar for all dates before the year 1752,
  1154. including dates BC when the Julian calendar technically had not
  1155. yet been invented.  Thus the claim that day number @i{-10000} is
  1156. called ``August 16, 28 BC'' should be taken with a grain of salt.
  1157. X
  1158. Please note that there is no ``year 0''; the day before
  1159. @samp{<Sat Jan 1, +1>} is @samp{<Fri Dec 31, -1>}.  These are
  1160. days 0 and @i{-1} respectively in Calc's internal numbering scheme.
  1161. X
  1162. @cindex Julian day counting
  1163. Another day counting system in common use is, confusingly, also
  1164. called ``Julian.''  It was invented in 1583 by Joseph Justus
  1165. Scaliger, who named it in honor of his father Julius Caesar
  1166. Scaliger.  For obscure reasons he chose to start his day
  1167. numbering on Jan 1, 4713 BC at noon, which in Calc's scheme
  1168. is @i{-1721423.5} (recall that Calc starts at midnight instead
  1169. of noon).  Thus to convert a Calc date code obtained by
  1170. unpacking a date form into a Julian day number, simply add
  1171. 1721423.5.  The Julian code for @samp{6:00am Jan 9, 1991}
  1172. is 2448265.75.  The built-in @kbd{t J} command performs
  1173. this conversion for you.
  1174. X
  1175. @cindex Unix time format
  1176. The Unix operating system measures time as an integer number of
  1177. seconds since midnight, Jan 1, 1970.  To convert a Calc date
  1178. value into a Unix time stamp, first subtract 719164 (the code
  1179. for @samp{<Jan 1, 1970>}), then multiply by 86400 (the number of
  1180. seconds in a day) and press @kbd{R} to round to the nearest
  1181. integer.  If you have a date form, you can simply subtract the
  1182. day @samp{<Jan 1, 1970>} instead of unpacking and subtracting
  1183. 719164.  Likewise, divide by 86400 and add @samp{<Jan 1, 1970>}
  1184. to convert from Unix time to a Calc date form.  (Note that
  1185. Unix normally maintains the time in the GMT time zone; you may
  1186. need to subtract five hours to get New York time, or eight hours
  1187. for California time.  The same is usually true of Julian day
  1188. counts.)  The built-in @kbd{t U} command performs these
  1189. conversions.
  1190. X
  1191. @node Modulo Forms, Error Forms, Date Forms, Data Types
  1192. @section Modulo Forms
  1193. X
  1194. @noindent
  1195. @cindex Modulo forms
  1196. A @dfn{modulo form} is a real number which is taken modulo (i.e., within
  1197. an integer multiple of) some value @cite{M}.  Arithmetic modulo @cite{M}
  1198. often arises in number theory.  Modulo forms are written
  1199. `@i{a} @t{mod} @i{M}',
  1200. where @cite{a} and @cite{M} are real numbers or HMS forms, and
  1201. @c{$0 \le a < M$}
  1202. @cite{0 <= a < @var{M}}.
  1203. In many applications @cite{a} and @cite{M} will be
  1204. integers but this is not required.@refill
  1205. X
  1206. Modulo forms are not to be confused with the modulo operator @samp{%}.
  1207. The expression @samp{27 % 10} means to compute 27 modulo 10 to produce
  1208. the result 7.  Further computations treat this 7 as just a regular integer.
  1209. The expression @samp{27 mod 10} produces the result @samp{7 mod 10};
  1210. further computations with this value are again reduced modulo 10 so that
  1211. the result always lies in the desired range.
  1212. X
  1213. When two modulo forms with identical @cite{M}'s are added or multiplied,
  1214. the Calculator simply adds or multiplies the values, then reduces modulo
  1215. @cite{M}.  If one argument is a modulo form and the other a plain number,
  1216. the plain number is treated like a compatible modulo form.  It is also
  1217. possible to raise modulo forms to powers; the result is the value raised
  1218. to the power, then reduced modulo @cite{M}.  (When all values involved
  1219. are integers, this calculation is done much more efficiently than
  1220. actually computing the power and then reducing.)
  1221. X
  1222. @cindex Modulo division
  1223. Two modulo forms `@i{a} @t{mod} @i{M}' and `@i{b} @t{mod} @i{M}'
  1224. can be divided if @cite{a}, @cite{b}, and @cite{M} are all
  1225. integers.  The result is the modulo form which, when multiplied by
  1226. `@i{b} @t{mod} @i{M}', produces `@i{a} @t{mod} @i{M}'.  If
  1227. SHAR_EOF
  1228. true || echo 'restore of calc.texinfo failed'
  1229. fi
  1230. echo 'End of  part 37'
  1231. echo 'File calc.texinfo is continued in part 38'
  1232. echo 38 > _shar_seq_.tmp
  1233. exit 0
  1234. exit 0 # Just in case...
  1235. -- 
  1236. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  1237. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  1238. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  1239. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  1240.