/[dtapublic]/pubs/books/ucbka/trunk/c_xtn0/c_xtn0.tex
ViewVC logotype

Annotation of /pubs/books/ucbka/trunk/c_xtn0/c_xtn0.tex

Parent Directory Parent Directory | Revision Log Revision Log


Revision 140 - (hide annotations) (download) (as text)
Mon Jul 3 01:59:16 2017 UTC (7 years, 3 months ago) by dashley
File MIME type: application/x-tex
File size: 72668 byte(s)
Change SVN properties for EOL and keyword expansion.
1 dashley 140 %$Header$
2    
3     \chapter[\cxtnzeroshorttitle{}]{\cxtnzerolongtitle{}}
4    
5     \label{cxtn0}
6    
7     \beginchapterquote{``One way to prevent progress is by arguing that any first
8     step is unfair to somebody.''}
9     {Unknown}
10    
11     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
12     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
13     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
14     \section{Introduction}
15     %Section Tag: INT0
16     \label{cxtn0:sint0}
17    
18     The Tcl scripting language provides for \emph{extensions}, which are
19     compiled-in commands added to the language. These extensions have advantages
20     for performance, because they allow the high-frequency interactions to occur
21     in compiled code, and the lower-frequency interactions to occur in
22     a Tcl script.
23    
24     This chapter describes the extensions that have been added to the Tcl
25     interpreters which are part of \emph{The Iju Tool Set}.
26    
27     Many of the parameter formats are common between the Tcl extensions
28     (described in this chapter) and the DOS command-line
29     utilities (described in Chapter
30     \cdcmzeroxrefhyphen{}\ref{cdcm0}). For this reason, to avoid
31     redundancy of documentation, the parameter formats described
32     in Section \ctinzeroxrefhyphen{}\ref{ctin0:sccl0} apply both to the
33     Tcl extensions
34     and the DOS command-line utilities.
35    
36    
37    
38     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
39     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
40     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
41     \section{Version Control Extensions}
42    
43    
44     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
45     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
46     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
47     \subsection{vcinfo}
48    
49     \index{vcinfo@\emph{vcinfo}}
50     \begin{tclcommandname}{vcinfo}%
51     retrieves embedded static version and version control information for
52     IjuScripter or IjuConsole.
53     This allows a script to determine which version of script interpreter it is
54     running under.
55     \end{tclcommandname}
56    
57     \begin{tclcommandsynopsis}
58     \tclcommandsynopsisline{vcinfo}{-ijutoolsversion}
59     \tclcommandsynopsisline{vcinfo}{?-crconly? -fileversion filename}
60     \tclcommandsynopsisline{vcinfo}{?-crconly? -extensionversion extensionname}
61     \tclcommandsynopsisline{vcinfo}{-buildmanifest}
62     \end{tclcommandsynopsis}
63    
64     \begin{tclcommanddescription}
65     The \emph{vcinfo} command returns information about the version of the
66     IjuScripter or IjuConsole executable program, about the version of
67     a specific source file, or [collectively] about the version of all files
68     which [directly] contribute to the behavior of an embedded Tcl/Tk extension.
69     This command can be used to
70     inquire about the version of the executable program or certain of its
71     components.
72    
73     Most commonly, this command is used to help assure reproducibility
74     of a script's behavior by coding a script so that it will
75     run only under a specific version(s) of executable.
76    
77     \tclcommanddescsynopsisline{vcinfo}{-ijutoolsversion}
78     \begin{tclcommandinternaldescription}
79     Returns a string identifying the version number of the IjuScripter or IjuConsole
80     executable. The string will be of the form ``vm.nx'', where \emph{v} is the letter
81     ``v'', \emph{m} is the major version number, \emph{n} is the minor version number, and
82     \emph{x} is an optional lower-case letter identifying a service release which fixes defects
83     but adds no new functionality.
84    
85     For example, a return value of ``v1.03'' would identify version 1.03. A return
86     value of ``v1.03c'' would identify the third service release to version 1.03; with
87     the service release designed to correct defects present in version 1.03b, but adding
88     no new functionality.
89     \end{tclcommandinternaldescription}
90    
91     \tclcommanddescsynopsisline{vcinfo}{-fileversion filename}
92     \begin{tclcommandinternaldescription}
93     (Not yet implemented.) Returns a string with version control information for the file
94     \emph{filename}, which must be part of the IjuScripter or IjuConsole build.
95     An error is generated if a \emph{filename} which is not part of the build
96     is supplied. This form of the \emph{vcinfo} command is not normally used from a script.
97     \end{tclcommandinternaldescription}
98    
99     \tclcommanddescsynopsisline{vcinfo}{-crconly -fileversion filename}
100     \begin{tclcommandinternaldescription}
101     (Not yet implemented.) Returns the CRC32 of the the string result of the command above.
102     Note that the value returned is the CRC of the version control information embedded in the file
103     rather than the CRC of the file.
104     \emph{filename} must be part of the IjuScripter or IjuConsole build, and
105     an error is generated if a \emph{filename} which is not part of the build is supplied.
106     This form is
107     useful because it supplies a terse result of eight hexadecimal digits which can easily
108     establish with a probability of about $1-2^{-32}$ that two versions of IjuScripter or IjuConsole
109     have the same file component; or establish with unity probability that they do not.
110     \end{tclcommandinternaldescription}
111    
112     \tclcommanddescsynopsisline{vcinfo}{-extensionversion extensionname}
113     \begin{tclcommandinternaldescription}
114     (Not yet implemented.) Returns a string with version control information for all
115     files which contribute directly to the behavior of the Tcl extension \emph{extensionname},
116     which must be part of the IjuScripter or IjuConsole static build.
117     An error is generated if an \emph{extensionname} which is not part of the build
118     is supplied.
119     \end{tclcommandinternaldescription}
120    
121     \tclcommanddescsynopsisline{vcinfo}{-crconly -extensionversion extensionname}
122     \begin{tclcommandinternaldescription}
123     (Not yet implemented.) Returns the CRC32 of the the string result of the command above.
124     Note that the value returned is the CRC of the version control information embedded in the file(s)
125     rather than the CRC(s) of the file(s).
126     \emph{extensionname} must be part of the IjuScripter or IjuConsole build, and
127     an error is generated if an \emph{extensionname} which is not part of the build is supplied.
128     This form is
129     useful because it supplies a terse result of eight hexadecimal digits which can easily
130     establish with a probability of about $1-2^{-32}$ that two versions of IjuScripter or IjuConsole
131     have the same extension component(s); or establish with unity probability that they do not.
132     \end{tclcommandinternaldescription}
133    
134     \tclcommanddescsynopsisline{vcinfo}{-crconly -buildmanifest}
135     \begin{tclcommandinternaldescription}
136     (Not yet implemented.) Returns the full combined build manifest of IjuScripter and IjuConsole.
137     This includes size and CRC information for every file involved in the build. This form
138     of \emph{vcinfo} is provided for assistance in defect diagnosis.
139     \end{tclcommandinternaldescription}
140    
141     \end{tclcommanddescription}
142    
143    
144     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
145     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
146     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
147     \section{File Transformation Extensions}
148    
149    
150     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
151     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
152     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
153     \section{CRC, Checksum, And Hash Extensions}
154     %Section Tag: CRC0
155    
156    
157     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
158     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
159     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
160     \subsection{crc32}
161     %Subsection Tag: CRC0
162     \label{cxtn0:scrc0:scrc0}
163    
164    
165     \index{crc32@\emph{crc32}}
166     \begin{tclcommandname}{crc32}%
167     generates the CRC-32 of a file or string. This CRC can be reliably used to obtain
168     digital signatures of files or data.
169     \end{tclcommandname}
170    
171     \begin{tclcommandsynopsis}
172     \tclcommandsynopsisline{crc32}{filename}
173     \tclcommandsynopsisline{crc32}{-string binarystringval}
174    
175     Note: as of 01/01/01, the ``stateful'' forms below are not yet implemented.
176    
177     \tclcommandsynopsisline{crc32}{-initialstate}
178     \tclcommandsynopsisline{crc32}{-advancestate state filename}
179     \tclcommandsynopsisline{crc32}{-advancestate -string state binarystringval}
180     \tclcommandsynopsisline{crc32}{-crcfromstate state}
181     \end{tclcommandsynopsis}
182    
183     \begin{tclcommanddescription}
184     The \emph{crc32} command forms the CRC-32 of the binary contents of a file
185     or of the binary contents of a string. The CRC-32 is useful as a digital
186     signature, and can be used with unity probability to determine that two
187     files are different, or with a probability of about $1-2^{-32}$ to determine
188     that two files are almost certainly identical.
189    
190     In the invocations below, the CRC-32 is always returned as a 10-character ASCII string
191     of the form \emph{``0xDDDDDDDD''}, where \emph{``DDDDDDDD''} is the hexadecimal representation
192     of the 32-bit CRC-32, and \emph{``0x''} is a constant 2-character prefix
193     (the ``zero'' digit followed by ``x'') which is included for
194     aesthetics. It is guaranteed that:
195    
196     \begin{itemize}
197     \item The string returned will be exclusively ASCII.
198     \item The string will have a length of exactly 10 characters.
199     \item The first two characters of the string will be \emph{``0x''}.
200     \item The hexadecimal representation
201     will be exactly 8 characters, and any letters
202     in the hexadecimal representation will be upper-case.
203     \end{itemize}
204    
205     \tclcommanddescsynopsisline{crc32}{filename}
206     \begin{tclcommandinternaldescription}
207     Returns the CRC-32 of \emph{filename}, treated as an ordered collection of bytes (i.e.
208     newline characters and file termination characters are not processed---the file is
209     treated as a binary file). \emph{filename} must be specified in the form accepted by
210     the Tcl internals (forward slashes only).
211     \end{tclcommandinternaldescription}
212    
213     \tclcommanddescsynopsisline{crc32}{-string binarystringval}
214     \begin{tclcommandinternaldescription}
215     Returns the CRC-32 of \emph{binarystringval}, treated as an ordered collection of bytes (i.e.
216     newline characters and string termination characters are not honored---the string is
217     treated as a binary string).\footnote{For an ASCII string, the \emph{crc32} extension will
218     behave as expected, and will process all characters up to but not including the zero
219     terminator. However, the \emph{crc32} extension will also correctly process non-ASCII strings.}
220     \end{tclcommandinternaldescription}
221    
222     \tclcommanddescsynopsisline{crc32}{-initialstate}
223     \tclcommanddescsynopsisline{crc32}{-advancestate state filename}
224     \tclcommanddescsynopsisline{crc32}{-advancestate -string state filename}
225     \tclcommanddescsynopsisline{crc32}{-crcfromstate state}
226     \begin{tclcommandinternaldescription}
227     The four forms above are designed to allow ``running CRCs'' to be calculated; in which
228     the CRC is calculated piecemeal. These forms allow the caller to retain the internal
229     state vector of the CRC calculation algorithm.
230    
231     The first form, \emph{crc32 -initialstate}, returns an ASCII representation of the
232     correct initial state vector of the CRC-32 state machine. The client is required
233     to obtain this initial state before beginning a piecemeal CRC calculation. Although the
234     returned string is a constant (it will always be the same), representational details
235     may change in future versions of the \emph{crc32} extension, and so a caller should never
236     make assumptions about what this invocation will return, as these assumptions may
237     render a script incompatible with future versions of \emph{crc32}.
238    
239     The second and third forms, \emph{crc32 -advancestate state filename}
240     and \emph{crc32 -advancestate -string state filename}, apply a file or a binary string
241     to \emph{state} to produce a new \emph{state}, which is returned. This new \emph{state}
242     must be retained by the caller and used in subsequent calls.
243    
244     The final form, \emph{crc32 -crcfromstate state}, maps from the state vector to the
245     calculated CRC, and will return a 10-character ASCII string as described above.
246     \end{tclcommandinternaldescription}
247     \end{tclcommanddescription}
248    
249     \begin{tclcommandusagenotes}
250     (1) The ``piecemeal'' forms are as efficient as the file and string forms---there is no difference
251     in the internal algorithms. The primary cost of the piecemeal forms is in importing and
252     exporting the algorithm state vector to/from an ASCII string.
253     Thus, the piecemeal forms become less efficient when
254     small files or strings are processed, as there are more exports and imports
255     of the state vector. When using the piecemeal forms, processing the data in
256     larger chunks will give better performance.
257    
258     (2) If the \emph{crc32} command is used to signature files, it is recommended that
259     the \texttt{file size} command also be used to lower the probability of falsely
260     assuming two non-identical files are identical yet further. Two files might be
261     assumed identical if they have the same size and the same CRC-32.
262     \end{tclcommandusagenotes}
263    
264     \begin{tclcommandacknowledgements}
265     The \emph{crc32} command was implemented using ideas and C-language
266     code from a website (\cite{bibref:w:ellingsoncrc32pages})
267     provided by Richard A. Ellingson\index{Ellingson, Richard A.}
268     \cite{bibref:i:richardaellingson}. I am especially
269     grateful to Mr. Ellingson for providing these materials publicly
270     and free of charge.
271     \end{tclcommandacknowledgements}
272    
273     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
274     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
275     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
276     \section{Random Number Generation Extensions}
277    
278    
279     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
280     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
281     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
282     \subsection{rngPwrResRndA}
283    
284     \index{rngPwrResRndA@\emph{rngPwrResRndA}}
285     \begin{tclcommandname}{rngPwrResRndA}%
286     generates pseudo-random integers using the power residue
287     method with $\alpha = 7^5 = 16,807$ and
288     $M = 2^{31}-1 = 2,147,483,647$, providing a period of $M - 1 = 2^{31}-2 = 2,147,483,646$
289     (\cite{bibref:b:LeonGarciaProb}, pp. 69-71).
290     \end{tclcommandname}
291    
292     \begin{tclcommandsynopsis}
293     \tclcommandsynopsisline{rngPwrResRndA}{}
294     \tclcommandsynopsisline{rngPwrResRndA}{$N$}
295     \end{tclcommandsynopsis}
296    
297     \begin{tclcommanddescription}
298     The \emph{rngPwrResRndA} command generates pseudo-random positive integers
299     using the [power residue] recursive formula
300    
301     \begin{equation}
302     \label{cxtn0:rngPwrResRndA:eq00}
303     Z_i = \alpha Z_{i-1} mod M,
304     \end{equation}
305    
306     with $(\alpha, M)$ chosen as $(\alpha = 7^5=16,807, M = 2^{31}-1 = 2,147,483,647)$, as
307     indicated above. With these choices of $(\alpha, M)$, the sequence has a period
308     of $M - 1 = 2^{31}-2 = 2,147,483,646$ and good statistical properties.
309    
310     The basis for choosing $(\alpha, M)$ has its origins in number theory, and won't
311     be discussed here. We refer the reader to \cite{bibref:b:LeonGarciaProb}
312     and to mathematical papers on the power residue method.
313    
314     This extension maintains one internal seed value, which is initialized to
315     1,578,127,215 at Tcl/Tk startup.\footnote{There is no scientific
316     reason for the choice of the integer 1,578,127,215 as the
317     startup value. It was chosen arbitrarily with no rationale.}
318     It is not possible to set the internal
319     seed to an arbitrary desired value. The single internal seed value is adequate
320     for most applications which simply require random numbers. If an
321     application requires control over the seed or requires multiple seeds, the ability
322     of this extension to generate the successor of an integer using
323     (\ref{cxtn0:rngPwrResRndA:eq00}) can be used to achieve this functionality in a
324     script.
325    
326    
327     \tclcommanddescsynopsisline{rngPwrResRndA}{}
328     \begin{tclcommandinternaldescription}
329     Buffers the current seed for a return value, then advances this seed using
330     (\ref{cxtn0:rngPwrResRndA:eq00}). Note that the ``old'' value is the value
331     returned, so that after Tcl/Tk startup the first value
332     returned will be 1,578,127,215.
333     \end{tclcommandinternaldescription}
334    
335     \tclcommanddescsynopsisline{rngPwrResRndA}{$N$}
336     \begin{tclcommandinternaldescription}
337     Forms the successor of $N$ using (\ref{cxtn0:rngPwrResRndA:eq00}) and
338     returns this successor. The single internal seed value is not affected.
339     \end{tclcommandinternaldescription}
340    
341     \end{tclcommanddescription}
342    
343    
344     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
345     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
346     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
347     \section{Arbitrary-Length Integer Extensions}
348     %Section Tag: SARB0
349     \label{cxtn0:sarb0}
350    
351     Starting with Version 1.05 of \emph{The Iju Tool Set}, \emph{IjuScripter} and
352     \emph{IjuConsole} contain a limited\footnote{By \emph{limited} we mean that
353     the library was consolidated and simplified. The GNU MP library has as its
354     explicit design goal speed over clarity, and uses many advanced algorithms,
355     such as Karatsuba multiplication and special algorithms for the
356     greatest common divisor of integers. The library was simplified to regain
357     clarity at the expense of efficiency before its incorporation into
358     \emph{The Iju Tool Set}.} version of the
359     \index{GNU!Multiple Precision Arithmetic Library (GMP)}\emph{GNU Multiple Precision
360     Library} \cite{bibref:s:gnumultipleprecisionarithmeticlibrary}.
361     The version of the library incorporated into the tools has been
362     modified not to process integers larger than about 100,000 decimal digits.
363     We feel that this limit is sufficiently high for any practical applications,
364     and also that the computational speed will become unbearable long before the
365     data size limit is approached.
366    
367    
368     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
369     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
370     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
371     \subsection{Error And Overflow Behavior Of Arbitrary-Length Integer Extensions}
372     %Subsection Tag: EAB0
373     \label{cxtn0:sarb0:seab0}
374    
375     The underlying data structure of arbitrary-length integers includes flags
376     to indicate that an arithmetic error has occured. Essentially, these flags are
377     ``NAN'', or ``not-a-number'' flags. They indicate that the result is not
378     an integer. These error flags propagate. Combining a NAN value with a
379     valid integer through a binary operation always results in a NAN value. Naturally,
380     the result of a unary operation on a NAN value is also a NAN value.
381     The nature of NAN propagation is that the first arithmetic operation that
382     creates an error using valid integers as input will generate an overflow error (one of
383     the first two flags listed below).
384     Subsequent operations that use these original errors as input will generate
385     outputs which are ``taint'' errors (the second set of two flags listed below).
386    
387     At the lowest level (in the innards of the `C' code), these flags are
388     bits within an integer. However, for use within Tcl (where all data is string data), these
389     error flags are assigned symbolic strings to indicate the nature of the error. Note that the
390     error flags are only approximate---they don't \emph{precisely} indicate the
391     nature of the error. However, combined with propagation mechanisms,
392     they are adequate to prevent the interpretation
393     of invalid data as valid data. Any result that is predicated on an invalid
394     result will itself be invalid.
395    
396     The four possible error strings are enumerated below. If any Tcl long integer
397     function creates an erroneous result, the result will be assigned one of these
398     four symbolic error strings rather than a string of digits.
399    
400     \begin{itemize}
401     \item \index{GMP\_INTS\_EF\_INTOVF\_POS@\texttt{GMP\_INTS\_EF\_INTOVF\_POS}}
402     \texttt{GMP\_INTS\_EF\_INTOVF\_POS}---the result is too positive (i.e. too
403     large in a positive direction). This error flag is also produced
404     by an attempted division by zero, regardless of the sign of the
405     dividend.
406     \item \index{GMP\_INTS\_EF\_INTOVF\_NEG@\texttt{GMP\_INTS\_EF\_INTOVF\_NEG}}
407     \texttt{GMP\_INTS\_EF\_INTOVF\_NEG}---the result is too negative (i.e. too
408     large in a negative direction).
409     \item \index{GMP\_INTS\_EF\_INTOVF\_TAINT\_POS@\texttt{GMP\_INTS\_EF\_INTOVF\_TAINT\_POS}}
410     \texttt{GMP\_INTS\_EF\_INTOVF\_TAINT\_POS}---the result has been ``tainted''
411     by combination with an integer which has the
412     \texttt{GMP\_INTS\_EF\_INTOVF\_POS} flag set.
413     \item \index{GMP\_INTS\_EF\_INTOVF\_TAINT\_NEG@\texttt{GMP\_INTS\_EF\_INTOVF\_TAINT\_NEG}}
414     \texttt{GMP\_INTS\_EF\_INTOVF\_TAINT\_NEG}---the result has been
415     ``tainted'' by combination with an integer which has the
416     \texttt{GMP\_INTS\_EF\_INTOVF\_NEG} flag set.
417     \end{itemize}
418    
419     Note that the functions which operate on arbitrary length integers will
420     never produce an exception or a fatal error. Instead, they will mark
421     results as NAN, and these NAN results will propagate.
422     This mechanism provides for graceful failures, and also allows complex
423     calculations to be performed without the necessity of checking for
424     errors after every calculation step.
425    
426     Note also that each of the separate arbitrary-length integer extensions described
427     in this section are a ``sub-extension'' to the \texttt{arbint} extension. It
428     should also be noted
429     that many of these extensions perform the same function as a DOS
430     utility with the same name (see Chapter \cdcmzeroxrefhyphen{}\ref{cdcm0}).
431    
432    
433     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
434     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
435     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
436     \subsection{The \texttt{arbint iseflag} Extension}
437    
438     \index{arbint iseflag@\emph{arbint iseflag}}
439     \index{iseflag@\emph{iseflag}}
440     \begin{tclcommandname}{arbint iseflag}%
441     identifies a string as an arbitrary integer error flag (or not) and
442     returns an integer value categorizing the string.
443     \end{tclcommandname}
444    
445     \begin{tclcommandsynopsis}
446     \tclcommandsynopsisline{arbint iseflag }{stringarg}
447     \end{tclcommandsynopsis}
448    
449     \begin{tclcommanddescription}
450     This extension returns:
451     \begin{itemize}
452     \item ``0'' if the string argument supplied is not a recognized
453     error flag.
454     \item ``1'' if the string argument supplied is recognized as the\\
455     \texttt{GMP\_INTS\_EF\_INTOVF\_POS}
456     error flag.
457     \item ``2'' if the string argument supplied is recognized as the\\
458     \texttt{GMP\_INTS\_EF\_INTOVF\_NEG}
459     error flag.
460     \item ``3'' if the string argument supplied is recognized as the\\
461     \texttt{GMP\_INTS\_EF\_INTOVF\_TAINT\_POS}
462     error flag.
463     \item ``4'' if the string argument supplied is recognized as the\\
464     \texttt{GMP\_INTS\_EF\_INTOVF\_TAINT\_NEG}
465     error flag.
466     \end{itemize}
467    
468     This extension is most often used to classify the output of an
469     arbitrary-length integer operation. All valid integers will create
470     a value of zero if passed to this extension as an argument.
471     \end{tclcommanddescription}
472    
473     \begin{tclcommandsampleinvocations}
474     \begin{scriptsize}
475     \begin{verbatim}
476     % arbint iseflag GMP_INTS_EF_INTOVF_NEG
477     2
478     % arbint iseflag 249,422
479     0
480     \end{verbatim}
481     \end{scriptsize}
482     \end{tclcommandsampleinvocations}
483    
484     \begin{tclcommandseealso}
485     See also Section \ref{cxtn0:sarb0:seab0}.
486     \end{tclcommandseealso}
487    
488    
489     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
490     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
491     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
492     \subsection{The \texttt{arbint commanate} Extension}
493     %Subsection Tag: COM0
494     \label{cxtn0:sarb0:scom0}
495    
496     \index{arbint commanate@\emph{arbint commanate}}
497     \index{commanate@\emph{commanate}}
498     \begin{tclcommandname}{arbint commanate}%
499     inserts comma characters (`,') into a string as necessary to
500     make it a properly formatted integer with commas.
501     \end{tclcommandname}
502    
503     \begin{tclcommandsynopsis}
504     \tclcommandsynopsisline{arbint commanate}{sint}
505     \end{tclcommandsynopsis}
506    
507     \begin{tclcommanddescription}
508     This extension adds commas to an integer to make it a properly
509     formatted integer with commas. This extension is normally used to
510     format a string for more ``human-friendly'' output. The input to this extension
511     must be either:
512    
513     \begin{itemize}
514     \item A integer with no commas, as a string of digits (i.e.
515     scientific notation is not allowed). The only valid representation
516     for zero is ``0''.
517     \item An integer with all commas properly placed (i.e. it is
518     allowed to ``recommanate'' an integer that is already
519     ``commanated'').
520     \item One of the four symbolic NAN strings described in
521     Section \ref{cxtn0:sarb0:seab0}. (Such a string
522     will not be modified and will be returned unmodified from
523     this extension.)
524     \end{itemize}
525    
526     Any string that cannot be parsed as described above will result in
527     an error.
528     \end{tclcommanddescription}
529    
530     \begin{tclcommandsampleinvocations}
531     \begin{scriptsize}
532     \begin{verbatim}
533     % arbint intfac 129
534     4974504222477287440390234150412680963965661113713884314596886402265216893219635
535     5119328515747917449637889876686464600208839390308261862352651828829226610077151
536     044469167497022952331930501120000000000000000000000000000000
537     % arbint commanate [arbint intfac 129]
538     49,745,042,224,772,874,403,902,341,504,126,809,639,656,611,137,138,843,145,968,
539     864,022,652,168,932,196,355,119,328,515,747,917,449,637,889,876,686,464,600,208
540     ,839,390,308,261,862,352,651,828,829,226,610,077,151,044,469,167,497,022,952,33
541     1,930,501,120,000,000,000,000,000,000,000,000,000,000
542     % arbint commanate GMP_INTS_EF_INTOVF_POS
543     GMP_INTS_EF_INTOVF_POS
544     \end{verbatim}
545     \end{scriptsize}
546     \end{tclcommandsampleinvocations}
547    
548    
549     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
550     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
551     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
552     \subsection{The \texttt{arbint decommanate} Extension}
553     %Subsection Tag: dco0
554     \label{cxtn0:sarb0:sdco0}
555    
556     \index{arbint decommanate@\emph{arbint decommanate}}
557     \index{decommanate@\emph{decommanate}}
558     \begin{tclcommandname}{arbint decommanate}%
559     removes comma characters (`,') from a properly
560     formatted integer.
561     \end{tclcommandname}
562    
563     \begin{tclcommandsynopsis}
564     \tclcommandsynopsisline{arbint decommanate}{sint}
565     \end{tclcommandsynopsis}
566    
567     \begin{tclcommanddescription}
568     This extension removes commas from a properly formatted integer.
569     The input to this extension
570     must be either:
571    
572     \begin{itemize}
573     \item A integer with no commas, as a string of digits (i.e.
574     scientific notation is not allowed). The only valid representation
575     for zero is ``0''. (Note that it is allowed to ``decommanate''
576     an integer that contains no commas.)
577     \item An integer with all commas properly placed.
578     \item One of the four symbolic NAN strings described in
579     Section \ref{cxtn0:sarb0:seab0}. (Such a string
580     will not be modified and will be returned unmodified from
581     this extension.)
582     \end{itemize}
583    
584     Any string that cannot be parsed as described above will result in
585     an error.
586     \end{tclcommanddescription}
587    
588     \begin{tclcommandsampleinvocations}
589     \begin{scriptsize}
590     \begin{verbatim}
591     % arbint intfac 129
592     4974504222477287440390234150412680963965661113713884314596886402265216893219635
593     5119328515747917449637889876686464600208839390308261862352651828829226610077151
594     044469167497022952331930501120000000000000000000000000000000
595     % arbint commanate [arbint intfac 129]
596     49,745,042,224,772,874,403,902,341,504,126,809,639,656,611,137,138,843,145,968,
597     864,022,652,168,932,196,355,119,328,515,747,917,449,637,889,876,686,464,600,208
598     ,839,390,308,261,862,352,651,828,829,226,610,077,151,044,469,167,497,022,952,33
599     1,930,501,120,000,000,000,000,000,000,000,000,000,000
600     % set number [arbint commanate [arbint intfac 129]]
601     49,745,042,224,772,874,403,902,341,504,126,809,639,656,611,137,138,843,145,968,
602     864,022,652,168,932,196,355,119,328,515,747,917,449,637,889,876,686,464,600,208
603     ,839,390,308,261,862,352,651,828,829,226,610,077,151,044,469,167,497,022,952,33
604     1,930,501,120,000,000,000,000,000,000,000,000,000,000
605     % arbint decommanate $number
606     4974504222477287440390234150412680963965661113713884314596886402265216893219635
607     5119328515747917449637889876686464600208839390308261862352651828829226610077151
608     044469167497022952331930501120000000000000000000000000000000
609     % arbint decommanate GMP_INTS_EF_INTOVF_POS
610     GMP_INTS_EF_INTOVF_POS
611     \end{verbatim}
612     \end{scriptsize}
613     \end{tclcommandsampleinvocations}
614    
615     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
616     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
617     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
618     \subsection{The \texttt{arbint intcmp} Extension}
619     %Subsection Tag: add0
620     \label{cxtn0:sarb0:scmp0}
621    
622     \index{arbint intcmp@\emph{arbint intcmp}}
623     \index{intcmp@\emph{intcmp}}
624     \begin{tclcommandname}{arbint intcmp}%
625     compares two arbitrary integers and returns a result indicating their relative
626     ordering.
627     \end{tclcommandname}
628    
629     \begin{tclcommandsynopsis}
630     \tclcommandsynopsisline{arbint intcmp}{sint\_a sint\_b}
631     \end{tclcommandsynopsis}
632    
633     \begin{tclcommanddescription}
634     This extension compares \emph{sint\_a} and \emph{sint\_b} and
635     returns $\{-1, 0, 1\}$ if
636     \emph{sint\_a} $\{ <, =, > \}$ \emph{sint\_b}. This extension
637     is used to compare arbitrarily large integers in Tcl scripts.
638     Because NAN tags (see Section \ref{cxtn0:sarb0:seab0})
639     cannot be logically compared,
640     this extension will signal an error if either parameter is
641     a NAN tag.
642     \end{tclcommanddescription}
643    
644     \begin{tclcommandsampleinvocations}
645     \begin{scriptsize}
646     \begin{verbatim}
647     % arbint intcmp -5 -3
648     -1
649     % arbint intcmp -5 -5
650     0
651     % arbint intcmp 7 5
652     1
653     \end{verbatim}
654     \end{scriptsize}
655     \end{tclcommandsampleinvocations}
656    
657     \begin{tclcommandseealso}
658     See also the \emph{arbint rncmp} Tcl extension,
659     Section \ref{cxtn0:srne0:srcm0}, which performs a similar
660     function for arbitrary rational numbers.
661     \end{tclcommandseealso}
662    
663    
664     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
665     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
666     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
667     \subsection{The \texttt{arbint intadd} Extension}
668     %Subsection Tag: add0
669     \label{cxtn0:sarb0:sadd0}
670    
671     \index{arbint intadd@\emph{arbint intadd}}
672     \index{intadd@\emph{intadd}}
673     \begin{tclcommandname}{arbint intadd}%
674     calculates and returns as a string the sum of two integers.
675     \end{tclcommandname}
676    
677     \begin{tclcommandsynopsis}
678     \tclcommandsynopsisline{arbint intadd}{sint sint}
679     \end{tclcommandsynopsis}
680    
681     \begin{tclcommanddescription}
682     This extension returns the sum of two integer
683     arguments, or one of the NAN tags described in
684     Section \ref{cxtn0:sarb0:seab0} if an overflow occurs.
685     \end{tclcommanddescription}
686    
687     \begin{tclcommandsampleinvocations}
688     \begin{scriptsize}
689     \begin{verbatim}
690     % arbint intadd 1e20 21643215482123164
691     100021643215482123164
692     \end{verbatim}
693     \end{scriptsize}
694     \end{tclcommandsampleinvocations}
695    
696     \begin{tclcommandseealso}
697     See also the \emph{intadd} DOS command-line utility,
698     Section \cdcmzeroxrefhyphen{}\ref{cdcm0:sali0:sadd0}.
699     \end{tclcommandseealso}
700    
701     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
702     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
703     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
704     \subsection{The \texttt{arbint intsub} Extension}
705     %Subsection Tag: mod0
706     \label{cxtn0:sarb0:ssub0}
707    
708     \index{arbint intsub@\emph{arbint intsub}}
709     \index{intsub@\emph{intsub}}
710     \begin{tclcommandname}{arbint intsub}%
711     calculates and returns as a string the difference of two integers.
712     \end{tclcommandname}
713    
714     \begin{tclcommandsynopsis}
715     \tclcommandsynopsisline{arbint intsub}{sint sint}
716     \end{tclcommandsynopsis}
717    
718     \begin{tclcommanddescription}
719     This extension returns the difference of two integer
720     arguments, or one of the NAN tags described in
721     Section \ref{cxtn0:sarb0:seab0} if an overflow occurs.
722     \end{tclcommanddescription}
723    
724     \begin{tclcommandsampleinvocations}
725     \begin{scriptsize}
726     \begin{verbatim}
727     % arbint intsub 123846129436219 1e25
728     -9999999999876153870563781
729     \end{verbatim}
730     \end{scriptsize}
731     \end{tclcommandsampleinvocations}
732    
733     \begin{tclcommandseealso}
734     See also the \emph{intsub} DOS command-line utility,
735     Section \cdcmzeroxrefhyphen{}\ref{cdcm0:sali0:ssub0}.
736     \end{tclcommandseealso}
737    
738    
739     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
740     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
741     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
742     \subsection{The \texttt{arbint intmul} Extension}
743     %Subsection Tag: mul0
744     \label{cxtn0:sarb0:smul0}
745    
746     \index{arbint intmul@\emph{arbint intmul}}
747     \index{intmul@\emph{intmul}}
748     \begin{tclcommandname}{arbint intmul}%
749     calculates and returns as a string the product of two integers.
750     \end{tclcommandname}
751    
752     \begin{tclcommandsynopsis}
753     \tclcommandsynopsisline{arbint intmul}{sint sint}
754     \end{tclcommandsynopsis}
755    
756     \begin{tclcommanddescription}
757     This extension returns the product of two integer arguments.
758     The result of this
759     extension will always be either a NAN tag
760     (see Section \ref{cxtn0:sarb0:seab0})
761     or an integer.
762     \end{tclcommanddescription}
763    
764     \begin{tclcommandsampleinvocations}
765     \begin{scriptsize}
766     \begin{verbatim}
767     % arbint intmul -329749813264962165493214963541976325 4.36463214521843123e38
768     -143923663485602892702423181098245942606484617030062975000000000000000000000
769     \end{verbatim}
770     \end{scriptsize}
771     \end{tclcommandsampleinvocations}
772    
773     \begin{tclcommandseealso}
774     See also the \emph{intmul} DOS command-line utility,
775     Section \cdcmzeroxrefhyphen{}\ref{cdcm0:sali0:smul0}.
776     \end{tclcommandseealso}
777    
778    
779     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
780     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
781     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
782     \subsection{The \texttt{arbint intdiv} Extension}
783     %Subsection Tag: div0
784     \label{cxtn0:sarb0:sdiv0}
785    
786     \index{arbint intdiv@\emph{arbint intdiv}}
787     \index{intdiv@\emph{intdiv}}
788     \begin{tclcommandname}{arbint intdiv}%
789     calculates and returns as a string the quotient of two integers.
790     \end{tclcommandname}
791    
792     \begin{tclcommandsynopsis}
793     \tclcommandsynopsisline{arbint intdiv}{sint\_dividend sint\_divisor}
794     \end{tclcommandsynopsis}
795    
796     \begin{tclcommanddescription}
797     This extension returns the quotient of two integer arguments.
798     The first integer argument is interpreted to be the dividend,
799     and the second the divisor. The quotient is without remainder,
800     i.e. what is actually returned is
801    
802     \begin{equation}
803     sgn(dividend \cdot divisor)
804     \left\lfloor{\frac{|dividend|}{|divisor|}}\right\rfloor ,
805     \end{equation}
806    
807     or one of the NAN tags described in
808     Section \ref{cxtn0:sarb0:seab0}
809     if division by zero is attempted. Note that division
810     by zero is not an error (as far as a Tcl script is concerned):
811     the only outcome is that the result will be assigned a symbolic
812     NAN tag rather than a string of digits representing an integer.
813     \end{tclcommanddescription}
814    
815     \begin{tclcommandsampleinvocations}
816     \begin{scriptsize}
817     \begin{verbatim}
818     % arbint intdiv 2364832165653218648321543215848236458124 2854871354812543821
819     828349817467869034672
820     % arbint intdiv 2364832165653218648321543215848236458124 0
821     GMP_INTS_EF_INTOVF_POS
822     \end{verbatim}
823     \end{scriptsize}
824     \end{tclcommandsampleinvocations}
825    
826     \begin{tclcommandseealso}
827     See also the \emph{intdiv} DOS command-line utility,
828     Section \cdcmzeroxrefhyphen{}\ref{cdcm0:sali0:sdiv0}.
829     \end{tclcommandseealso}
830    
831    
832     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
833     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
834     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
835     \subsection{The \texttt{arbint intmod} Extension}
836     %Subsection Tag: mod0
837     \label{cxtn0:sarb0:smod0}
838    
839     \index{arbint intmod@\emph{arbint intmod}}
840     \index{intmod@\emph{intmod}}
841     \begin{tclcommandname}{arbint intmod}%
842     calculates and returns as a string the modulo of two integers.
843     \end{tclcommandname}
844    
845     \begin{tclcommandsynopsis}
846     \tclcommandsynopsisline{arbint intmod}{sint\_dividend sint\_divisor}
847     \end{tclcommandsynopsis}
848    
849     \begin{tclcommanddescription}
850     This extension returns the remainder resulting from the
851     division of two integer arguments.
852     The first integer argument is interpreted to be the dividend,
853     and the second the divisor. The sign of the remainder is always
854     chosen so that the following relationship holds:
855    
856     \begin{equation}
857     dividend \; div \; divisor + \frac{dividend \; mod \; divisor}{divisor}
858     = \frac{dividend}{divisor},
859     \end{equation}
860    
861     where the \emph{div} operator is as explained in Section
862     \ref{cxtn0:sarb0:sdiv0} for the \emph{arbint intdiv} extension.
863     If division by zero is attempted, this extension
864     returns one of the NAN tags described in
865     Section \ref{cxtn0:sarb0:seab0}. Note that division
866     by zero is not an error (as far as a Tcl script is concerned):
867     the only outcome is that the result will be assigned a symbolic
868     NAN tag rather than a string of digits representing an integer.
869     \end{tclcommanddescription}
870    
871     \begin{tclcommandsampleinvocations}
872     \begin{scriptsize}
873     \begin{verbatim}
874     % arbint intmod 264321654632432421 2175438321654
875     1547674828113
876     % arbint intmod 264321654632432421 0
877     GMP_INTS_EF_INTOVF_POS
878     \end{verbatim}
879     \end{scriptsize}
880     \end{tclcommandsampleinvocations}
881    
882     \begin{tclcommandseealso}
883     See also the \emph{intmod} DOS command-line utility,
884     Section \cdcmzeroxrefhyphen{}\ref{cdcm0:sali0:smod0}.
885     \end{tclcommandseealso}
886    
887    
888     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
889     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
890     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
891     \subsection{The \texttt{arbint intexp} Extension}
892     %Subsection Tag: exp0
893     \label{cxtn0:sarb0:sixp0}
894    
895     \index{arbint intexp@\emph{arbint intexp}}
896     \index{intexp@\emph{intexp}}
897     \begin{tclcommandname}{arbint intexp}%
898     computes and returns as a string one integer
899     exponentiated to the power of another,
900     $base^{exponent}$.
901    
902     \end{tclcommandname}
903    
904     \begin{tclcommandsynopsis}
905     \tclcommandsynopsisline{arbint intexp}{sint\_base uint32\_exponent}
906     \end{tclcommandsynopsis}
907    
908     \begin{tclcommanddescription}
909     This extension exponentiates an integer to a non-negative
910     power. For
911     simplicity and convenience, $0^0$ will return 1, although
912     this is inconsistent with the mathematical definition.
913     All other exponentiations are as expected.
914    
915     The method used to exponentiate is simple squaring and multiplying
916     based on the bit pattern of the exponent, as discussed
917     in \cite{bibref:b:knuthclassic2ndedvol2}, pp. 461-462.
918     \end{tclcommanddescription}
919    
920     \begin{tclcommandsampleinvocations}
921     \begin{scriptsize}
922     \begin{verbatim}
923     % arbint intexp 47 69
924     2370021018513446695324337468306899241173950476009917473665218657220346081293500
925     4143894985892600403244809901800125167
926     % arbint intexp 1 0
927     1
928     % arbint intexp 0 0
929     1
930     % arbint intexp 0 1
931     0
932     % arbint intexp 0 19237498
933     0
934     % arbint intexp -47 69
935     -237002101851344669532433746830689924117395047600991747366521865722034608129350
936     04143894985892600403244809901800125167
937     % arbint intexp -47 -69
938     arbint intexp: "-69" is not a recognized unsigned 32-bit integer.
939     % arbint intexp 193461926436214 99999999
940     GMP_INTS_EF_INTOVF_TAINT_POS
941     \end{verbatim}
942     \end{scriptsize}
943     \end{tclcommandsampleinvocations}
944    
945     \begin{tclcommandseealso}
946     See also the \emph{intexp} DOS command-line utility,
947     Section \cdcmzeroxrefhyphen{}\ref{cdcm0:sali0:sixp0}.
948     \end{tclcommandseealso}
949    
950    
951     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
952     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
953     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
954     \subsection{The \texttt{arbint intfac} Extension}
955     %Subsection Tag: fac0
956     \label{cxtn0:sarb0:sfac0}
957    
958     \index{arbint intfac@\emph{arbint intfac}}
959     \index{intfac@\emph{intfac}}
960     \begin{tclcommandname}{arbint intfac}%
961     computes and returns as a string the factorial ($!$) of
962     the integer argument supplied.
963     \end{tclcommandname}
964    
965     \begin{tclcommandsynopsis}
966     \tclcommandsynopsisline{arbint intfac}{uint32}
967     \end{tclcommandsynopsis}
968    
969     \begin{tclcommanddescription}
970     This extension returns the factorial of an integer argument.
971     Any of the symbolic NAN strings described in
972     Section \ref{cxtn0:sarb0:seab0} will cause a return
973     value of an appropriate symbolic NAN string.
974     Strings that cannot be parsed as integers or
975     NAN strings, strings
976     that represent negative integers, and strings that represent
977     non-negative integers that will not fit in 32 bits will generate
978     an error.
979    
980     As of this writing, 200! requires about 1 second to compute on a
981     600MHz PC. Although this function will calculate factorials of any size
982     up to 100,000 digits, it is not recommended to use this function above
983     about 200! as the increase in computation time appears to be exponential
984     with respect to the argument. This may improve in the future as algorithmic
985     enhancements are made.
986     \end{tclcommanddescription}
987    
988     \begin{tclcommandsampleinvocations}
989     \begin{scriptsize}
990     \begin{verbatim}
991     % arbint intfac 129
992     4974504222477287440390234150412680963965661113713884314596886402265216893219635
993     5119328515747917449637889876686464600208839390308261862352651828829226610077151
994     044469167497022952331930501120000000000000000000000000000000
995     \end{verbatim}
996     \end{scriptsize}
997     \end{tclcommandsampleinvocations}
998    
999     \begin{tclcommandseealso}
1000     See also the \emph{intfac} DOS command-line utility,
1001     Section \cdcmzeroxrefhyphen{}\ref{cdcm0:sali0:sifc0}.
1002     \end{tclcommandseealso}
1003    
1004    
1005     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1006     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1007     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1008     \subsection{The \texttt{arbint intgcd} Extension}
1009     %Subsection Tag: gcd0
1010     \label{cxtn0:sarb0:sgcd0}
1011    
1012     \index{arbint intgcd@\emph{arbint intgcd}}
1013     \index{intgcd@\emph{intgcd}}
1014     \begin{tclcommandname}{arbint intgcd}%
1015     calculates and returns as a string the g.c.d.
1016     (greatest common divisor) of two integers.
1017     \end{tclcommandname}
1018    
1019     \begin{tclcommandsynopsis}
1020     \tclcommandsynopsisline{arbint intgcd}{sint sint}
1021     \end{tclcommandsynopsis}
1022    
1023     \begin{tclcommanddescription}
1024     This extension returns the g.c.d. of two integer arguments.
1025     If either argument is 0, the result will be 1. If either
1026     argument is negative, the absolute value of the argument
1027     will be used in its place. The result of this
1028     extension will always be either a NAN tag
1029     (see Section \ref{cxtn0:sarb0:seab0})
1030     or an integer greater than or equal to 1.
1031    
1032     The algorithm employed is the
1033     \emph{Modern Euclidian Algorithm} as
1034     described in \cite{bibref:b:knuthclassic2ndedvol2}, p. 337.
1035     Although faster algorithms for computer
1036     implementation do exist, this is the simplest
1037     and most direct algorithm.
1038     \end{tclcommanddescription}
1039    
1040     \begin{tclcommandsampleinvocations}
1041     \begin{scriptsize}
1042     \begin{verbatim}
1043     % arbint intgcd 263130836933693530167218012160000000 503580
1044     4620
1045     \end{verbatim}
1046     \end{scriptsize}
1047     \end{tclcommandsampleinvocations}
1048    
1049     \begin{tclcommandseealso}
1050     See also the \emph{intgcd} DOS command-line utility,
1051     Section \cdcmzeroxrefhyphen{}\ref{cdcm0:sali0:sgcd0}.
1052     \end{tclcommandseealso}
1053    
1054    
1055     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1056     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1057     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1058     \subsection{The \texttt{arbint intlcm} Extension}
1059     %Subsection Tag: lcm0
1060     \label{cxtn0:sarb0:slcm0}
1061    
1062     \index{arbint intgcd@\emph{arbint intlcm}}
1063     \index{intlcm@\emph{intlcm}}
1064     \begin{tclcommandname}{arbint intlcm}%
1065     calculates and returns as a string the l.c.m.
1066     (least common multiple) of two integers.
1067     \end{tclcommandname}
1068    
1069     \begin{tclcommandsynopsis}
1070     \tclcommandsynopsisline{arbint intlcm}{sint sint}
1071     \end{tclcommandsynopsis}
1072    
1073     \begin{tclcommanddescription}
1074     This extension returns the l.c.m. of two integer arguments.
1075     If either argument is 0, the argument will be treated as if it
1076     were 1. If either
1077     argument is negative, the absolute value of the argument
1078     will be used in its place. The result of this
1079     extension will always be either a NAN tag
1080     (see Section \ref{cxtn0:sarb0:seab0})
1081     or an integer greater than or equal to 1.
1082    
1083     The algorithm employed is to calculate
1084     the g.c.d. of the arguments using the
1085     \emph{Modern Euclidian Algorithm} as
1086     described in \cite{bibref:b:knuthclassic2ndedvol2}, p. 337;
1087     then to divide the product of the arguments by their
1088     g.c.d., as implied by \cite{bibref:b:knuthclassic2ndedvol2},
1089     p. 334, Equation 10. Both sides of this equation can be
1090     divided by $\gcd(u,v)$ to yield
1091    
1092     \begin{equation}
1093     lcm(u,v) = \frac{uv}{\gcd(u,v)},
1094     \end{equation}
1095    
1096     and this is the relationship used to calculated the l.c.m.
1097     \end{tclcommanddescription}
1098    
1099     \begin{tclcommandsampleinvocations}
1100     \begin{scriptsize}
1101     \begin{verbatim}
1102     % arbint intlcm 64 100
1103     1600
1104     \end{verbatim}
1105     \end{scriptsize}
1106     \end{tclcommandsampleinvocations}
1107    
1108     \begin{tclcommandseealso}
1109     See also the \emph{intlcm} DOS command-line utility,
1110     Section \cdcmzeroxrefhyphen{}\ref{cdcm0:sali0:slcm0}.
1111     \end{tclcommandseealso}
1112    
1113    
1114     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1115     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1116     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1117     \section{Rational Number Extensions}
1118     %Section Tag: RNE0
1119    
1120     This section describes extensions that implement
1121     rational number arithmetic.
1122    
1123     In most cases, the rational number extensions described in
1124     this section are liberal in the representations of rational numbers
1125     they accept, but always produce results as integer components
1126     separated by the forward slash character. This means that the
1127     rational number extensions described in this section can exchange data
1128     freely---the output of any of the extensions is suitable as input
1129     for another extension.
1130    
1131    
1132     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1133     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1134     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1135     \subsection{The \texttt{arbint rnred} Extension}
1136     %Subsection Tag: RNR0
1137     \label{cxtn0:srne0:srnr0}
1138    
1139     \index{arbint rnred@\emph{arbint rnred}}
1140     \index{rnred@\emph{rnred}}
1141     \begin{tclcommandname}{arbint rnred}%
1142     reduces a rational number to lowest terms and normalizes it.
1143     \end{tclcommandname}
1144    
1145     \begin{tclcommandsynopsis}
1146     \tclcommandsynopsisline{arbint rnred}{srn}
1147     \end{tclcommandsynopsis}
1148    
1149     \begin{tclcommanddescription}
1150     The \emph{arbint rnred} extension reduces a rational number to its lowest terms
1151     and normalizes it. By \emph{reducing} a rational number and
1152     normalizing it, we mean the application of the following rules.
1153    
1154     \begin{enumerate}
1155     \item Any number with a numerator of zero is given the
1156     representation 0/1, i.e. 0/1 is the canonical
1157     representation of zero.
1158     \item Any number with a denominator of zero is given
1159     the representation 1/0, i.e. 1/0 is the canonical
1160     representation of ``division by zero''.
1161     \item Rational numbers which are effectively positive
1162     are normalized to have a positve numerator and positive
1163     denominator.
1164     \item Rational numbers which are effectively negative are
1165     normalized to have a negative numerator and positive
1166     denominator.
1167     \item Any common factors are removed from the numerator and
1168     denominator, i.e. the numerator and denominator are
1169     made coprime.
1170     \end{enumerate}
1171    
1172     Note that one behavior above may be unexpected---the
1173     \emph{arbint rnred} extension \emph{will} accept a rational number
1174     specified with a denominator of zero, and will normalize it to
1175     1/0.
1176     \end{tclcommanddescription}
1177    
1178     \begin{tclcommandsampleinvocations}
1179     \begin{scriptsize}
1180     \begin{verbatim}
1181     % arbint rnred 422.414
1182     211207/500
1183     \end{verbatim}
1184     \end{scriptsize}
1185     \end{tclcommandsampleinvocations}
1186    
1187     \begin{tclcommandseealso}
1188     See also the \emph{rnred} DOS command-line utility,
1189     Section \cdcmzeroxrefhyphen{}\ref{cdcm0:srnu0:srnr0}.
1190     \end{tclcommandseealso}
1191    
1192     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1193     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1194     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1195     \subsection{The \texttt{arbint rnadd} Extension}
1196     %Subsection Tag: RAD0
1197     \label{cxtn0:srne0:srad0}
1198    
1199     \index{arbint rnadd@\emph{arbint rnadd}}
1200     \index{rnadd@\emph{rnadd}}
1201     \begin{tclcommandname}{arbint rnadd}%
1202     adds two rational numbers to produce a normalized rational result.
1203     \end{tclcommandname}
1204    
1205     \begin{tclcommandsynopsis}
1206     \tclcommandsynopsisline{arbint rnadd}{srn srn}
1207     \end{tclcommandsynopsis}
1208    
1209     \begin{tclcommanddescription}
1210     The \emph{arbint rnadd} extension adds two rational numbers to produce a
1211     normalized rational result.
1212    
1213     If either of the two rational input arguments has a denominator of zero,
1214     the string ``NAN'' will be returned.
1215     \end{tclcommanddescription}
1216    
1217     \begin{tclcommandsampleinvocations}
1218     \begin{scriptsize}
1219     \begin{verbatim}
1220     % arbint rnadd 3.1415 64/259
1221     1755297/518000
1222     \end{verbatim}
1223     \end{scriptsize}
1224     \end{tclcommandsampleinvocations}
1225    
1226     \begin{tclcommandseealso}
1227     See also the \emph{rnadd} DOS command-line utility,
1228     Section \cdcmzeroxrefhyphen{}\ref{cdcm0:srnu0:srna0}.
1229     \end{tclcommandseealso}
1230    
1231    
1232     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1233     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1234     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1235     \subsection{The \texttt{arbint rnsub} Extension}
1236     %Subsection Tag: RSB0
1237     \label{cxtn0:srne0:srsb0}
1238    
1239     \index{arbint rnsub@\emph{arbint rnsub}}
1240     \index{rnsub@\emph{rnsub}}
1241     \begin{tclcommandname}{arbint rnsub}%
1242     subtracts two rational numbers to produce a normalized rational result.
1243     \end{tclcommandname}
1244    
1245     \begin{tclcommandsynopsis}
1246     \tclcommandsynopsisline{arbint rnsub}{srn\_arg1 srn\_arg2}
1247     \end{tclcommandsynopsis}
1248    
1249     \begin{tclcommanddescription}
1250     The \emph{arbint rnsub} extension subtracts two rational numbers to produce a
1251     normalized rational result. The second argument is subtracted from the first, i.e.
1252     the result $arg_2 - arg_1$ is formed.
1253    
1254     If either of the two rational input arguments has a denominator of zero,
1255     the string ``NAN'' will be returned.
1256     \end{tclcommanddescription}
1257    
1258     \begin{tclcommandsampleinvocations}
1259     \begin{scriptsize}
1260     \begin{verbatim}
1261     % arbint rnsub 3.129 122/451
1262     1289179/451000
1263     \end{verbatim}
1264     \end{scriptsize}
1265     \end{tclcommandsampleinvocations}
1266    
1267     \begin{tclcommandseealso}
1268     See also the \emph{rnsub} DOS command-line utility,
1269     Section \cdcmzeroxrefhyphen{}\ref{cdcm0:srnu0:srsb0}.
1270     \end{tclcommandseealso}
1271    
1272     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1273     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1274     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1275     \subsection{The \texttt{arbint rnmul} Extension}
1276     %Subsection Tag: RMU0
1277     \label{cxtn0:srne0:srmu0}
1278    
1279     \index{arbint rnmul@\emph{arbint rnmul}}
1280     \index{rnmul@\emph{rnmul}}
1281     \begin{tclcommandname}{arbint rnmul}%
1282     multiplies two rational numbers to produce a normalized rational result.
1283     \end{tclcommandname}
1284    
1285     \begin{tclcommandsynopsis}
1286     \tclcommandsynopsisline{arbint rnmul}{srn srn}
1287     \end{tclcommandsynopsis}
1288    
1289     \begin{tclcommanddescription}
1290     The \emph{arbint rnmul} extension multiplies two rational numbers to produce a
1291     normalized rational result.
1292    
1293     If either of the two rational input arguments has a denominator of zero,
1294     the string ``NAN'' will be returned.
1295     \end{tclcommanddescription}
1296    
1297     \begin{tclcommandsampleinvocations}
1298     \begin{scriptsize}
1299     \begin{verbatim}
1300     % arbint rnmul 3.14 32/491
1301     2512/12275
1302     \end{verbatim}
1303     \end{scriptsize}
1304     \end{tclcommandsampleinvocations}
1305    
1306     \begin{tclcommandseealso}
1307     See also the \emph{rnmul} DOS command-line utility,
1308     Section \cdcmzeroxrefhyphen{}\ref{cdcm0:srnu0:srmu0}.
1309     \end{tclcommandseealso}
1310    
1311    
1312     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1313     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1314     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1315     \subsection{The \texttt{arbint rndiv} Extension}
1316     %Subsection Tag: RDV0
1317     \label{cxtn0:srne0:srdv0}
1318    
1319     \index{arbint rndiv@\emph{arbint rndiv}}
1320     \index{rndiv@\emph{rndiv}}
1321     \begin{tclcommandname}{arbint rndiv}%
1322     divides two rational numbers to produce a normalized rational result.
1323     \end{tclcommandname}
1324    
1325     \begin{tclcommandsynopsis}
1326     \tclcommandsynopsisline{arbint rndiv}{srn srn}
1327     \end{tclcommandsynopsis}
1328    
1329     \begin{tclcommanddescription}
1330     The \emph{arbint rndiv} extension divides two rational numbers to produce a
1331     normalized rational result.
1332    
1333     If either of the two rational input arguments has a denominator of zero, or
1334     if the divisor is zero,
1335     the string ``NAN'' will be returned.
1336     \end{tclcommanddescription}
1337    
1338     \begin{tclcommandsampleinvocations}
1339     \begin{scriptsize}
1340     \begin{verbatim}
1341     % arbint rndiv 3.14 32/491
1342     77087/1600
1343     \end{verbatim}
1344     \end{scriptsize}
1345     \end{tclcommandsampleinvocations}
1346    
1347     \begin{tclcommandseealso}
1348     See also the \emph{rnmul} DOS command-line utility,
1349     Section \cdcmzeroxrefhyphen{}\ref{cdcm0:srnu0:srdv0}.
1350     \end{tclcommandseealso}
1351    
1352    
1353     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1354     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1355     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1356     \subsection{The \texttt{arbint rncmp} Extension}
1357     %Subsection Tag: RCM0
1358     \label{cxtn0:srne0:srcm0}
1359    
1360     \index{arbint rncmp@\emph{arbint rncmp}}
1361     \index{rncmp@\emph{rncmp}}
1362     \begin{tclcommandname}{arbint rncmp}%
1363     compares two rational numbers.
1364     \end{tclcommandname}
1365    
1366     \begin{tclcommandsynopsis}
1367     \tclcommandsynopsisline{arbint rncmp}{srn\_arg1 srn\_arg2}
1368     \end{tclcommandsynopsis}
1369    
1370     \begin{tclcommanddescription}
1371     The \emph{arbint rncmp} extension compares two rational numbers
1372     and returns $\{-1, 0, 1\}$ if $arg_1$
1373     $\{<, =, >\}$ $arg_2$.
1374    
1375     The rational numbers do not need to be reduced or normalized in any way.
1376     Any combination of signs on the numerators and denominators is permitted,
1377     and the numerators and denominators are not required to be coprime.
1378    
1379     If for any reason the extension cannot compare the rational numbers,
1380     an error message will be returned and the extension will return
1381     \texttt{TCL\_ERROR}, which will normally cause a script to fail.
1382     The reason for the error return is that if the two rational number
1383     cannot be compared, in most cases it is logically impossible for a script to
1384     continue.
1385     \end{tclcommanddescription}
1386    
1387     \begin{tclcommandsampleinvocations}
1388     \begin{scriptsize}
1389     \begin{verbatim}
1390     % arbint rncmp -4/-7 0.5
1391     1
1392     \end{verbatim}
1393     \end{scriptsize}
1394     \end{tclcommandsampleinvocations}
1395    
1396    
1397     \begin{tclcommandseealso}
1398     See also the \emph{arbint intcmp} Tcl extension,
1399     Section \ref{cxtn0:sarb0:scmp0}, which performs a similar
1400     function for arbitrary integers.
1401     \end{tclcommandseealso}
1402    
1403    
1404     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1405     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1406     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1407     \section{Number Theory Extensions}
1408     %Section Tag: NTH0
1409     \label{cxtn0:snth0}
1410    
1411     This section describes extensions that are related to number theory.
1412     Extensions that deal with continued fractions are included in this
1413     category because of the relationship between continued fractions
1414     and number theory. Any extensions related to number theory that
1415     must process large integers are
1416     still a subextension of \texttt{arbint}.\footnote{This was done to
1417     avoid creating an excessive number of software modules and
1418     Tcl extensions.}
1419    
1420    
1421     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1422     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1423     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1424     \subsection{The \texttt{arbint cfratnum} Extension}
1425     %Subsection Tag: CFR0
1426     \label{cxtn0:snth0:scfr0}
1427    
1428     \index{arbint cfratnum@\emph{arbint cfratnum}}
1429     \index{cfratnum@\emph{cfratnum}}
1430     \begin{tclcommandname}{arbint cfratnum}%
1431     calculates the partial quotients and convergents of
1432     a non-negative rational number.
1433     \end{tclcommandname}
1434    
1435     \begin{tclcommandsynopsis}
1436     \tclcommandsynopsisline{arbint cfratnum}{urn}
1437     \end{tclcommandsynopsis}
1438    
1439     \begin{tclcommanddescription}
1440     This extension calculates the partial quotients and convergents of
1441     of a non-negative rational number. The results are
1442     returned as a string containing integers separated by spaces.
1443     The integers are arranged in consecutive triplets of the form
1444     ``$a_k \; p_k \; q_k$''. Such a string can be converted to a
1445     list and processed from a Tcl script.
1446     \end{tclcommanddescription}
1447    
1448     \begin{tclcommandsampleinvocations}
1449     \begin{scriptsize}
1450     \begin{verbatim}
1451     % arbint cfratnum 3.14
1452     3 3 1 7 22 7 7 157 50
1453     \end{verbatim}
1454     \end{scriptsize}
1455    
1456     In the sample invocation above, note that $a_0 = 3$,
1457     $p_0 = 3$, $q_0 = 1$, $a_1 = 7$, $p_1 = 22$, $q_1 = 7$,
1458     $a_2 = 7$, $p_2 = 157$, and $q_2 = 50$.
1459     \end{tclcommandsampleinvocations}
1460    
1461     \begin{tclcommandseealso}
1462     See also the \emph{cfratnum} DOS command-line utility,
1463     Section \cdcmzeroxrefhyphen{}\ref{cdcm0:snth0:scfr0}.
1464     \end{tclcommandseealso}
1465    
1466     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1467     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1468     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1469     \subsection{The \texttt{arbint cfbrapab} Extension}
1470     %Subsection Tag: BRA0
1471     \label{cxtn0:snth0:sbra0}
1472    
1473     \index{arbint cfbrapab@\emph{arbint cfbrapab}}
1474     \index{cfbrapab@\emph{cfbrapab}}
1475     \begin{tclcommandname}{arbint cfbrapab}%
1476     finds best rational approximations to a supplied rational
1477     number in either the Farey series of order $k_{MAX}$ (denoted
1478     $F_{k_{MAX}}$), or in a rectangular region of the integer lattice
1479     bounded by $k \leq k_{MAX}$ and $h \leq h_{MAX}$
1480     (denoted $F_{k_{MAX}, \overline{h_{MAX}}}$).
1481     \end{tclcommandname}
1482    
1483     \begin{tclcommandsynopsis}
1484     \tclcommandsynopsisline{arbint cfbrapab}{srn uint\_kmax [options]}
1485     \tclcommandsynopsisline{arbint cfbrapab}{srn uint\_kmax uint\_hmax [options]}
1486     \end{tclcommandsynopsis}
1487    
1488     \begin{tclcommanddescription}
1489     When used without options, this extension returns the closest rational
1490     number to the specified rational number in $F_{k_{MAX}}$ (if only $k_{MAX}$ is
1491     specified) or in $F_{k_{MAX}, \overline{h_{MAX}}}$ (if both
1492     $k_{MAX}$ and $h_{MAX}$ are specified). If the rational number specified
1493     is already in the series of interest, its reduced form is returned.
1494     If the rational number supplied is equidistant from the two closest
1495     formable rational numbers in the series of interest, the neighbor of smaller
1496     magnitude (absolute value) is returned.
1497    
1498     When operating in $F_{k_{MAX}}$, there are no practical constraints
1499     on the size of rational numbers that this extension can approximate.
1500     However, when operating in $F_{k_{MAX}, \overline{h_{MAX}}}$,
1501     this extension will not accept rational numbers outside the
1502     interval $[-h_{MAX}, h_{MAX}]$ (note that $-h_{MAX}/1$ and
1503     $h_{MAX}/1$ are the smallest and largest numbers that can be formed
1504     when the numerator of the rational approximations is constrained).
1505     Any attempt to approximate a rational number outside $[-h_{MAX}, h_{MAX}]$
1506     will result in a Tcl error, which will normally terminate a script.
1507    
1508     The \texttt{-neversmaller} and \texttt{-neverlarger}
1509     options cause the extension to always choose the larger and
1510     smaller neighbors (rather than the closer neighbor), respectively.
1511     These options are useful when approximations are desired that
1512     do not underestimate or overestimate the function of interest for
1513     large values in the domain. These parameters do not affect
1514     the behavior if the rational number supplied is already in the
1515     series of interest---the reduced form of the specified number
1516     is returned in the case of equality.
1517     The \texttt{-neversmaller} and \texttt{-neverlarger} options
1518     must be used alone, with no other options.
1519    
1520     The \texttt{-pred} and \texttt{-succ} options cause this extension
1521     to calculate either the predecessor or successor to the rational
1522     number specified in the series of interest. If the number specified
1523     is already in series of interest, its predecessor or successor
1524     is returned.
1525     If the number specified is not in the series of interest,
1526     the left or right neighbor is returned. If no predecessor,
1527     successor, or left or right neighbor exist, an error is generated.
1528     These options (\texttt{-pred} or \texttt{-succ})
1529     must be used alone, with no other options.
1530    
1531     The normal behavior of this extension is to return a single
1532     rational number, as described above.
1533     The \texttt{-n \emph{uint32\_count}} option will cause the extension
1534     to return \emph{count} rational numbers on each side of the
1535     rational number specified. If the rational number specified is already
1536     in the series of interest, it will be returned as well, normally\footnote{If
1537     the set of returned rational numbers is not clipped at $-h_{MAX}/1$ or
1538     $h_{MAX}/1$.} resulting
1539     in an odd number of rational numbers returned. If the rational number
1540     specified is not already in the series of interest, an even number of
1541     rational numbers will normally be returned. The rational
1542     numbers returned are prefixed with integer indices, which
1543     indicate their ordinal distance from the rational number to be approximated
1544     (see the invocation examples below). The index of 0 is reserved for
1545     the reduced form of the rational number specified, and and a rational number with
1546     this index will be in the output only if the rational number supplied was already
1547     in the series of interest.
1548     The rational numbers returned
1549     will be formatted as integer indices and slash-separated integers, separated
1550     by single spaces and arranged in ascending order..
1551     If the number of rational numbers requested by this option exceeds
1552     the number available, the sequence will simply be truncated at
1553     $-h_{MAX}/1$ or $h_{MAX}/1$, as appropriate. Any request for more than
1554     10,000 neighbors (on each side) will be clipped to 10,000.
1555     \end{tclcommanddescription}
1556    
1557     \begin{tclcommandsampleinvocations}
1558     \begin{scriptsize}
1559     \begin{verbatim}
1560     % arbint cfbrapab 1.6093 255
1561     346/215
1562     % arbint cfbrapab 1.6093 255 255
1563     243/151
1564     % arbint cfbrapab 1.6093 255 255 -neversmaller
1565     103/64
1566     % arbint cfbrapab 1.6093 255 255 -neverlarger
1567     243/151
1568     % arbint cfbrapab 1.6093 255 255 -n 20
1569     -20 143/89 -19 188/117 -18 233/145 -17 45/28 -16 217/135 -15 172/107 -14 127/79
1570     -13 209/130 -12 82/51 -11 201/125 -10 119/74 -9 156/97 -8 193/120 -7 230/143 -6
1571     37/23 -5 251/156 -4 214/133 -3 177/110 -2 140/87 -1 243/151 1 103/64 2 169/105
1572     3 235/146 4 66/41 5 227/141 6 161/100 7 95/59 8 219/136 9 124/77 10 153/95 11
1573     182/113 12 211/131 13 240/149 14 29/18 15 253/157 16 224/139 17 195/121 18
1574     166/103 19 137/85 20 245/152
1575     % arbint cfbrapab 1.6093 255 255 -succ
1576     103/64
1577     % arbint cfbrapab 1.6093 255 255 -pred
1578     243/151
1579     % arbint cfbrapab 2/3 255 255 -pred
1580     169/254
1581     \end{verbatim}
1582     \end{scriptsize}
1583     \end{tclcommandsampleinvocations}
1584    
1585     \begin{tclcommandseealso}
1586     This extension uses the continued fraction
1587     algorithms presented in Chapter \ccfrzeroxrefhyphen{}\ref{ccfr0}.
1588     See also the \emph{cfratnum} DOS command-line utility,
1589     Section \cdcmzeroxrefhyphen{}\ref{cdcm0:snth0:sbra0}.
1590     \end{tclcommandseealso}
1591    
1592    
1593     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1594     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1595     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1596     \subsection{The \texttt{arbint const} Extension}
1597     %Subsection Tag: CEX0
1598     \label{cxtn0:snth0:scex0}
1599    
1600     \index{arbint const@\emph{arbint const}}
1601     \index{const (Tcl arbint sub-extension)@\emph{const} (Tcl \emph{arbint} sub-extension)}
1602     \begin{tclcommandname}{arbint const}%
1603     returns a string representing the value of important
1604     mathematical and conversion constants (such as the value
1605     of $\pi$ or $e$, or the conversion factor from miles to kilometers).
1606     \end{tclcommandname}
1607    
1608     \begin{tclcommandsynopsis}
1609     \tclcommandsynopsisline{arbint const}{const\_tag}
1610     \tclcommandsynopsisline{arbint const}{const\_tag uint32\_ndigits}
1611     \end{tclcommandsynopsis}
1612    
1613     \begin{tclcommanddescription}
1614     The \emph{const} subextension returns the value (as a string) of
1615     constants that may be useful in engineering work. Such constants
1616     may include mathematically significant numbers (such as
1617     \index{pi@$\pi$ (transcendental constant)}$\pi$ or
1618     \index{e@$e$ (transcendental constant)}$e$), or
1619     useful conversion factors (the conversion factor from
1620     miles to kilometers, for example). These string constants
1621     can be used in calculations involving rational numbers.
1622    
1623     All constants are simply tabulated as character strings
1624     within the `C' source code.
1625    
1626     Mathematically significant numbers (which, to the best
1627     of the author's knowledge are always irrational and
1628     usually transcendental, as mathematicians
1629     don't seem to have any lasting interest in specific integers
1630     or rational numbers) are available to about 1,000 significant digits,
1631     and have been obtained from various web pages. It is reasoned that
1632     1,000 significant digits should be adequate for engineering applications.
1633    
1634     Measurement unit conversion constants have typically been obtained from
1635     \emph{NIST Special Publication 811} \cite{bibref:b:nistsp811:1995ed}.
1636     These constants are always tabulated with their full precision, since
1637     no physical constant can be precise to more than several decimal places.
1638    
1639     If the number of significant figures is not specified,
1640     each constant is returned as a string with a default number of
1641     decimal places (typically about 30). In most cases, the default
1642     number of decimal places provides more than enough precision for
1643     engineering work. However, an optional parameter allows more
1644     or fewer digits to be obtained, up to the maximum number tabulated internally
1645     in the software. The default number of decimal places is a compromise
1646     between calculation speed and accuracy. It is felt in most cases that
1647     the default number of decimal places provides excellent accuracy
1648     and good calculation speed.
1649    
1650     Please e-mail the authors if you would like additional useful
1651     constants included. Because the list of tabulated constants
1652     may grow and shrink, it would not be a sound decision to document
1653     the constants which are included here. Instead, use
1654     \emph{arbint const} with an invalid tag, and the software itself
1655     will list all of the internally tabulated constants and their
1656     significance.
1657     \end{tclcommanddescription}
1658    
1659     \begin{tclcommandsampleinvocations}
1660     Please note that the sample invocation below was created using
1661     v1.05 of the tool set. The list of constants may have grown
1662     since this example was created. Please poll the software directly
1663     by using \emph{arbint const} with an invalid tag to obtain the
1664     list of constants and their significance.
1665     \begin{scriptsize}
1666     \begin{verbatim}
1667     % arbint const xxx
1668     arbint const: "xxx" is not a recognized constant.
1669     Available constants are:
1670     e (1000 digits available)
1671     Historically significant transcendental constant. Digits obtained
1672     from http://fermi.udw.ac.za/physics/e.html on 08/17/01.
1673     g_si (6 digits available)
1674     Gravitational acceleration in SI units, meters per second**2.
1675     Obtained from NIST Special Publication 811 on 08/17/01.
1676     in2m (3 digits available)
1677     Multiplicative conversion factor from inches to meters.
1678     Obtained from NIST Special Publication 811 on 08/17/01.
1679     mi2km (7 digits available)
1680     Multiplicative conversion factor from miles to kilometers.
1681     Obtained from NIST Special Publication 811 on 08/17/01.
1682     pi (1201 digits available)
1683     Transcendental constant supplying ratio of a circle's circumference
1684     to its diameter. Digits obtained from http://www.joyofpi.com/
1685     pi.htm on 08/17/01.
1686     sqrt5 (1040 digits available)
1687     The square root of 5. Digits obtained from
1688     http://home.earthlink.net/~maryski/sqrt51000000.txt on 08/17/01.
1689     % arbint const pi
1690     3.14159265358979323846264338327
1691     % arbint const pi 100
1692     3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067
1693     % arbint const pi 10
1694     3.141592653
1695     % arbint cfbrapab [arbint const pi 100] 65535 65535
1696     65298/20785
1697     \end{verbatim}
1698     \end{scriptsize}
1699     \end{tclcommandsampleinvocations}
1700    
1701    
1702     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1703     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1704     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1705     \section{Miscellaneous Extensions}
1706    
1707     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1708     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1709     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1710     \subsection{credits}
1711    
1712     \index{credits@\emph{credits}}
1713     \begin{tclcommandname}{credits}%
1714     returns information about authorship of software components.
1715     \end{tclcommandname}
1716    
1717     \begin{tclcommandsynopsis}
1718     \tclcommandsynopsisline{credits}{}
1719     \tclcommandsynopsisline{credits}{searchstring}
1720     \end{tclcommandsynopsis}
1721    
1722     \begin{tclcommanddescription}
1723     The \emph{credits} command returns a list of contributors to the tools,
1724     their area(s) of contribution, and e-mail addresses. The volume of
1725     information returned can be reduced by using an optional \emph{searchstring}.
1726    
1727     \tclcommanddescsynopsisline{credits}{}
1728     \begin{tclcommandinternaldescription}
1729     Returns the complete list of contributors to the tools and their area(s) of contribution.
1730     \end{tclcommandinternaldescription}
1731    
1732     \tclcommanddescsynopsisline{credits}{searchstring}
1733     \begin{tclcommandinternaldescription}
1734     Returns all credit records containing \emph{searchstring}.
1735     Most commonly, this option is used to search for information about a specific
1736     command by using the command name as the \emph{searchstring}, or about a
1737     specific individual by using a component of the individual's name as the
1738     \emph{searchstring}.
1739    
1740     \end{tclcommandinternaldescription}
1741    
1742     \end{tclcommanddescription}
1743    
1744    
1745    
1746     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1747     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1748     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1749     \noindent\begin{figure}[!b]
1750     \noindent\rule[-0.25in]{\textwidth}{1pt}
1751     \begin{tiny}
1752     \begin{verbatim}
1753     $RCSfile: c_xtn0.tex,v $
1754     $Source: /home/dashley/cvsrep/e3ft_gpl01/e3ft_gpl01/dtaipubs/esrgubka/c_xtn0/c_xtn0.tex,v $
1755     $Revision: 1.11 $
1756     $Author: dtashley $
1757     $Date: 2003/04/03 19:49:36 $
1758     \end{verbatim}
1759     \end{tiny}
1760     \noindent\rule[0.25in]{\textwidth}{1pt}
1761     \end{figure}
1762    
1763     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1764     % $Log: c_xtn0.tex,v $
1765     % Revision 1.11 2003/04/03 19:49:36 dtashley
1766     % Global corrections to typeface of "gcd" made as per Jan-Hinnerk Reichert's
1767     % recommendation.
1768     %
1769     % Revision 1.10 2001/08/18 18:37:56 dtashley
1770     % Preparation for v1.05 release.
1771     %
1772     % Revision 1.9 2001/08/16 19:53:27 dtashley
1773     % Beginning to prepare for v1.05 release.
1774     %
1775     % Revision 1.8 2001/08/12 10:15:33 dtashley
1776     % Safety check-in. Substantial progress.
1777     %
1778     % Revision 1.7 2001/08/10 00:56:07 dtashley
1779     % Completion of basic rational number arithmetic utilities and extensions.
1780     %
1781     % Revision 1.6 2001/08/08 02:25:03 dtashley
1782     % Completion of RNRED utility and ARBINT RNRED Tcl extension.
1783     %
1784     % Revision 1.5 2001/08/07 10:46:44 dtashley
1785     % Completion of CFRATNUM Tcl extension and DOS command-line utility.
1786     %
1787     % Revision 1.4 2001/08/01 03:37:39 dtashley
1788     % Finished most primitive integer operations, both as Tcl extensions and
1789     % as DOS command-line utilities, such as addition, subtraction,
1790     % multiplication, division, and modulo.
1791     %
1792     % Revision 1.3 2001/07/30 02:54:17 dtashley
1793     % INTFAC extension and command-line utility finished.
1794     %
1795     % Revision 1.2 2001/07/01 20:50:58 dtashley
1796     % Move out of binary mode for use with CVS.
1797     %
1798     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1799     % $History: c_xtn0.tex $
1800     %
1801     % ***************** Version 3 *****************
1802     % User: Dashley1 Date: 2/10/01 Time: 2:03a
1803     % Updated in $/uC Software Multi-Volume Book (A)/Chapter, XTN0, IjuScripter-IjuConsole Tcl-Tk Extensions
1804     % Completion of Farey series chapter.
1805     %
1806     % ***************** Version 2 *****************
1807     % User: Dashley1 Date: 1/01/01 Time: 8:13p
1808     % Updated in $/uC Software Multi-Volume Book (A)/Chapter, XTN0, IjuScripter-IjuConsole Tcl-Tk Extensions
1809     % Edits.
1810     %
1811     % ***************** Version 1 *****************
1812     % User: Dashley1 Date: 12/31/00 Time: 9:34p
1813     % Created in $/uC Software Multi-Volume Book (A)/Chapter, XTN0, IjuScripter-IjuConsole Tcl-Tk Extensions
1814     % Initial check-in.
1815     %
1816 dashley 5 %End of file C_XTN0.TEX

Properties

Name Value
svn:eol-style native
svn:keywords Header

dashley@gmail.com
ViewVC Help
Powered by ViewVC 1.1.25