1 |
%$Header: /home/dashley/cvsrep/e3ft_gpl01/e3ft_gpl01/dtaipubs/esrgubka/c_dcm0/c_dcm0.tex,v 1.13 2001/08/18 18:37:56 dtashley Exp $
|
2 |
|
3 |
\chapter{\cdcmzerolongtitle{}}
|
4 |
|
5 |
\label{cdcm0}
|
6 |
|
7 |
|
8 |
`''---From A Chinese Restaurant
|
9 |
Fortune Cookie, 01/26/01
|
10 |
|
11 |
\beginchapterquote{``Simplicity of character is the natural result
|
12 |
of profound thought.''}
|
13 |
{From A Chinese Restaurant fortune cookie, 01/26/01}
|
14 |
|
15 |
\section{Introduction}
|
16 |
%Section Tag: INT0
|
17 |
\label{cdcm0:sint0}
|
18 |
|
19 |
\emph{The Iju Tool Set} includes a number of DOS console-mode utilities.
|
20 |
Although these utilities present a humble interface (text-only input and output),
|
21 |
some are very powerful. Because the internal architecture of the
|
22 |
\index{Microsoft \emph{Windows}@Microsoft Windows}\emph{Windows} family of
|
23 |
operating systems has changed over the years so that DOS console-mode
|
24 |
applications now use the Win32 memory model, these applications can now
|
25 |
allocate at least hundreds of megabytes of memory and are generally unfettered
|
26 |
in their operation. Despite the humble interface, console-mode applications
|
27 |
can now be very powerful indeed.
|
28 |
|
29 |
Many of these utilities are very similar to---and sometimes use the
|
30 |
same software components as---Tcl/Tk extensions that perform the same
|
31 |
functions.
|
32 |
|
33 |
The first part of this chapter describes command-line option formats which
|
34 |
are common across more than one utility. The second part of the chapter describes
|
35 |
each of the utilities in detail.
|
36 |
|
37 |
|
38 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
39 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
40 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
41 |
|
42 |
\subsection{Notational Conventions}
|
43 |
%Subsection tag: NCO0
|
44 |
\label{ctin0:sccl0:snco0}
|
45 |
|
46 |
We use the angle brackets (`\texttt{<}' and `\texttt{>}') to denote a
|
47 |
parameter which must occur and be completed with the information
|
48 |
indicated. For example, we would use \texttt{<winfname>} to indicate
|
49 |
that the name of a file must be provided in a format acceptable to
|
50 |
Windows.
|
51 |
|
52 |
We use the square brackets (`\texttt{[}' and `\texttt{]}') to denote
|
53 |
an optional parameter. Square brackets may be nested arbitrarily
|
54 |
deep---for example, `\texttt{[lastname [firstname]]}' would
|
55 |
indicate that both first name and last name may be omitted, but
|
56 |
the first name may not occur alone without the last name.
|
57 |
|
58 |
In all cases, the parameter types described in Section
|
59 |
\ctinzeroxrefhyphen{}\ref{ctin0:sccl0}
|
60 |
are used.
|
61 |
|
62 |
In some cases it may be necessary to distinguish between the
|
63 |
\emph{name} of a parameter and the \emph{type} of the parameter.
|
64 |
For example, two parameters may both be of type \texttt{uint32}
|
65 |
but may serve different functions---one may be, for example,
|
66 |
a dividend and the other a divisor. In these cases we use
|
67 |
the underscore character (`\texttt{\_}') to separate
|
68 |
the name and the type. For example, in such a case we may
|
69 |
use a description such as \texttt{divisor\_uint32}.
|
70 |
|
71 |
\subsection{The \texttt{-help} Option}
|
72 |
%Subsection tag: hel0
|
73 |
\label{cdcm0:sccl0:shel0}
|
74 |
|
75 |
\index{help@\texttt{-help}}
|
76 |
\index{-help@\texttt{-help}}
|
77 |
The command-line option \texttt{-help} (which must be used alone with no
|
78 |
other parameters) will cause a full set of help information to be written
|
79 |
to the standard output stream.
|
80 |
|
81 |
Any command line which is not recognized (i.e. that contains no parameters or is
|
82 |
otherwise invalid) will cause a message to be displayed to the effect that
|
83 |
the utility may be re-run with the \texttt{-help} parameter to obtain help
|
84 |
information.
|
85 |
|
86 |
\subsection{The \texttt{-verbose} And \texttt{-debug} Options}
|
87 |
%Subsection tag: ver0
|
88 |
\label{cdcm0:sccl0:sver0}
|
89 |
|
90 |
\index{verbose@\texttt{-verbose}}
|
91 |
\index{-verbose@\texttt{-verbose}}
|
92 |
\index{debug@\texttt{-debug}}
|
93 |
\index{-debug@\texttt{-debug}}
|
94 |
The command-line option \texttt{-verbose} will cause intermediate results and other
|
95 |
useful information to be written to the standard output as the utility runs.
|
96 |
Because it is very often
|
97 |
used, the \texttt{-verbose} option
|
98 |
can always be abbreviated \texttt{-v}.
|
99 |
For utilities which perform arithmetic, these intermediate results may be useful
|
100 |
in verifying hand calculations or for other purposes.
|
101 |
|
102 |
The \texttt{-debug} option will cause debugging information to be written to
|
103 |
the standard output. Because the \texttt{-debug} option is very rarely used,
|
104 |
it does not have an abbreviated form. The debugging information consists of
|
105 |
information that may be useful in diagnosing the internal problem if a utility
|
106 |
ever is found to contain a software defect.
|
107 |
|
108 |
The \texttt{-verbose} and \texttt{-debug} options are potentially orthogonal.
|
109 |
The information output enabled by the \texttt{-verbose} option may be different
|
110 |
than the information output enabled by the \texttt{-debug} option. The options
|
111 |
may be used together.
|
112 |
|
113 |
\subsection{The \texttt{-noformat} Option}
|
114 |
%Subsection tag: nfo0
|
115 |
\label{cdcm0:sccl0:snfo0}
|
116 |
|
117 |
\index{noformat@\texttt{-noformat}}
|
118 |
\index{-noformat@\texttt{-noformat}}
|
119 |
The command-line option \texttt{-noformat} will cause formatting of the output to be
|
120 |
suppressed. Because it is very often used, this option can always be abbreviated
|
121 |
\texttt{-nf}.
|
122 |
|
123 |
Normally, each command will format the output to be very aesthetic and
|
124 |
human-readable. This involves adding commas and comments and splitting
|
125 |
long integers across multiple lines. However, when piping data from one
|
126 |
utility to another or spawning these utilities from a script or other program,
|
127 |
it may be desirable to suppress all but the output data.
|
128 |
|
129 |
The \texttt{-verbose} and \texttt{-debug} options override (i.e. cancel)
|
130 |
the \texttt{-noformat} option. The \texttt{-noformat} option will not be
|
131 |
honored if it appears on the same command line as the
|
132 |
\texttt{-verbose} option or the \texttt{-debug} option.
|
133 |
|
134 |
|
135 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
136 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
137 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
138 |
\section{Invocation Of The Utilities}
|
139 |
%Section tag: INV0
|
140 |
|
141 |
The most common way to invoke any of these command-line utilities is
|
142 |
to open a console box (in Windows), and then to run these utilities
|
143 |
from the command line or from a batch file.
|
144 |
|
145 |
These utilities could also be run from a Tcl/Tk script, or spawned from
|
146 |
a Windows application.
|
147 |
|
148 |
These utilities do not write to the standard error stream (only to the
|
149 |
standard output), so output can always be redirected.
|
150 |
|
151 |
These utilities will generate a return code of 0 if no errors are detected, or
|
152 |
a return code of 4 if any errors are detected.
|
153 |
|
154 |
|
155 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
156 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
157 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
158 |
\section{File CRC And Hash Function Utilities}
|
159 |
%Section tag: CHF0
|
160 |
\label{cdcm0:schf0}
|
161 |
|
162 |
|
163 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
164 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
165 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
166 |
\subsection{The \emph{crc32} Utility}
|
167 |
%Subection tag: CRC0
|
168 |
\label{cdcm0:schf0:scrc0}
|
169 |
|
170 |
\index{crc32@\emph{crc32}}
|
171 |
\begin{dosutilcommandname}{crc32}%
|
172 |
calculates the CRC-32 and file size (in bytes) of a file.
|
173 |
The CRC-32 is written to the standard output in hexadecimal
|
174 |
notation, and the file size is written to the standard output
|
175 |
in decimal notation with commas.
|
176 |
\end{dosutilcommandname}
|
177 |
|
178 |
\begin{dosutilcommandsynopsis}
|
179 |
\dosutilcommandsynopsisline{crc32}{winfname [$<$options$>$]}
|
180 |
\dosutilcommandsynopsisline{crc32}{-help}
|
181 |
\end{dosutilcommandsynopsis}
|
182 |
|
183 |
\begin{dosutilcommanddescription}
|
184 |
The \emph{crc32} utility calculates the CRC-32 and length of a file.
|
185 |
This utility relies on C-language code obtained from a web page
|
186 |
maintained by \index{Ellingson, Richard A.}Richard A. Ellingson
|
187 |
\cite{bibref:w:ellingsoncrc32pages}.
|
188 |
The utility was checked against the values calculated by
|
189 |
\index{WinZip@\emph{WinZip}}\emph{WinZip}
|
190 |
\cite{bibref:s:winzip}.
|
191 |
\end{dosutilcommanddescription}
|
192 |
|
193 |
\begin{dosutilcommandsampleinvocations}
|
194 |
\begin{scriptsize}
|
195 |
\begin{verbatim}
|
196 |
C:\>crc32 t1.bin
|
197 |
0x9567CF44 (116,785,153)
|
198 |
|
199 |
C:\>crc32 t1.bin -noformat
|
200 |
9567CF44
|
201 |
116785153
|
202 |
\end{verbatim}
|
203 |
\end{scriptsize}
|
204 |
\end{dosutilcommandsampleinvocations}
|
205 |
|
206 |
\begin{dosutilcommandseealso}
|
207 |
See also the \emph{crc32} Tcl extension,
|
208 |
Section \cxtnzeroxrefhyphen{}\ref{cxtn0:scrc0:scrc0}.
|
209 |
\end{dosutilcommandseealso}
|
210 |
|
211 |
|
212 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
213 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
214 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
215 |
\section{Arbitrary-Length Integer Utilities}
|
216 |
%Section tag: ALI0
|
217 |
\label{cdcm0:sali0}
|
218 |
|
219 |
|
220 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
221 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
222 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
223 |
\subsection{The \emph{intadd} Utility}
|
224 |
%Subection tag: ADD0
|
225 |
\label{cdcm0:sali0:sadd0}
|
226 |
|
227 |
\index{intadd@\emph{intadd}}
|
228 |
\begin{dosutilcommandname}{intadd}%
|
229 |
adds two integers. (Mnemonic: \emph{int}eger
|
230 |
\emph{add}ition.)
|
231 |
\end{dosutilcommandname}
|
232 |
|
233 |
\begin{dosutilcommandsynopsis}
|
234 |
\dosutilcommandsynopsisline{intadd}{sint sint [$<$options$>$]}
|
235 |
\end{dosutilcommandsynopsis}
|
236 |
|
237 |
\begin{dosutilcommanddescription}
|
238 |
The \emph{intadd} utility calculates the sum of two integers.
|
239 |
\end{dosutilcommanddescription}
|
240 |
|
241 |
\begin{dosutilcommandsampleinvocations}
|
242 |
\begin{scriptsize}
|
243 |
\begin{verbatim}
|
244 |
C:\>intadd 1e20 4912471263493214
|
245 |
------------------------------------------------------------------------------
|
246 |
arg1: 100,000,000,000,000,000,000 ( 21 digits)
|
247 |
------------------------------------------------------------------------------
|
248 |
arg2: 4,912,471,263,493,214 ( 16 digits)
|
249 |
------------------------------------------------------------------------------
|
250 |
arg1 + arg2: 100,004,912,471,263,493,214 ( 21 digits)
|
251 |
------------------------------------------------------------------------------
|
252 |
\end{verbatim}
|
253 |
\end{scriptsize}
|
254 |
\end{dosutilcommandsampleinvocations}
|
255 |
|
256 |
\begin{dosutilcommandseealso}
|
257 |
See also the \emph{arbint intadd} Tcl extension,
|
258 |
Section \cxtnzeroxrefhyphen{}\ref{cxtn0:sarb0:sadd0}.
|
259 |
\end{dosutilcommandseealso}
|
260 |
|
261 |
|
262 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
263 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
264 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
265 |
\subsection{The \emph{intsub} Utility}
|
266 |
%Subection tag: SUB0
|
267 |
\label{cdcm0:sali0:ssub0}
|
268 |
|
269 |
\index{intsub@\emph{intsub}}
|
270 |
\begin{dosutilcommandname}{intsub}%
|
271 |
subtracts two integers. (Mnemonic: \emph{int}eger
|
272 |
\emph{sub}traction.)
|
273 |
\end{dosutilcommandname}
|
274 |
|
275 |
\begin{dosutilcommandsynopsis}
|
276 |
\dosutilcommandsynopsisline{intsub}{sint sint [$<$options$>$]}
|
277 |
\end{dosutilcommandsynopsis}
|
278 |
|
279 |
\begin{dosutilcommanddescription}
|
280 |
The \emph{intsub} utility calculates the difference of two integers.
|
281 |
\end{dosutilcommanddescription}
|
282 |
|
283 |
\begin{dosutilcommandsampleinvocations}
|
284 |
\begin{scriptsize}
|
285 |
\begin{verbatim}
|
286 |
C:\>intsub 1e110 99
|
287 |
------------------------------------------------------------------------------
|
288 |
arg1: 100, ( 111 digits)
|
289 |
000,000,000,000,000,000,000,000,000,
|
290 |
000,000,000,000,000,000,000,000,000,
|
291 |
000,000,000,000,000,000,000,000,000,
|
292 |
000,000,000,000,000,000,000,000,000
|
293 |
------------------------------------------------------------------------------
|
294 |
arg2: 99 ( 2 digits)
|
295 |
------------------------------------------------------------------------------
|
296 |
arg1 - arg2: 99, ( 110 digits)
|
297 |
999,999,999,999,999,999,999,999,999,
|
298 |
999,999,999,999,999,999,999,999,999,
|
299 |
999,999,999,999,999,999,999,999,999,
|
300 |
999,999,999,999,999,999,999,999,901
|
301 |
------------------------------------------------------------------------------
|
302 |
|
303 |
C:\>intsub 1e110 99 -nf
|
304 |
10000000000000000000000000000000000000000000000000000000000000000000000000000000
|
305 |
0000000000000000000000000000000
|
306 |
99
|
307 |
99999999999999999999999999999999999999999999999999999999999999999999999999999999
|
308 |
999999999999999999999999999901
|
309 |
\end{verbatim}
|
310 |
\end{scriptsize}
|
311 |
\end{dosutilcommandsampleinvocations}
|
312 |
|
313 |
\begin{dosutilcommandseealso}
|
314 |
See also the \emph{arbint intsub} Tcl extension,
|
315 |
Section \cxtnzeroxrefhyphen{}\ref{cxtn0:sarb0:ssub0}.
|
316 |
\end{dosutilcommandseealso}
|
317 |
|
318 |
|
319 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
320 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
321 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
322 |
\subsection{The \emph{intmul} Utility}
|
323 |
%Subsection tag: MUL0
|
324 |
\label{cdcm0:sali0:smul0}
|
325 |
|
326 |
\index{intmul@\emph{intmul}}
|
327 |
\begin{dosutilcommandname}{intmul}%
|
328 |
calculates the product of
|
329 |
two integers. (Mnemonic: \emph{int}eger
|
330 |
\emph{mul}tiplication.)
|
331 |
\end{dosutilcommandname}
|
332 |
|
333 |
\begin{dosutilcommandsynopsis}
|
334 |
\dosutilcommandsynopsisline{intmul}{sint sint [$<$options$>$]}
|
335 |
\end{dosutilcommandsynopsis}
|
336 |
|
337 |
\begin{dosutilcommanddescription}
|
338 |
The \emph{intmul} utility calculates product of two
|
339 |
integers.
|
340 |
\end{dosutilcommanddescription}
|
341 |
|
342 |
|
343 |
\begin{dosutilcommandsampleinvocations}
|
344 |
\begin{scriptsize}
|
345 |
\begin{verbatim}
|
346 |
C:\>intmul -916439216486321439672164132964 4321846.2864e28
|
347 |
------------------------------------------------------------------------------
|
348 |
arg1: - 916, ( 30 digits)
|
349 |
439,216,486,321,439,672,164,132,964
|
350 |
------------------------------------------------------------------------------
|
351 |
arg2: 43,218,462, ( 35 digits)
|
352 |
864,000,000,000,000,000,000,000,000
|
353 |
------------------------------------------------------------------------------
|
354 |
arg1 * arg2: - 39,607,094,244, ( 65 digits)
|
355 |
827,339,704,438,441,915,017,392,248,
|
356 |
896,000,000,000,000,000,000,000,000
|
357 |
------------------------------------------------------------------------------
|
358 |
|
359 |
C:\>intmul -916439216486321439672164132964 4321846.2864e28 -nf
|
360 |
-916439216486321439672164132964
|
361 |
43218462864000000000000000000000000
|
362 |
-39607094244827339704438441915017392248896000000000000000000000000
|
363 |
\end{verbatim}
|
364 |
\end{scriptsize}
|
365 |
\end{dosutilcommandsampleinvocations}
|
366 |
|
367 |
\begin{dosutilcommandseealso}
|
368 |
See also the \emph{arbint intmul} Tcl extension,
|
369 |
Section \cxtnzeroxrefhyphen{}\ref{cxtn0:sarb0:smul0}.
|
370 |
\end{dosutilcommandseealso}
|
371 |
|
372 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
373 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
374 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
375 |
\subsection{The \emph{intdiv} Utility}
|
376 |
%Subsection tag: DIV0
|
377 |
\label{cdcm0:sali0:sdiv0}
|
378 |
|
379 |
\index{intdiv@\emph{intdiv}}
|
380 |
\begin{dosutilcommandname}{intdiv}%
|
381 |
calculates the integer quotient (i.e. without remainder) of
|
382 |
two integers.
|
383 |
(Mnemonic: \emph{int}eger
|
384 |
\emph{div}ision.)
|
385 |
\end{dosutilcommandname}
|
386 |
|
387 |
\begin{dosutilcommandsynopsis}
|
388 |
\dosutilcommandsynopsisline{intdiv}{sint sint [$<$options$>$]}
|
389 |
\end{dosutilcommandsynopsis}
|
390 |
|
391 |
\begin{dosutilcommanddescription}
|
392 |
The \emph{intdiv} utility calculates the integer quotient
|
393 |
of two integers. The mapping that is made is
|
394 |
more precisely described in
|
395 |
Section \cxtnzeroxrefhyphen{}\ref{cxtn0:sarb0:sdiv0} in the
|
396 |
description of the \emph{arbint intdiv} Tcl extension.
|
397 |
\end{dosutilcommanddescription}
|
398 |
|
399 |
\begin{dosutilcommandsampleinvocations}
|
400 |
\begin{scriptsize}
|
401 |
\begin{verbatim}
|
402 |
C:\>intdiv 296491826436721 91843682163
|
403 |
------------------------------------------------------------------------------
|
404 |
arg1: 296,491,826,436,721 ( 15 digits)
|
405 |
------------------------------------------------------------------------------
|
406 |
arg2: 91,843,682,163 ( 11 digits)
|
407 |
------------------------------------------------------------------------------
|
408 |
arg1 / arg2: 3,228 ( 4 digits)
|
409 |
------------------------------------------------------------------------------
|
410 |
|
411 |
C:\>intdiv 296491826436721 91843682163 -nf
|
412 |
296491826436721
|
413 |
91843682163
|
414 |
3228
|
415 |
\end{verbatim}
|
416 |
\end{scriptsize}
|
417 |
\end{dosutilcommandsampleinvocations}
|
418 |
|
419 |
\begin{dosutilcommandseealso}
|
420 |
See also the \emph{arbint intdiv} Tcl extension,
|
421 |
Section \cxtnzeroxrefhyphen{}\ref{cxtn0:sarb0:sdiv0}.
|
422 |
\end{dosutilcommandseealso}
|
423 |
|
424 |
|
425 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
426 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
427 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
428 |
\subsection{The \emph{intmod} Utility}
|
429 |
%Subsection tag: MOD0
|
430 |
\label{cdcm0:sali0:smod0}
|
431 |
|
432 |
\index{intmod@\emph{intmod}}
|
433 |
\begin{dosutilcommandname}{intmod}%
|
434 |
calculates the integer modulo (i.e. remainder of division) of
|
435 |
two integers.
|
436 |
(Mnemonic: \emph{int}eger
|
437 |
\emph{mod}ulo.)
|
438 |
\end{dosutilcommandname}
|
439 |
|
440 |
\begin{dosutilcommandsynopsis}
|
441 |
\dosutilcommandsynopsisline{intmod}{sint sint [$<$options$>$]}
|
442 |
\end{dosutilcommandsynopsis}
|
443 |
|
444 |
\begin{dosutilcommanddescription}
|
445 |
The \emph{intmod} utility calculates the integer modulo
|
446 |
of two integers. The mapping that is made is
|
447 |
more precisely described in
|
448 |
Section \cxtnzeroxrefhyphen{}\ref{cxtn0:sarb0:smod0} in the
|
449 |
description of the \emph{arbint intmod} Tcl extension.
|
450 |
\end{dosutilcommanddescription}
|
451 |
|
452 |
\begin{dosutilcommandsampleinvocations}
|
453 |
\begin{scriptsize}
|
454 |
\begin{verbatim}
|
455 |
C:\>intmod 2836549213654 15432154
|
456 |
------------------------------------------------------------------------------
|
457 |
arg1: 2,836,549,213,654 ( 13 digits)
|
458 |
------------------------------------------------------------------------------
|
459 |
arg2: 15,432,154 ( 8 digits)
|
460 |
------------------------------------------------------------------------------
|
461 |
arg1 % arg2: 11,283,376 ( 8 digits)
|
462 |
------------------------------------------------------------------------------
|
463 |
|
464 |
C:\>intmod 2836549213654 0
|
465 |
------------------------------------------------------------------------------
|
466 |
arg1: 2,836,549,213,654 ( 13 digits)
|
467 |
------------------------------------------------------------------------------
|
468 |
arg2: 0 ( 1 digit )
|
469 |
------------------------------------------------------------------------------
|
470 |
arg1 % arg2: GMP_INTS_EF_INTOVF_POS
|
471 |
------------------------------------------------------------------------------
|
472 |
|
473 |
C:\>intmod 2836549213654 0 -nf
|
474 |
2836549213654
|
475 |
0
|
476 |
GMP_INTS_EF_INTOVF_POS
|
477 |
\end{verbatim}
|
478 |
\end{scriptsize}
|
479 |
\end{dosutilcommandsampleinvocations}
|
480 |
|
481 |
\begin{dosutilcommandseealso}
|
482 |
See also the \emph{arbint intmod} Tcl extension,
|
483 |
Section \cxtnzeroxrefhyphen{}\ref{cxtn0:sarb0:smod0}.
|
484 |
\end{dosutilcommandseealso}
|
485 |
|
486 |
|
487 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
488 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
489 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
490 |
\subsection{The \emph{intgcd} Utility}
|
491 |
%Subsection tag: GCD0
|
492 |
\label{cdcm0:sali0:sgcd0}
|
493 |
|
494 |
\index{intgcd@\emph{intgcd}}
|
495 |
\begin{dosutilcommandname}{intgcd}%
|
496 |
calculates the g.c.d. of two arbitrary integers using
|
497 |
Euclid's algorithm. (Mnemonic: \emph{int}eger
|
498 |
\emph{g}reatest \emph{c}ommon \emph{d}ivisor.)
|
499 |
\end{dosutilcommandname}
|
500 |
|
501 |
\begin{dosutilcommandsynopsis}
|
502 |
\dosutilcommandsynopsisline{intgcd}{sint\_1 sint\_2 [$<$options$>$]}
|
503 |
\end{dosutilcommandsynopsis}
|
504 |
|
505 |
\begin{dosutilcommanddescription}
|
506 |
The \emph{intgcd} utility calculates the g.c.d. of two
|
507 |
integers.
|
508 |
|
509 |
If either or both integers are 0, the result will be 1.
|
510 |
If either or both integers are negative, the absolute
|
511 |
value of the negative argument(s) will be used in the
|
512 |
calculation of the g.c.d.
|
513 |
|
514 |
The algorithm employed is the
|
515 |
\emph{Modern Euclidian Algorithm} as
|
516 |
described in \cite{bibref:b:knuthclassic2ndedvol2}, p. 337.
|
517 |
Although faster algorithms for computer
|
518 |
implementation do exist, this is the simplest
|
519 |
and most direct algorithm.
|
520 |
\end{dosutilcommanddescription}
|
521 |
|
522 |
\begin{dosutilcommandsampleinvocations}
|
523 |
\begin{scriptsize}
|
524 |
\begin{verbatim}
|
525 |
C:\>intgcd 8326413249250 12935482154386850
|
526 |
------------------------------------------------------------------------------
|
527 |
arg1: 8,326,413,249,250 ( 13 digits)
|
528 |
------------------------------------------------------------------------------
|
529 |
arg2: 12,935,482,154,386,850 ( 17 digits)
|
530 |
------------------------------------------------------------------------------
|
531 |
gcd(arg1, arg2): 50 ( 2 digits)
|
532 |
------------------------------------------------------------------------------
|
533 |
|
534 |
C:\>intgcd 8326413249250 12935482154386850 -nf
|
535 |
8326413249250
|
536 |
12935482154386850
|
537 |
50
|
538 |
\end{verbatim}
|
539 |
\end{scriptsize}
|
540 |
\end{dosutilcommandsampleinvocations}
|
541 |
|
542 |
\begin{dosutilcommandseealso}
|
543 |
See also the \emph{arbint intgcd} Tcl extension,
|
544 |
Section \cxtnzeroxrefhyphen{}\ref{cxtn0:sarb0:sgcd0}.
|
545 |
\end{dosutilcommandseealso}
|
546 |
|
547 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
548 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
549 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
550 |
\subsection{The \emph{intlcm} Utility}
|
551 |
%Subsection tag: LCM0
|
552 |
\label{cdcm0:sali0:slcm0}
|
553 |
|
554 |
\index{intlcm@\emph{intlcm}}
|
555 |
\begin{dosutilcommandname}{intlcm}%
|
556 |
calculates the l.c.m. (least common multiple)
|
557 |
of two integers. (Mnemonic: \emph{int}eger
|
558 |
\emph{l}east \emph{c}ommon \emph{m}ultiple.)
|
559 |
\end{dosutilcommandname}
|
560 |
|
561 |
\begin{dosutilcommandsynopsis}
|
562 |
\dosutilcommandsynopsisline{intlcm}{sint\_1 sint\_2 [$<$options$>$]}
|
563 |
\end{dosutilcommandsynopsis}
|
564 |
|
565 |
\begin{dosutilcommanddescription}
|
566 |
The \emph{intlcm} utility calculates the l.c.m. of two
|
567 |
integers.
|
568 |
|
569 |
The mapping from arguments to output and the details
|
570 |
of how the l.c.m. is calculated are described
|
571 |
Section \cxtnzeroxrefhyphen{}\ref{cxtn0:sarb0:slcm0}.
|
572 |
\end{dosutilcommanddescription}
|
573 |
|
574 |
\begin{dosutilcommandsampleinvocations}
|
575 |
\begin{scriptsize}
|
576 |
\begin{verbatim}
|
577 |
C:\>intlcm 12 69
|
578 |
------------------------------------------------------------------------------
|
579 |
arg1: 12 ( 2 digits)
|
580 |
------------------------------------------------------------------------------
|
581 |
arg2: 69 ( 2 digits)
|
582 |
------------------------------------------------------------------------------
|
583 |
lcm(arg1, arg2): 276 ( 3 digits)
|
584 |
------------------------------------------------------------------------------
|
585 |
\end{verbatim}
|
586 |
\end{scriptsize}
|
587 |
\end{dosutilcommandsampleinvocations}
|
588 |
|
589 |
\begin{dosutilcommandseealso}
|
590 |
See also the \emph{arbint intlcm} Tcl extension,
|
591 |
Section \cxtnzeroxrefhyphen{}\ref{cxtn0:sarb0:slcm0}.
|
592 |
\end{dosutilcommandseealso}
|
593 |
|
594 |
|
595 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
596 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
597 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
598 |
\subsection{The \emph{intexp} Utility}
|
599 |
%Subsection tag: IXP0
|
600 |
\label{cdcm0:sali0:sixp0}
|
601 |
|
602 |
\index{intexp@\emph{intexp}}
|
603 |
\begin{dosutilcommandname}{intexp}%
|
604 |
exponentiates a signed integer to a non-negative integer
|
605 |
power. (Mnemonic: \emph{int}eger
|
606 |
\emph{exp}onent.)
|
607 |
\end{dosutilcommandname}
|
608 |
|
609 |
\begin{dosutilcommandsynopsis}
|
610 |
\dosutilcommandsynopsisline{intexp}{sint\_base uint32\_exponent [$<$options$>$]}
|
611 |
\end{dosutilcommandsynopsis}
|
612 |
|
613 |
\begin{dosutilcommanddescription}
|
614 |
The \emph{intexp} utility exponentiates an integer to a non-negative
|
615 |
integer power. For convenience and simplicity, $0^0$ produces 1,
|
616 |
which is inconsistent with the mathematical definition; but all other
|
617 |
exponentiations are as expected. The mapping is more precisely described
|
618 |
with the \emph{arbint intexp} Tcl extension in
|
619 |
Section \cxtnzeroxrefhyphen{}\ref{cxtn0:sarb0:sixp0}.
|
620 |
\end{dosutilcommanddescription}
|
621 |
|
622 |
\begin{dosutilcommandsampleinvocations}
|
623 |
\begin{scriptsize}
|
624 |
\begin{verbatim}
|
625 |
C:\>intexp -22 41
|
626 |
------------------------------------------------------------------------------
|
627 |
base: - 22 ( 2 digits)
|
628 |
------------------------------------------------------------------------------
|
629 |
exponent: 41 ( 2 digits)
|
630 |
------------------------------------------------------------------------------
|
631 |
base ** exponent: - 10, ( 56 digits)
|
632 |
947,877,107,572,929,152,919,737,180,
|
633 |
202,022,857,988,400,441,953,615,872
|
634 |
------------------------------------------------------------------------------
|
635 |
|
636 |
C:\>intexp -22 41 -nf
|
637 |
-22
|
638 |
41
|
639 |
-10947877107572929152919737180202022857988400441953615872
|
640 |
\end{verbatim}
|
641 |
\end{scriptsize}
|
642 |
\end{dosutilcommandsampleinvocations}
|
643 |
|
644 |
\begin{dosutilcommandseealso}
|
645 |
See also the \emph{arbint intexp} Tcl extension,
|
646 |
Section \cxtnzeroxrefhyphen{}\ref{cxtn0:sarb0:sixp0}.
|
647 |
\end{dosutilcommandseealso}
|
648 |
|
649 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
650 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
651 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
652 |
\subsection{The \emph{intfac} Utility}
|
653 |
%Subsection tag: IFC0
|
654 |
\label{cdcm0:sali0:sifc0}
|
655 |
|
656 |
\index{intfac@\emph{intfac}}
|
657 |
\begin{dosutilcommandname}{intfac}%
|
658 |
calculates the \index{factorial function}factorial of a non-negative
|
659 |
integer. (Mnemonic: \emph{int}eger
|
660 |
\emph{fac}torial.)
|
661 |
\end{dosutilcommandname}
|
662 |
|
663 |
\begin{dosutilcommandsynopsis}
|
664 |
\dosutilcommandsynopsisline{intfac}{uint32 [$<$options$>$]}
|
665 |
\end{dosutilcommandsynopsis}
|
666 |
|
667 |
\begin{dosutilcommanddescription}
|
668 |
The \emph{intfac} utility calculates the factorial of
|
669 |
a non-negative integer. 0! is defined to be 1.
|
670 |
|
671 |
This utility is useful for calculating the factorial of
|
672 |
integers where the result would be quite large (larger than
|
673 |
could be displayed on a pocket calculator, for example).
|
674 |
\end{dosutilcommanddescription}
|
675 |
|
676 |
\begin{dosutilcommandremarks}
|
677 |
At the present time (07/2001, Version 1.04), the \emph{intfac} utility
|
678 |
is constrained by the division operations required to convert from the
|
679 |
binary internal integer format to a base-10 ASCII representation.
|
680 |
The \emph{intfac} utility will not calculate factorials of over about
|
681 |
1,000 decimal digits without a fair delay. In the future, algorithmic
|
682 |
improvements may raise this limit.
|
683 |
\end{dosutilcommandremarks}
|
684 |
|
685 |
\begin{dosutilcommandsampleinvocations}
|
686 |
\begin{scriptsize}
|
687 |
\begin{verbatim}
|
688 |
C:\>intfac 47
|
689 |
------------------------------------------------------------------------------
|
690 |
arg: 47 ( 2 digits)
|
691 |
------------------------------------------------------------------------------
|
692 |
arg!: 258,623, ( 60 digits)
|
693 |
241,511,168,180,642,964,355,153,611,
|
694 |
979,969,197,632,389,120,000,000,000
|
695 |
------------------------------------------------------------------------------
|
696 |
|
697 |
C:\>intfac 47 -noformat
|
698 |
47
|
699 |
258623241511168180642964355153611979969197632389120000000000
|
700 |
\end{verbatim}
|
701 |
\end{scriptsize}
|
702 |
\end{dosutilcommandsampleinvocations}
|
703 |
|
704 |
\begin{dosutilcommandseealso}
|
705 |
See also the \emph{arbint intfac} Tcl extension,
|
706 |
Section \cxtnzeroxrefhyphen{}\ref{cxtn0:sarb0:sfac0}.
|
707 |
\end{dosutilcommandseealso}
|
708 |
|
709 |
|
710 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
711 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
712 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
713 |
\section{Rational Number Arithmetic Utilities}
|
714 |
%Section tag: RNU0
|
715 |
\label{cdcm0:srnu0}
|
716 |
|
717 |
|
718 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
719 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
720 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
721 |
\subsection{The \emph{rnadd} Utility}
|
722 |
%Subsection tag: RNA0
|
723 |
\label{cdcm0:srnu0:srna0}
|
724 |
|
725 |
\index{rnadd@\emph{rnadd}}
|
726 |
\begin{dosutilcommandname}{rnadd}%
|
727 |
adds two rational numbers to produce a normalized rational result.
|
728 |
(Mnemonic: \emph{r}ational \emph{n}umber
|
729 |
\emph{add}ition.)
|
730 |
\end{dosutilcommandname}
|
731 |
|
732 |
\begin{dosutilcommandsynopsis}
|
733 |
\dosutilcommandsynopsisline{rnadd}{srn srn [$<$options$>$]}
|
734 |
\end{dosutilcommandsynopsis}
|
735 |
|
736 |
\begin{dosutilcommanddescription}
|
737 |
The \emph{rnadd} utility calculates the sum of two arbitrary
|
738 |
rational numbers.
|
739 |
\end{dosutilcommanddescription}
|
740 |
|
741 |
\begin{dosutilcommandsampleinvocations}
|
742 |
\begin{scriptsize}
|
743 |
\begin{verbatim}
|
744 |
C:\>rnadd 3.29 42/67
|
745 |
------------------------------------------------------------------------------
|
746 |
arg1_num: 329 ( 3 digits)
|
747 |
------------------------------------------------------------------------------
|
748 |
arg1_den: 100 ( 3 digits)
|
749 |
------------------------------------------------------------------------------
|
750 |
arg2_num: 42 ( 2 digits)
|
751 |
------------------------------------------------------------------------------
|
752 |
arg2_den: 67 ( 2 digits)
|
753 |
------------------------------------------------------------------------------
|
754 |
result_num: 26,243 ( 5 digits)
|
755 |
------------------------------------------------------------------------------
|
756 |
result_den: 6,700 ( 4 digits)
|
757 |
------------------------------------------------------------------------------
|
758 |
\end{verbatim}
|
759 |
\end{scriptsize}
|
760 |
\end{dosutilcommandsampleinvocations}
|
761 |
|
762 |
\begin{dosutilcommandseealso}
|
763 |
See also the \emph{arbint rnadd} Tcl extension,
|
764 |
Section \cxtnzeroxrefhyphen{}\ref{cxtn0:srne0:srad0}.
|
765 |
\end{dosutilcommandseealso}
|
766 |
|
767 |
|
768 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
769 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
770 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
771 |
\subsection{The \emph{rnsub} Utility}
|
772 |
%Subsection tag: RSB0
|
773 |
\label{cdcm0:srnu0:srsb0}
|
774 |
|
775 |
\index{rnsub@\emph{rnsub}}
|
776 |
\begin{dosutilcommandname}{rnsub}%
|
777 |
subtracts two rational numbers to produce a normalized rational result.
|
778 |
(Mnemonic: \emph{r}ational \emph{n}umber
|
779 |
\emph{sub}traction.)
|
780 |
\end{dosutilcommandname}
|
781 |
|
782 |
\begin{dosutilcommandsynopsis}
|
783 |
\dosutilcommandsynopsisline{rnsub}{srn srn [$<$options$>$]}
|
784 |
\end{dosutilcommandsynopsis}
|
785 |
|
786 |
\begin{dosutilcommanddescription}
|
787 |
The \emph{rnsub} utility calculates the difference of two arbitrary
|
788 |
rational numbers. The second argument is subtracted from the first,
|
789 |
i.e. $arg_2 - arg_1$ is calculated.
|
790 |
\end{dosutilcommanddescription}
|
791 |
|
792 |
\begin{dosutilcommandsampleinvocations}
|
793 |
\begin{scriptsize}
|
794 |
\begin{verbatim}
|
795 |
C:\>rnsub 3.29 42/67
|
796 |
------------------------------------------------------------------------------
|
797 |
arg1_num: 329 ( 3 digits)
|
798 |
------------------------------------------------------------------------------
|
799 |
arg1_den: 100 ( 3 digits)
|
800 |
------------------------------------------------------------------------------
|
801 |
arg2_num: 42 ( 2 digits)
|
802 |
------------------------------------------------------------------------------
|
803 |
arg2_den: 67 ( 2 digits)
|
804 |
------------------------------------------------------------------------------
|
805 |
result_num: 17,843 ( 5 digits)
|
806 |
------------------------------------------------------------------------------
|
807 |
result_den: 6,700 ( 4 digits)
|
808 |
------------------------------------------------------------------------------
|
809 |
\end{verbatim}
|
810 |
\end{scriptsize}
|
811 |
\end{dosutilcommandsampleinvocations}
|
812 |
|
813 |
\begin{dosutilcommandseealso}
|
814 |
See also the \emph{arbint rnsub} Tcl extension,
|
815 |
Section \cxtnzeroxrefhyphen{}\ref{cxtn0:srne0:srsb0}.
|
816 |
\end{dosutilcommandseealso}
|
817 |
|
818 |
|
819 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
820 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
821 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
822 |
\subsection{The \emph{rnmul} Utility}
|
823 |
%Subsection tag: RMU0
|
824 |
\label{cdcm0:srnu0:srmu0}
|
825 |
|
826 |
\index{rnmul@\emph{rnmul}}
|
827 |
\begin{dosutilcommandname}{rnmul}%
|
828 |
calculates the product of two rational numbers.
|
829 |
(Mnemonic: \emph{r}ational
|
830 |
\emph{n}umber \emph{mul}tiplication.)
|
831 |
\end{dosutilcommandname}
|
832 |
|
833 |
\begin{dosutilcommandsynopsis}
|
834 |
\dosutilcommandsynopsisline{rnmul}{srn srn [$<$options$>$]}
|
835 |
\end{dosutilcommandsynopsis}
|
836 |
|
837 |
\begin{dosutilcommanddescription}
|
838 |
The \emph{rnmul} utility calculates the product
|
839 |
of two rational numbers.
|
840 |
\end{dosutilcommanddescription}
|
841 |
|
842 |
\begin{dosutilcommandsampleinvocations}
|
843 |
\begin{scriptsize}
|
844 |
\begin{verbatim}
|
845 |
E:\>rnmul 3.14 64/207
|
846 |
------------------------------------------------------------------------------
|
847 |
arg1_num: 314 ( 3 digits)
|
848 |
------------------------------------------------------------------------------
|
849 |
arg1_den: 100 ( 3 digits)
|
850 |
------------------------------------------------------------------------------
|
851 |
arg2_num: 64 ( 2 digits)
|
852 |
------------------------------------------------------------------------------
|
853 |
arg2_den: 207 ( 3 digits)
|
854 |
------------------------------------------------------------------------------
|
855 |
result_num: 5,024 ( 4 digits)
|
856 |
------------------------------------------------------------------------------
|
857 |
result_den: 5,175 ( 4 digits)
|
858 |
------------------------------------------------------------------------------
|
859 |
\end{verbatim}
|
860 |
\end{scriptsize}
|
861 |
\end{dosutilcommandsampleinvocations}
|
862 |
|
863 |
\begin{dosutilcommandseealso}
|
864 |
See also the \emph{arbint rnmul} Tcl extension,
|
865 |
Section \cxtnzeroxrefhyphen{}\ref{cxtn0:srne0:srmu0}.
|
866 |
\end{dosutilcommandseealso}
|
867 |
|
868 |
|
869 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
870 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
871 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
872 |
\subsection{The \emph{rndiv} Utility}
|
873 |
%Subsection tag: RDV0
|
874 |
\label{cdcm0:srnu0:srdv0}
|
875 |
|
876 |
\index{rndiv@\emph{rndiv}}
|
877 |
\begin{dosutilcommandname}{rndiv}%
|
878 |
calculates the quotient of two rational numbers.
|
879 |
(Mnemonic: \emph{r}ational
|
880 |
\emph{n}umber \emph{div}ision.)
|
881 |
\end{dosutilcommandname}
|
882 |
|
883 |
\begin{dosutilcommandsynopsis}
|
884 |
\dosutilcommandsynopsisline{rndiv}{srn srn [$<$options$>$]}
|
885 |
\end{dosutilcommandsynopsis}
|
886 |
|
887 |
\begin{dosutilcommanddescription}
|
888 |
The \emph{rnmul} utility calculates the quotient
|
889 |
of two rational numbers. The first argument is divided
|
890 |
by the second; i.e. the quotient $arg_1 / arg_2$ is calculated.
|
891 |
\end{dosutilcommanddescription}
|
892 |
|
893 |
\begin{dosutilcommandsampleinvocations}
|
894 |
\begin{scriptsize}
|
895 |
\begin{verbatim}
|
896 |
E:\>rndiv 3.14 34/291
|
897 |
------------------------------------------------------------------------------
|
898 |
arg1_num: 314 ( 3 digits)
|
899 |
------------------------------------------------------------------------------
|
900 |
arg1_den: 100 ( 3 digits)
|
901 |
------------------------------------------------------------------------------
|
902 |
arg2_num: 34 ( 2 digits)
|
903 |
------------------------------------------------------------------------------
|
904 |
arg2_den: 291 ( 3 digits)
|
905 |
------------------------------------------------------------------------------
|
906 |
result_num: 45,687 ( 5 digits)
|
907 |
------------------------------------------------------------------------------
|
908 |
result_den: 1,700 ( 4 digits)
|
909 |
------------------------------------------------------------------------------
|
910 |
\end{verbatim}
|
911 |
\end{scriptsize}
|
912 |
\end{dosutilcommandsampleinvocations}
|
913 |
|
914 |
\begin{dosutilcommandseealso}
|
915 |
See also the \emph{arbint rndiv} Tcl extension,
|
916 |
Section \cxtnzeroxrefhyphen{}\ref{cxtn0:srne0:srdv0}.
|
917 |
\end{dosutilcommandseealso}
|
918 |
|
919 |
|
920 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
921 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
922 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
923 |
\subsection{The \emph{rndeq} Utility}
|
924 |
%Subsection tag: RNQ0
|
925 |
\label{cdcm0:srnu0:srnq0}
|
926 |
|
927 |
\index{rndeq@\emph{rndeq}}
|
928 |
\begin{dosutilcommandname}{rndeq}%
|
929 |
calculates the decimal equivalent of a rational number.
|
930 |
(Mnemonic: \emph{r}ational \emph{n}umber
|
931 |
\emph{d}ecimal \emph{eq}uivalent.)
|
932 |
\end{dosutilcommandname}
|
933 |
|
934 |
\begin{dosutilcommandsynopsis}
|
935 |
\dosutilcommandsynopsisline{rndeq}{srn [$<$options$>$]}
|
936 |
\dosutilcommandsynopsisline{rndeq}{srn uint [$<$options$>$]}
|
937 |
\end{dosutilcommandsynopsis}
|
938 |
|
939 |
\begin{dosutilcommanddescription}
|
940 |
The \emph{rndeq} utility calculates the decimal equivalent
|
941 |
of a rational number using a large integer
|
942 |
algorithm.
|
943 |
|
944 |
Let $a/b$ be a rational number that we wish to express
|
945 |
as a decimal number, let $N$ be an integral power
|
946 |
of 10, and let $x$ be an integer chosen so that $x/N$
|
947 |
is an approximation to $a/b$.
|
948 |
|
949 |
If we choose
|
950 |
|
951 |
\begin{equation}
|
952 |
\label{eq:cdcm0:sali0:srnq0:01}
|
953 |
x = sgn \left( {\frac{a}{b}} \right)
|
954 |
\left\lfloor {\left| \frac{a}{b} \right| N} \right\rfloor ,
|
955 |
\end{equation}
|
956 |
|
957 |
it can be shown that
|
958 |
|
959 |
\begin{equation}
|
960 |
\label{eq:cdcm0:sali0:srnq0:02}
|
961 |
\left| {\frac{a}{b}} \right| - \frac{1}{N}
|
962 |
<
|
963 |
\frac{\left\lfloor {\left| {\frac{a}{b}} \right| N} \right\rfloor}{N}
|
964 |
\leq
|
965 |
\left|{\frac{a}{b}}\right|.
|
966 |
\end{equation}
|
967 |
|
968 |
In other words, the result if $x$ is chosen as specified in
|
969 |
(\ref{eq:cdcm0:sali0:srnq0:01}), $x/N$ will be at or up to one numerator
|
970 |
count less in magnitude than $a/b$. Stated differently,
|
971 |
$x/N$ is ``truncated down'' in magnitude.
|
972 |
|
973 |
The \emph{rndeq} utility performs the mapping implied by
|
974 |
(\ref{eq:cdcm0:sali0:srnq0:01}) and
|
975 |
(\ref{eq:cdcm0:sali0:srnq0:02}), by default using
|
976 |
$N=10^{108}$. The value of $N=10^{108}$ was chosen
|
977 |
because it produces an attractive display format at
|
978 |
27 digits per line, and also places the imaginary decimal
|
979 |
point between lines so it is easier to interpret the output of
|
980 |
this utility. An example is interpreted in the sample invocations
|
981 |
below.
|
982 |
|
983 |
This utility will accept an optional second parameter, which
|
984 |
is a value of $N$ to override the default of $10^{108}$. This
|
985 |
optional second parameter can be used to provide more decimal places,
|
986 |
or to provide a different type of mapping.\footnote{Please be aware that integers
|
987 |
may be specified using scientific notation. For example, to effectively double
|
988 |
the number of decimal places displayed by \texttt{rndeq} in the
|
989 |
invocation example below, one might enter the command line
|
990 |
\texttt{rndeq 5345/319 1e216}. We would regret it if this fact were unknown
|
991 |
and some desperate user were to enter the digit ``1'' followed by
|
992 |
216 zeros!}
|
993 |
|
994 |
It is not required that the second parameter, if supplied, be a power of
|
995 |
10---the mappings described by the equations above will be carried
|
996 |
out with \emph{any} supplied denominator.
|
997 |
However, it is not intuitively obvious how this utility would be
|
998 |
useful with a denominator that is not a power of 10.
|
999 |
\end{dosutilcommanddescription}
|
1000 |
|
1001 |
\begin{dosutilcommandsampleinvocations}
|
1002 |
\begin{scriptsize}
|
1003 |
\begin{verbatim}
|
1004 |
C:\>rndeq 5345/319
|
1005 |
------------------------------------------------------------------------------
|
1006 |
arg_num: 5,345 ( 4 digits)
|
1007 |
------------------------------------------------------------------------------
|
1008 |
arg_den: 319 ( 3 digits)
|
1009 |
------------------------------------------------------------------------------
|
1010 |
dap_num: 16, ( 110 digits)
|
1011 |
755,485,893,416,927,899,686,520,376,
|
1012 |
175,548,589,341,692,789,968,652,037,
|
1013 |
617,554,858,934,169,278,996,865,203,
|
1014 |
761,755,485,893,416,927,899,686,520
|
1015 |
------------------------------------------------------------------------------
|
1016 |
dap_den: 1, ( 109 digits)
|
1017 |
000,000,000,000,000,000,000,000,000,
|
1018 |
000,000,000,000,000,000,000,000,000,
|
1019 |
000,000,000,000,000,000,000,000,000,
|
1020 |
000,000,000,000,000,000,000,000,000
|
1021 |
------------------------------------------------------------------------------
|
1022 |
\end{verbatim}
|
1023 |
\end{scriptsize}
|
1024 |
|
1025 |
It can be seen from the sample invocation above that
|
1026 |
5345/319$\approx$16.755---note how the imaginary decimal point is placed
|
1027 |
between lines of \texttt{dap\_num}. It can also be seen that the
|
1028 |
decimal representation repeats, i.e.
|
1029 |
|
1030 |
\begin{equation}
|
1031 |
\frac{5345}{319} = 16.\overline{7554858934169278996865203761}.
|
1032 |
\end{equation}
|
1033 |
\end{dosutilcommandsampleinvocations}
|
1034 |
|
1035 |
|
1036 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
1037 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
1038 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
1039 |
\subsection{The \emph{rnred} Utility}
|
1040 |
%Subsection tag: RNR0
|
1041 |
\label{cdcm0:srnu0:srnr0}
|
1042 |
|
1043 |
\index{rnred@\emph{rnred}}
|
1044 |
\begin{dosutilcommandname}{rnred}%
|
1045 |
reduces a rational number to lowest terms and normalizes it.
|
1046 |
(Mnemonic: \emph{r}ational
|
1047 |
\emph{n}umber \emph{red}uce and normalize.)
|
1048 |
\end{dosutilcommandname}
|
1049 |
|
1050 |
\begin{dosutilcommandsynopsis}
|
1051 |
\dosutilcommandsynopsisline{rnred}{srn [$<$options$>$]}
|
1052 |
\end{dosutilcommandsynopsis}
|
1053 |
|
1054 |
\begin{dosutilcommanddescription}
|
1055 |
The \emph{rnred} reduces a rational number to its lowest terms
|
1056 |
and normalizes it. This process is the same process
|
1057 |
described in the description of the \emph{arbint rnred} Tcl
|
1058 |
extension, Section \cxtnzeroxrefhyphen{}\ref{cxtn0:srne0:srnr0}.
|
1059 |
\end{dosutilcommanddescription}
|
1060 |
|
1061 |
\begin{dosutilcommandsampleinvocations}
|
1062 |
\begin{scriptsize}
|
1063 |
\begin{verbatim}
|
1064 |
C:\>rnred 422.414
|
1065 |
------------------------------------------------------------------------------
|
1066 |
numerator: 211,207 ( 6 digits)
|
1067 |
------------------------------------------------------------------------------
|
1068 |
denominator: 500 ( 3 digits)
|
1069 |
------------------------------------------------------------------------------
|
1070 |
|
1071 |
C:\>rnred 422.414 -nf
|
1072 |
211207
|
1073 |
500
|
1074 |
\end{verbatim}
|
1075 |
\end{scriptsize}
|
1076 |
\end{dosutilcommandsampleinvocations}
|
1077 |
|
1078 |
\begin{dosutilcommandseealso}
|
1079 |
See also the \emph{arbint rnred} Tcl extension,
|
1080 |
Section \cxtnzeroxrefhyphen{}\ref{cxtn0:srne0:srnr0}.
|
1081 |
\end{dosutilcommandseealso}
|
1082 |
|
1083 |
|
1084 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
1085 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
1086 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
1087 |
\section[Number Theory, CF, And Approximation Utilities]
|
1088 |
{Number Theory, Continued Fraction, And Best Rational Approximation
|
1089 |
Utilities}
|
1090 |
%Section tag: nth0
|
1091 |
\label{cdcm0:snth0}
|
1092 |
|
1093 |
|
1094 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
1095 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
1096 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
1097 |
\subsection{The \emph{cfratnum} Utility}
|
1098 |
%Subsection tag: CFR0
|
1099 |
\label{cdcm0:snth0:scfr0}
|
1100 |
|
1101 |
\index{cfratnum@\emph{cfratnum}}
|
1102 |
\begin{dosutilcommandname}{cfratnum}%
|
1103 |
calculates the continued fraction partial quotients and convergents
|
1104 |
of a non-negative rational number. (Mnemonic: \emph{c}ontinued
|
1105 |
\emph{f}raction partial quotients and convergents of
|
1106 |
a \emph{rat}ional \emph{num}ber.)
|
1107 |
\end{dosutilcommandname}
|
1108 |
|
1109 |
\begin{dosutilcommandsynopsis}
|
1110 |
\dosutilcommandsynopsisline{cfratnum}{urn [$<$options$>$]}
|
1111 |
\end{dosutilcommandsynopsis}
|
1112 |
|
1113 |
\begin{dosutilcommanddescription}
|
1114 |
The \emph{cfratnum} utility calculates the continued fraction
|
1115 |
partial quotients and convergents of a non-negative rational number.
|
1116 |
This information can be useful in a variety of contexts, including
|
1117 |
finding best rational approximations.
|
1118 |
|
1119 |
Additionally, this DOS utility provides a decimal approximation
|
1120 |
of each convergent, using a denominator of
|
1121 |
$10^{108}$ (see the description of the \emph{rndeq} utility, Section
|
1122 |
\ref{cdcm0:srnu0:srnq0}).
|
1123 |
\end{dosutilcommanddescription}
|
1124 |
|
1125 |
\begin{dosutilcommandsampleinvocations}
|
1126 |
\begin{scriptsize}
|
1127 |
\begin{verbatim}
|
1128 |
C:\>cfratnum 3.14
|
1129 |
******************************************************************************
|
1130 |
******************* Continued Fraction Representation *******************
|
1131 |
******************************************************************************
|
1132 |
Input Numerator: 314 ( 3 digits)
|
1133 |
------------------------------------------------------------------------------
|
1134 |
Input Denominator: 100 ( 3 digits)
|
1135 |
------------------------------------------------------------------------------
|
1136 |
dividend(0): 314 ( 3 digits)
|
1137 |
------------------------------------------------------------------------------
|
1138 |
divisor(0): 100 ( 3 digits)
|
1139 |
------------------------------------------------------------------------------
|
1140 |
a(0): 3 ( 1 digit )
|
1141 |
------------------------------------------------------------------------------
|
1142 |
p(0): 3 ( 1 digit )
|
1143 |
------------------------------------------------------------------------------
|
1144 |
q(0): 1 ( 1 digit )
|
1145 |
------------------------------------------------------------------------------
|
1146 |
dap_h(0): 3, ( 109 digits)
|
1147 |
000,000,000,000,000,000,000,000,000,
|
1148 |
000,000,000,000,000,000,000,000,000,
|
1149 |
000,000,000,000,000,000,000,000,000,
|
1150 |
000,000,000,000,000,000,000,000,000
|
1151 |
------------------------------------------------------------------------------
|
1152 |
dap_k(0): 1, ( 109 digits)
|
1153 |
000,000,000,000,000,000,000,000,000,
|
1154 |
000,000,000,000,000,000,000,000,000,
|
1155 |
000,000,000,000,000,000,000,000,000,
|
1156 |
000,000,000,000,000,000,000,000,000
|
1157 |
------------------------------------------------------------------------------
|
1158 |
dividend(1): 100 ( 3 digits)
|
1159 |
------------------------------------------------------------------------------
|
1160 |
divisor(1): 14 ( 2 digits)
|
1161 |
------------------------------------------------------------------------------
|
1162 |
a(1): 7 ( 1 digit )
|
1163 |
------------------------------------------------------------------------------
|
1164 |
p(1): 22 ( 2 digits)
|
1165 |
------------------------------------------------------------------------------
|
1166 |
q(1): 7 ( 1 digit )
|
1167 |
------------------------------------------------------------------------------
|
1168 |
dap_h(1): 3, ( 109 digits)
|
1169 |
142,857,142,857,142,857,142,857,142,
|
1170 |
857,142,857,142,857,142,857,142,857,
|
1171 |
142,857,142,857,142,857,142,857,142,
|
1172 |
857,142,857,142,857,142,857,142,857
|
1173 |
------------------------------------------------------------------------------
|
1174 |
dap_k(1): 1, ( 109 digits)
|
1175 |
000,000,000,000,000,000,000,000,000,
|
1176 |
000,000,000,000,000,000,000,000,000,
|
1177 |
000,000,000,000,000,000,000,000,000,
|
1178 |
000,000,000,000,000,000,000,000,000
|
1179 |
------------------------------------------------------------------------------
|
1180 |
dividend(2): 14 ( 2 digits)
|
1181 |
------------------------------------------------------------------------------
|
1182 |
divisor(2): 2 ( 1 digit )
|
1183 |
------------------------------------------------------------------------------
|
1184 |
a(2): 7 ( 1 digit )
|
1185 |
------------------------------------------------------------------------------
|
1186 |
p(2): 157 ( 3 digits)
|
1187 |
------------------------------------------------------------------------------
|
1188 |
q(2): 50 ( 2 digits)
|
1189 |
------------------------------------------------------------------------------
|
1190 |
dap_h(2): 3, ( 109 digits)
|
1191 |
140,000,000,000,000,000,000,000,000,
|
1192 |
000,000,000,000,000,000,000,000,000,
|
1193 |
000,000,000,000,000,000,000,000,000,
|
1194 |
000,000,000,000,000,000,000,000,000
|
1195 |
------------------------------------------------------------------------------
|
1196 |
dap_k(2): 1, ( 109 digits)
|
1197 |
000,000,000,000,000,000,000,000,000,
|
1198 |
000,000,000,000,000,000,000,000,000,
|
1199 |
000,000,000,000,000,000,000,000,000,
|
1200 |
000,000,000,000,000,000,000,000,000
|
1201 |
------------------------------------------------------------------------------
|
1202 |
\end{verbatim}
|
1203 |
\end{scriptsize}
|
1204 |
|
1205 |
Note in the sample invocation above that each convergent
|
1206 |
also includes a decimal approximation. For example,
|
1207 |
in the invocation above, it can be seen that
|
1208 |
22/7 $\approx$ 3.142857142857 \ldots{}.
|
1209 |
|
1210 |
Note also that at each round of calculation of partial
|
1211 |
quotients and convergents, the remainder is not shown because
|
1212 |
it becomes the divisor of the next round, and so it would be
|
1213 |
redundant to show it. Note also that the final non-zero remainder
|
1214 |
(which is the g.c.d. of the numerator and denominator)
|
1215 |
appears as the final divisor. In the sample
|
1216 |
invocation above, it can be seen that the g.c.d. of
|
1217 |
314 and 100 is the integer labeled as
|
1218 |
\texttt{divisor(2)}, which has the value of 2.
|
1219 |
\end{dosutilcommandsampleinvocations}
|
1220 |
|
1221 |
\begin{dosutilcommandseealso}
|
1222 |
See also the \emph{arbint cfratnum} Tcl extension,
|
1223 |
Section \cxtnzeroxrefhyphen{}\ref{cxtn0:snth0:scfr0}.
|
1224 |
\end{dosutilcommandseealso}
|
1225 |
|
1226 |
|
1227 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
1228 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
1229 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
1230 |
\subsection{The \emph{cfbrapab} Utility}
|
1231 |
%Subsection tag: BRA0
|
1232 |
\label{cdcm0:snth0:sbra0}
|
1233 |
|
1234 |
\index{cfbrapab@\emph{cfbrapab}}
|
1235 |
\begin{dosutilcommandname}{cfbrapab}%
|
1236 |
calculates the best rational approximation to a
|
1237 |
rational
|
1238 |
number in the Farey series of order
|
1239 |
$k_{MAX}$, or in a rectangular region of the integer lattice
|
1240 |
defined by $k \leq k_{MAX}$ and $h \leq h_{MAX}$.
|
1241 |
(Mnemonic: \emph{c}ontinued
|
1242 |
\emph{f}raction \emph{b}est \emph{r}ational \emph{ap}proximation
|
1243 |
in $F_{a, \overline{b}}$.)
|
1244 |
\end{dosutilcommandname}
|
1245 |
|
1246 |
\begin{dosutilcommanddescription}
|
1247 |
Except for display format,
|
1248 |
this utility behaves the same way and
|
1249 |
accepts the same options as the \emph{arbint cfbrapab}
|
1250 |
Tcl extension, described in Section \cxtnzeroxrefhyphen{}\ref{cxtn0:snth0:sbra0}.
|
1251 |
Please see the documentation of this Tcl extension, which also applies
|
1252 |
to this DOS command-line utility.
|
1253 |
\end{dosutilcommanddescription}
|
1254 |
|
1255 |
|
1256 |
\begin{dosutilcommandsampleinvocations}
|
1257 |
\begin{scriptsize}
|
1258 |
\begin{verbatim}
|
1259 |
C:\swprojs\cfbrapab\Release>cfbrapab 1.6093 255 255
|
1260 |
------------------------------------------------------------------------------
|
1261 |
MAJOR MODE: Finding closest rational number(s) under the constraints.
|
1262 |
------------------------------------------------------------------------------
|
1263 |
RI_IN Numerator: 16,093 ( 5 digits)
|
1264 |
------------------------------------------------------------------------------
|
1265 |
RI_IN Denominator: 10,000 ( 5 digits)
|
1266 |
------------------------------------------------------------------------------
|
1267 |
K_MAX: 255 ( 3 digits)
|
1268 |
------------------------------------------------------------------------------
|
1269 |
H_MAX: 255 ( 3 digits)
|
1270 |
------------------------------------------------------------------------------
|
1271 |
approx_num(-1): 243 ( 3 digits)
|
1272 |
------------------------------------------------------------------------------
|
1273 |
approx_den(-1): 151 ( 3 digits)
|
1274 |
------------------------------------------------------------------------------
|
1275 |
dap_num(-1): 1, ( 109 digits)
|
1276 |
609,271,523,178,807,947,019,867,549,
|
1277 |
668,874,172,185,430,463,576,158,940,
|
1278 |
397,350,993,377,483,443,708,609,271,
|
1279 |
523,178,807,947,019,867,549,668,874
|
1280 |
------------------------------------------------------------------------------
|
1281 |
dap_den(-1): 1, ( 109 digits)
|
1282 |
000,000,000,000,000,000,000,000,000,
|
1283 |
000,000,000,000,000,000,000,000,000,
|
1284 |
000,000,000,000,000,000,000,000,000,
|
1285 |
000,000,000,000,000,000,000,000,000
|
1286 |
------------------------------------------------------------------------------
|
1287 |
error_num(-1): - 43 ( 2 digits)
|
1288 |
------------------------------------------------------------------------------
|
1289 |
error_den(-1): 1,510,000 ( 7 digits)
|
1290 |
------------------------------------------------------------------------------
|
1291 |
\end{verbatim}
|
1292 |
\end{scriptsize}
|
1293 |
|
1294 |
Note in the sample invocation above that the
|
1295 |
decimal equivalent of the approximation is also provided.
|
1296 |
Note also that the different parameters of this utility produce
|
1297 |
different output formats which are not documented here, for
|
1298 |
brevity. For example, using the \texttt{-pred} or \texttt{-succ}
|
1299 |
options does not produce decimal approximation information, because
|
1300 |
these options are not normally used for approximation---such
|
1301 |
behaviors are inconsequential and not documented.
|
1302 |
\end{dosutilcommandsampleinvocations}
|
1303 |
|
1304 |
|
1305 |
\begin{dosutilcommandseealso}
|
1306 |
This extension uses the continued fraction
|
1307 |
algorithms presented in Chapter \ccfrzeroxrefhyphen{}\ref{ccfr0}.
|
1308 |
See also the \emph{arbint cfbrapab} Tcl extension,
|
1309 |
Section \cxtnzeroxrefhyphen{}\ref{cxtn0:snth0:sbra0}.
|
1310 |
\end{dosutilcommandseealso}
|
1311 |
|
1312 |
|
1313 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
1314 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
1315 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
1316 |
\section{Authors And Acknowledgements}
|
1317 |
%Section tag: ACK0
|
1318 |
|
1319 |
|
1320 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
1321 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
1322 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
1323 |
\section{Exercises}
|
1324 |
%Section tag: EXE0
|
1325 |
|
1326 |
|
1327 |
|
1328 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
1329 |
|
1330 |
\noindent\begin{figure}[!b]
|
1331 |
\noindent\rule[-0.25in]{\textwidth}{1pt}
|
1332 |
\begin{tiny}
|
1333 |
\begin{verbatim}
|
1334 |
$RCSfile: c_dcm0.tex,v $
|
1335 |
$Source: /home/dashley/cvsrep/e3ft_gpl01/e3ft_gpl01/dtaipubs/esrgubka/c_dcm0/c_dcm0.tex,v $
|
1336 |
$Revision: 1.13 $
|
1337 |
$Author: dtashley $
|
1338 |
$Date: 2001/08/18 18:37:56 $
|
1339 |
\end{verbatim}
|
1340 |
\end{tiny}
|
1341 |
\noindent\rule[0.25in]{\textwidth}{1pt}
|
1342 |
\end{figure}
|
1343 |
|
1344 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
1345 |
% $Log: c_dcm0.tex,v $
|
1346 |
% Revision 1.13 2001/08/18 18:37:56 dtashley
|
1347 |
% Preparation for v1.05 release.
|
1348 |
%
|
1349 |
% Revision 1.12 2001/08/16 19:53:27 dtashley
|
1350 |
% Beginning to prepare for v1.05 release.
|
1351 |
%
|
1352 |
% Revision 1.11 2001/08/12 10:15:33 dtashley
|
1353 |
% Safety check-in. Substantial progress.
|
1354 |
%
|
1355 |
% Revision 1.10 2001/08/10 00:56:07 dtashley
|
1356 |
% Completion of basic rational number arithmetic utilities and extensions.
|
1357 |
%
|
1358 |
% Revision 1.9 2001/08/08 02:25:03 dtashley
|
1359 |
% Completion of RNRED utility and ARBINT RNRED Tcl extension.
|
1360 |
%
|
1361 |
% Revision 1.8 2001/08/07 10:46:44 dtashley
|
1362 |
% Completion of CFRATNUM Tcl extension and DOS command-line utility.
|
1363 |
%
|
1364 |
% Revision 1.7 2001/08/01 03:37:39 dtashley
|
1365 |
% Finished most primitive integer operations, both as Tcl extensions and
|
1366 |
% as DOS command-line utilities, such as addition, subtraction,
|
1367 |
% multiplication, division, and modulo.
|
1368 |
%
|
1369 |
% Revision 1.6 2001/07/30 02:54:17 dtashley
|
1370 |
% INTFAC extension and command-line utility finished.
|
1371 |
%
|
1372 |
% Revision 1.5 2001/07/23 21:40:43 dtashley
|
1373 |
% Hopefully final changes to the section about convergents as best
|
1374 |
% approximations. Tool documentation changes.
|
1375 |
%
|
1376 |
% Revision 1.4 2001/07/23 06:50:44 dtashley
|
1377 |
% Completion of INTFAC command and documentation.
|
1378 |
%
|
1379 |
% Revision 1.3 2001/07/23 03:30:20 dtashley
|
1380 |
% Edits.
|
1381 |
%
|
1382 |
% Revision 1.2 2001/07/13 06:57:50 dtashley
|
1383 |
% Safety check-in.
|
1384 |
%
|
1385 |
% Revision 1.1 2001/07/11 20:10:30 dtashley
|
1386 |
% Chapter on DOS console-mode utilities added.
|
1387 |
%
|
1388 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
1389 |
%End of file C_DCM0.TEX
|