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 |