From 80eb7bfc5d988aac41d54fb476da10747288bf1c Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Fri, 17 May 2013 22:26:13 +0000 Subject: xint (17may13) git-svn-id: svn://tug.org/texlive/trunk@30528 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/source/generic/xint/xint.dtx | 7975 ++++++++++++------------ Master/texmf-dist/source/generic/xint/xint.ins | 2 +- 2 files changed, 3895 insertions(+), 4082 deletions(-) (limited to 'Master/texmf-dist/source') diff --git a/Master/texmf-dist/source/generic/xint/xint.dtx b/Master/texmf-dist/source/generic/xint/xint.dtx index e5738eb7a07..34f86ef47b8 100644 --- a/Master/texmf-dist/source/generic/xint/xint.dtx +++ b/Master/texmf-dist/source/generic/xint/xint.dtx @@ -1,23 +1,17 @@ % -*- coding: iso-latin-1; -*- -% This file: xint.dtx (1.06a, 2013/05/09) -%% -%%---------------------------------------------------------------- -%% The xint bundle (version 1.06a of May 9, 2013) -%%% xint: Expandable operations on long numbers -%%% xintgcd: Euclidean algorithm with xint package -%%% xintfrac: Expandable operations on fractions -%%% xintseries: Expandable partial sums with xint package -%%% xintcfrac: Expandable continued fractions with xint package -%% Copyright (C) 2013 by Jean-Francois Burnol -%%---------------------------------------------------------------- -%% -% Style files in the bundle: +% This file: xint.dtx (1.06b, 2013/05/14) +% +% Style files which will self-extract from xint.dtx: % (base) xint.sty Expandable operations on long numbers % xintgcd.sty Euclidean algorithm with xint package % xintfrac.sty Expandable operations on fractions % xintseries.sty Expandable partial sums with xint package % xintcfrac.sty Expandable continued fractions with xint package +% May be used with Plain TeX (\input) or as LaTeX packages (\usepackage) % +% License +% ======= +% % This work consists of the source file xint.dtx and of its derived files % xint.sty, xintgcd.sty, xintfrac.sty, xintseries.sty, xintcfrac.sty, xint.ins % and the documentation xint.pdf (or xint.dvi). @@ -32,8 +26,8 @@ % and version 1.3 or later is part of all distributions of % LaTeX version 2005/12/01 or later. % -% The author of this work is Jean-Francois Burnol . -% This work has the LPPL maintenance status `author-maintained'. +% The author of this work is Jean-Francois Burnol . +% This work has the LPPL maintenance status `author-maintained'. % % Installation and Usage: % ======================= @@ -59,8 +53,8 @@ % xint.dtx --> TDS:source/generic/xint/ % xint.pdf --> TDS:doc/generic/xint/ % -% It may be necessary to then refresh the TeX installation filename -% database. +% It may be necessary to then refresh the TeX installation filename +% database. % % Usage with LaTeX: \usepackage{xint} % \usepackage{xintgcd} % (loads xint) @@ -74,10 +68,21 @@ % \input xintseries.sty\relax % (loads xintfrac) % \input xintcfrac.sty\relax % (loads xintfrac) % +%% +%%---------------------------------------------------------------- +%% The xint bundle (version 1.06b of May 14, 2013) +%%% xint: Expandable operations on long numbers +%%% xintgcd: Euclidean algorithm with xint package +%%% xintfrac: Expandable operations on fractions +%%% xintseries: Expandable partial sums with xint package +%%% xintcfrac: Expandable continued fractions with xint package +%% Copyright (C) 2013 by Jean-Francois Burnol +%%---------------------------------------------------------------- +%% %<*none> -\def\lasttimestamp{Time-stamp: <09-05-2013 08:51:48 CEST BURNOL>} -\def\pkgversion{1.06a} -\def\pkgdate{2013/05/09} +\def\lasttimestamp{Time-stamp: <14-05-2013 22:00:09 CEST jfb>} +\def\pkgversion{1.06b} +\def\pkgdate{2013/05/14} \def\striptimestamp #1 <#2 #3 #4 #5>{#2 at #3 #4} \def\getdocdate #1 <#2-#3-#4 #5>{#4/#3/#2} \edef\docdate{\expandafter\getdocdate\lasttimestamp} @@ -123,7 +128,6 @@ \ProvidesFile{xint.dtx}[bundle source and documentation (\dtxtimestamp)] \documentclass[a4paper,11pt,abstract]{scrdoc} -%\OnlyDescription \pagestyle{headings} \usepackage[latin1]{inputenc} @@ -162,7 +166,7 @@ % attention de positionner \toctransition *après* le début de la section % "implémentation de xint" -\def\stripatdot #1.{} +\def\gobbletodot #1.{} \let\savedsectionline\l@section \etocsetstyle{section}{}{} @@ -174,7 +178,7 @@ \setlength{\columnsep}{1.5em} \begin{multicols}{2}}{} {\noindent\makebox[1.5em][l] - {\ttfamily\expandafter\stripatdot\etocthenumber}% + {\ttfamily\expandafter\gobbletodot\etocthenumber}% \etocname\leaders\etoctoclineleaders\hfill {\normalfont\etocpage}\endgraf} {\end{multicols}\endgroup}% @@ -246,6 +250,9 @@ \usepackage[english]{babel} \usepackage[autolanguage,np]{numprint} +\AtBeginDocument{ +\npthousandsep{,\hskip .16667em plus .01em minus .01em}} + \usepackage[pdfencoding=pdfdoc,bookmarks=true]{hyperref} @@ -281,17 +288,11 @@ pdfpagemode=UseOutlines} {\hbox to \linewidth \bgroup \hss \bgroup \aftergroup\centeredline@ } \makeatother -%---- ALLOWING COMMENTS INSIDE VERBATIM BLOCKS +%---- MODIFIED \verb, and verbatim like `environments' FITS BETTER OUR USE OF IT \makeatletter -\let\original@check@percent\check@percent -\let\check@percent\relax -\makeatother - -%---- A MODIFIED \verb, FITS BETTER OUR USE OF IT -\makeatletter -% le \verb de doc.sty est très chiant car il a retiré -% \verbatim@font pour mettre un \ttfamily hard-coded -% à la place. +% le \verb de doc.sty est très chiant car il a retiré \verbatim@font pour mettre +% un \ttfamily hard-coded à la place. [en fin de compte j'utilise dorénavant le +% vocable \MicroFont plutôt que \verbatim@font] % % Par ailleurs j'en ai marre des erreurs dues au fait que mes % paragraphes reformatés dans emacs passent à la ligne au milieu @@ -303,50 +304,139 @@ pdfpagemode=UseOutlines} % Et il n'y avait donc pas de \obeylines puisque la fin de ligne % devenait un message d'erreur dans \verb@eol@error % -% De plus je retire le \do@noligs qui me gêne plutôt qu'autre chose, -% surtout maintenant que les espaces ne sont pas des control spaces +% à propos \do@noligs: +% macro:#1->\catcode `#1\active \begingroup \lccode `\~=`#1\relax \lowercase +% {\endgroup \def ~{\leavevmode \kern \z@ \char `#1}} +% ne manque-t-il pas un espace après le \char `#1? En effet! ça me pose des +% problèmes lorsque l'espace a catcode 10!! % -% attention au signe - par contre, on ne veut *pas* de ligatures avec lui +% attention au signe - par contre, on ne veut vraiment *pas* de ligatures avec +% lui, donc pour lui et seulement pour lui je fais le boulot de \do@noligs. OK, +% je pense que la raison pour laquelle je ne le faisais que pour - est celle du +% paragraphe précédent que je viens d'ajouter, donc finalement je fais le +% \do@noligs entier +% \catcode`\-\active \def-{\kern \z@ \char`\- } % -\def\noligminus {\kern \z@ \char`\-} -\begingroup\catcode`\-\active -\gdef\verb {\relax \ifmmode \hbox \else \leavevmode \null \fi - \bgroup \verbatim@font - \let \do \@makeother \dospecials \catcode`\-\active - \let-\noligminus \catcode32 10 \@ifstar {\@sverb }{\@sverb }} -\endgroup -% ça c'est pour mes petits morceaux de code: -\def\verbatim@font {\ttfamily } -\def\MacroFont{\ttfamily\baselineskip12pt\relax} -% Mais j'ai besoin d'un verbatim différent pour les nombres car je -% ne veux pas passer en mode mathématique et je ne veux pas les 0 -% du txtt pour cela. Comme je n'utilise pas de tabulation, je vais -% prendre & +% 12 et 13 mai 2013. Je dois m'occuper des verbatim, et comme je n'ai (pas ou +% plus) envie de perdre du temps à aller re-regarder verbatim et en particulier +% son emploi de trivlist, avec les conséquences *lamentables* sur les +% espacements verticaux je décide de tester une variante de \verb spécialement +% pour remplacer mes blocs verbatim, particulièrement dans le code commenté. Et +% voilà \lverb! bye bye \begin{verbatim} +% +% bref, pour \lverb: d'abord il est \long. Ensuite j'utilise $ si j'ai besoin de +% control sequences. En fait j'ai juste eu besoin pour \%. Car le % lui je le +% mets (maintiens, donc la partie implémentation) à ignore. Ah, et finalement +% j'utilise aussi $\. Les espaces sont normaux. +% Enfin, je fais de & un caractère de commentaires. Tout cela c'est pour +% la partie Implémentation. +% +% Pour les verbatim dans la partie user manual, je fais une variante \dverb, qui +% elle respecte les lignes, en utilisant \obeylines. +% +\def\MicroFont {\ttfamily } +\def\MacroFont {\ttfamily\baselineskip12pt\relax} +% modif de \do@noligs: \char`#1} --> \char`#1 } +\def\do@noligs #1% +{% + \catcode `#1\active + \begingroup \lccode `\~=`#1\relax + \lowercase {\endgroup \def ~{\leavevmode \kern \z@ \char `#1 }}% +} +\def\verb +{% + \relax \ifmmode\hbox\else\leavevmode\null\fi + \bgroup \MicroFont + \let\do\do@noligs \verbatim@nolig@list + \let\do\@makeother \dospecials + \catcode32 10 \@jfverb +} +\def\@jfverb #1{\catcode`#1\active\lccode`\~`#1\lowercase{\let~\egroup}} +% ATTENTION! +% \def~{\\\relax} cause des problèmes infinis. Donc je vais simplement utiliser +% dans les parties commentées du code $\ puisque $ a catcode 0. +% attention à [, donc $\$relax en un endroit. +\long\def\lverb % pour utilisation dans la partie implémentation +{% + \relax\par\smallskip\noindent\null + \begingroup + \let\par\@@par\hbadness 100 \hfuzz 100pt\relax + \hsize .85\hsize + \MacroFont + \bgroup + \aftergroup\@@par \aftergroup\endgroup \aftergroup\medskip + \let\do\do@noligs \verbatim@nolig@list + \let\do\@makeother \dospecials + \catcode32 10 \catcode`\% 9 \catcode`\& 14 \catcode`\$ 0 + \@jfverb +} +% et voilà. Comme quoi, on peut aussi faire sans \trivlist si on veut. +\long\def\dverb % pour utilisation dans le manuel de l'utilisateur +% contrairement à \lverb, ici, on fait \obeylines +% à utiliser sous la forme: (ou avec un autre à la place de |)(on aurait pu +% imaginer aussi prendre ^^A ou dans le genre +% \dverb|& +% blahblah +% | +% pour qu'il y ait bien un dernier end of line, qui est compensé a posteriori +{% + \relax\par\smallskip + \bgroup + \parindent0pt + % \parskip0pt + \def\par{\@@par\leavevmode\null}% + \let\do\do@noligs \verbatim@nolig@list + \let\do\@makeother \dospecials + \catcode`\& 14 + \aftergroup\vskip\aftergroup-\aftergroup\baselineskip + \aftergroup\smallskip + \aftergroup\noindent\aftergroup\ignorespaces + \MacroFont \obeylines \@vobeyspaces + \@jfverb +} +% Mais j'ai besoin d'un mode verbatim différent pour les nombres car je +% ne veux pas passer en mode mathématique (que j'aime de moins en moins) et je +% ne veux pas les 0 du txtt pour cela. Comme je n'utilise pas de tabulation, je +% vais prendre & \catcode`\& 13 -\def&{\begingroup\let\do\@makeother\dospecials\catcode`\& 13 \@jfverb } -\def\@jfverb #1&{#1\endgroup } +\def&{\begingroup + \let\do\@makeother\dospecials + \catcode`\& 13 + \@jfendshrtverb } +\def\@jfendshrtverb #1&{#1\endgroup } \makeatother % Note: il n'y a plus de \hyphenchar-1 dans le \DeclareFontFamily de t1txtt % ATTENTION CEPENDANT À CE QUI SE PASSE EN CAS DE CHANGEMENT DE TAILLE -\DeclareRobustCommand\csa[1]{{\ttfamily\hyphenchar\font45 \char`\\#1}} -\DeclareRobustCommand\csb[1]{\hyperref[#1]{\color{blue}\ttfamily - \hyphenchar\font45 \char`\\#1}} -\DeclareRobustCommand\csbnolk[1]{{\color{blue}\ttfamily - \hyphenchar\font45 \char`\\#1}} +% 11 mai 2013: j'utilise dorénavant _ là où avant c'était @ +\catcode`\_=11 + +\def\csa_aux #1{\ttfamily\hyphenchar\font45 \char`\\#1\endgroup } + +\def\csb_aux #1{\hyperref[#1]{\color{blue}\ttfamily + \hyphenchar\font45 \char`\\#1}\endgroup } + +\DeclareRobustCommand\csa {\begingroup\catcode`\_=11 \csa_aux } +\DeclareRobustCommand\csb {\begingroup\catcode`\_=11 \csb_aux } +\DeclareRobustCommand\csbnolk {\begingroup\catcode`\_=11 \color{blue}\csa_aux } \newcommand\csh[1]{\texorpdfstring{\csa{#1}}{\textbackslash #1}} \newcommand\csbh[1]{\texorpdfstring{\csbnolk{#1}}{\textbackslash #1}} -\makeatletter -\@for\x:=xint,xintgcd,xintfrac,xintseries,xintcfrac\do -{\expandafter\edef\csname\x name\endcsname - {\noexpand\texorpdfstring{{\noexpand\color{joli}\noexpand\ttfamily - \hyphenchar\font45 - \noexpand\bfseries \x}} - {\x}\noexpand\xspace}} -\makeatother +\catcode`\_=8 + +\def\xintpackagenamedef #1% +{% + \expandafter\def\csname #1name\endcsname + {\texorpdfstring + {{\color{joli}\ttfamily\hyphenchar\font45 \bfseries #1}} + {#1}% + \xspace }% +}% +\xintApplyUnbraced\xintpackagenamedef + {{xint}{xintgcd}{xintfrac}{xintseries}{xintcfrac}} + \frenchspacing \renewcommand\familydefault\sfdefault @@ -369,6 +459,7 @@ pdfpagemode=UseOutlines} \thispagestyle{empty} \rmfamily + \pdfbookmark[1]{Title page}{TOP} {\normalfont\Large\parindent0pt \parfillskip 0pt\relax @@ -442,18 +533,46 @@ Here are some examples: {\xintiSub {\xintiPow {2}{200}}{1}}\to\A\B\U\V\D \printnumber\U$\times$(&7^200-3^200&)+\printnumber{\xintiOpp\V}$\times$(&2^200-1&)=\printnumber\D -{\color{magenta}The Euclide algorithm applied to - \np{179876541573} - and \np{66172838904}:}\\ +{\color{magenta}The Euclide algorithm applied to \np{179876541573} and + \np{66172838904}:}\footnote{this example is computed tremendously faster than + the + other ones, but we had to limit the space taken by the output.}\\ {\color{blue}|\xintTypesetEuclideAlgorithm {179876541573}{66172838904}|} -\xintTypesetEuclideAlgorithm {179876541573}{66172838904} - - +\xintTypesetEuclideAlgorithm {179876541573}{66172838904} \smallskip + +{\color{magenta}$\sum_{n=1}^{500} (4n^2 - 9)^{-2}$ with each term rounded to + twelve digits, and the sum to nine digits:} {\color{blue}% + |\def\coeff #1%|\\ + | {\xintiRound {12}{1/\xintiSqr{\the\numexpr 4*#1*#1-9\relax }[0]}}|\\ + |\xintRound {9}{\xintiSeries {1}{500}{\coeff}[-12]}|:} \def\coeff #1% +{\xintiRound {12}{1/\xintiSqr{\the\numexpr 4*#1*#1-9\relax }[0]}} \xintRound +{9}{\xintiSeries {1}{500}{\coeff}[-12]}\endgraf The complete series, extended to +infinity, has value +$\frac{\pi^2}{144}-\frac1{162}={}$\np{0.06236607994583659534684445}\dots\,% +\footnote{\label{fn:np}This number is typeset using the + \href{http://www.ctan.org/pkg/numprint}{\color{niceone}numprint} package, with + \texttt{\detokenize{\npthousandsep{,\hskip .16667em plus .01em minus .01em}}}. But the breaking accross + lines works only in text mode. The number itself was (of course...) computed + initially with \xintname, with 30 digits of $\pi$ as input. + See + \hyperref[ssec:Machin]{\color{niceone}{how \xintname may compute $\pi$ + from scratch}}.} I also used (this is a lengthier computation +than the one above) \xintseriesname to evaluate the sum with \np{100000} terms, +obtaining 16 +correct decimal digits for the complete sum. The +coefficient macro must be redefined to avoid a |\numexpr| overflow, as +|\numexpr| inputs must not exceed &2^31-1&; my choice +was: +{\color{blue}\dverb|& +\def\coeff #1% +{\xintiRound {22}{1/\xintiSqr{\xintiMul{\the\numexpr 2*#1-3\relax} + {\the\numexpr 2*#1+3\relax}}[0]}} +|} The first example uses only the base module \xintname, the next two require -loading also the \xintfracname package, which deals with fractions. The last two -require the \xintgcdname package. The bundle also comprises the \xintseriesname -package, for partial sums of series with fractional coefficients, and -\xintcfracname for continued fractions computations. +loading also the \xintfracname package, which deals with fractions. Then two +examples with the \xintgcdname package, and finally one with the +\xintseriesname package, for partial sums of series with fractional +coefficients. There is also \xintcfracname for continued fractions computations. To see more of \xintname in action, jump to the {\color{niceone}\autoref{sec:series}} describing the commands of the @@ -570,12 +689,12 @@ The present package is the result of this initial questioning. Except for some specific macros dealing with assignments or typesetting, the bundle macros all work in expansion-only context. For example, with the following code snippet within |myfile.tex|: -\begin{verbatim} +\dverb|& \newwrite\outfile \immediate\openout\outfile \jobname-out\relax \immediate\write\outfile {\xintQuo{\xintPow{2}{1000}}{\xintFac{100}}} % \immediate\closeout\outfile -\end{verbatim} +| the tex run creates a file |myfile-out.tex| containing the decimal representation of the integer quotient &2^{1000}/100!&. Such macros can also be used inside a |\csname...\endcsname|, and @@ -594,16 +713,19 @@ print them here: \printnumber\x. For the sake of typesetting this documentation and not have big numbers extend into the margin and go beyond the page physical limits, I use these commands (not provided by the package): -\begin{verbatim} +\dverb|& \def\allowsplits #1{\ifx #1\relax \else #1\hskip 0pt plus 1pt \relax \expandafter\allowsplits\fi}% \def\printnumber #1{\expandafter\expandafter\expandafter \allowsplits #1\relax }% % Expands twice before printing. -\end{verbatim} +| The |\printnumber| macro is not part of the package and would need additional -thinking for more general use. It may be used as |\printnumber +thinking for more general use.\footnote{as explained in + \hyperref[fn:np]{\color{niceone}a previous footnote}, + the |numprint| package may also be used, in text mode only (as the thousand + separator seemingly ends up typeset in a |\string\hbox| when in math mode).} It may be used as |\printnumber {\xintQuo{\xintPow {2}{1000}}{\xintFac{100}}}|, or as |\printnumber\mynumber| if the macro |\mynumber| was previously defined via an |\edef|, as for example:\centeredline{ |\edef\mynumber {\|\texttt{xintQuo}|{\xintPow @@ -1007,10 +1129,10 @@ digits. Using |\ifcase\xintSgn\A| without the braces is very dangerous, because the blanks (including the end of line) following |\A| will be skipped and not serve to stop the number which |\ifcase| is looking for. With |\def\A{1}|: -\begin{verbatim} +\dverb|& \ifcase \xintSgn\A 0\or OK\else ERROR\fi ---> gives ERROR \ifcase \xintSgn{\A} 0\or OK\else ERROR\fi ---> gives OK -\end{verbatim} +| % \def\A{1} % \ifcase \xintSgn\A 0\or OK\else ERROR\fi\ % \ifcase \xintSgn{\A} 0\or OK\else ERROR\fi @@ -1082,7 +1204,7 @@ expandability. For example why not allow oneself the two definitions }}}\vskip\dp\strutbox } so it is completely\strut{} expanded and may be a count register, not necessarily prefixed by |\the| or |\number|. Consider the following code snippet: -\begin{verbatim} +\dverb+& \newcount\cnta \newcount\cntb \begingroup @@ -1100,7 +1222,7 @@ their squares is \the\cntb. These digits are, from the least to the most significant: \cnta = \Out{0} \loop \Out{\cnta}\ifnum \cnta > 1 \advance\cnta -1 , \repeat. \endgroup -\end{verbatim} ++ \edef\z{\xintiPow {2}{100}} @@ -1178,12 +1300,13 @@ things', which were treated un-expandably in the previous section with \csb{xintReverseOrder}, \csb{xintLen} and \csb{xintLength} since the first release, \csb{xintApply} and \csb{xintListWithSep} since |1.04|, \csb{xintRevWithBraces}, -\csb{xintCSVtoList}, \csb{xintNthElt} now with |1.06|. +\csb{xintCSVtoList}, \csb{xintNthElt} with |1.06|, and +\csb{xintApplyUnbraced}, new with |1.06b|. \edef\z{\xintiPow {2}{100}} As an example the following code uses only expandable operations: -\begin{verbatim} +\dverb+& |2^{100}| (=\xintiPow {2}{100}) has \xintLen{\xintiPow {2}{100}}} digits and the sum of their squares is \xintiSum{\xintApply {\xintiSqr}{\xintiPow {2}{100}}}. @@ -1191,7 +1314,7 @@ These digits are, from the least to the most significant: \xintListWithSep {, }{\xintRev{\xintiPow {2}{100}}}. The thirteenth most significant digit is \xintNthElt{13}{\xintiPow {2}{100}}. The seventh least significant one is \xintNthElt{7}{\xintRev{\xintiPow {2}{100}}}. -\end{verbatim} ++ |2^{100}| (=\z) has \xintLen{\z} digits and the sum of their squares is \xintiSum{\xintApply\xintiSqr\z}. These digits are, from the least to the most significant: \xintListWithSep {, }{\xintRev\z}. The @@ -1204,9 +1327,9 @@ least significant one is \xintNthElt{7}{\xintRev\z}. % significant digit is \xintNthElt{13}{\xintiPow {2}{100}}. The seventh least % significant one is \xintNthElt{7}{\xintRev{\xintiPow {2}{100}}}. -Of course, with an earlier -|\edef\z{\xintiPow {2}{100}}|, using |\z| in place of - |\xintiPow {2}{100}| everywhere would spare the CPU some repetitions. +Of course, it would be nicer to do +|\edef\z{\xintiPow {2}{100}}|, and then use |\z| in place of + |\xintiPow {2}{100}| everywhere as this would spare the CPU some repetitions. \section{Exceptions (error messages)} @@ -1219,7 +1342,7 @@ end of the expansion so as to not disturb further processing of the token stream, after completion of the operation. Generally the problematic operation will output a zero. Possible such error message control sequences: -\begin{verbatim} +\dverb|& \xintError:ArrayIndexIsNegative \xintError:ArrayIndexBeyondLimit \xintError:FactorialOfNegativeNumber @@ -1232,7 +1355,7 @@ sequences: \xintError:TooBigDecimalShift \xintError:TooBigDecimalSplit \xintError:NoBezoutForZeros -\end{verbatim} +| \section{Common input errors when using the package macros} @@ -1259,17 +1382,22 @@ others are more annoying as they may pass through unsignaled. \section{Package namespace} Inner macros of \xintname, \xintgcdname, \xintfracname, \xintseriesname, and -\xintcfracname{} all begin either with |\XINT@| or with |\xint@|. The package -public commands all start with |\xint|. The major forms have their initials +\xintcfracname{} all begin either with |\XINT_| or with +|\xint_|.\footnote{starting with release |1.06b| the style files use for macro + names a more modern underscore |\_| rather than the |@| sign. Probability of a + name clash with \LaTeX2e packages is now even closer to nil, and with \LaTeX3 + packages it is also close to nil as our control sequences are all lacking the + argument specifier part of \LaTeX3 function names.} The package public +commands all start with |\xint|. The major forms have their initials capitalized, and lowercase forms, prefixed with |\romannumeral0|, allow definitions of further macros expanding in only two steps to their final outputs. Some other control sequences are used only as delimiters, and left -undefined, they may have been defined elsewhere, their meaning doesn't matter +undefined, they may have been defined elsewhere, their meaning doesn't matter and is not touched. \section{Loading and usage} -\begin{verbatim} +\dverb|& Usage with LaTeX: \usepackage{xint} \usepackage{xintgcd} % (loads xint) \usepackage{xintfrac} % (loads xint) @@ -1281,7 +1409,7 @@ Usage with TeX: \input xint.sty\relax \input xintfrac.sty\relax % (loads xint) \input xintseries.sty\relax % (loads xintfrac) \input xintcfrac.sty\relax % (loads xintfrac) -\end{verbatim} +| We have added, directly copied from packages by \textsc{Heiko Oberdiek}, a mecanism of re-load and \eTeX{} detection, @@ -1324,7 +1452,7 @@ compatible. \csa{xintTypesetBezoutAlgorithm} also uses the \section{Installation} -\begin{verbatim} +\dverb+& Run tex or latex on xint.dtx. This will extract the style files xint.sty, xintgcd.sty, xintfrac.sty, @@ -1348,7 +1476,7 @@ To get xint.pdf run pdflatex thrice on xint.dtx It may be necessary to then refresh the TeX installation filename database. -\end{verbatim} ++ \section{Commands of the \xintname package} @@ -1415,8 +1543,8 @@ expands its argument (in the manner described, triggered by a \csa{xintReverseOrder}\marg{list} does not do any expansion of its argument and just reverses the order of the -tokens in the `list'.\footnote{the argument is not a token list variable, just a - `list' of tokens.} Brace pairs encountered are removed once and the enclosed +tokens in the \meta{list}.\footnote{the argument is not a token list variable, just a + \meta{list} of tokens.} Brace pairs encountered are removed once and the enclosed material does not get reverted. Spaces are gobbled. \centeredline{|\xintReverseOrder{\xintDigitsOf\xintiPow {2}{100}\to\Stuff}|} \centeredline{gives: \ttfamily{\string\Stuff\string\to1002\string\xintiPow\string\xintDigitsOf}} @@ -1434,7 +1562,8 @@ material does not get reverted. Spaces are gobbled. (which thus may be macro), then it reverses the order of the tokens, or braced material, it encounters, adding a pair of braces to each (thus, maintaining brace pairs already existing). Spaces (in-between external brace pairs) are -gobbled. This macro is mainly thought out for use on a `list' of such braced +gobbled. This macro is mainly thought out for use on a \meta{list} of such +braced material; with such a list as argument the expansion will only hit against the first opening brace, hence do nothing, and the braced stuff may thus be macros one does not want to expand. \centeredline{|\edef\x{\xintRevWithBraces{12345}}|} @@ -1444,7 +1573,8 @@ one does not want to expand. \centeredline{|\edef\x{\xintRevWithBraces{12345}}|} defined with |\edef|'s because the braced material did not contain macros. Alternatively: \centeredline{|\expandafter\def\expandafter\w\expandafter|}% \centeredline{|{\romannumeral0\xintrevwithbraces{{\A}{\B}{\C}{\D}{\E}}}|} -\centeredline{|\meaning\w:|\ttfamily{\meaning\w}} The private macro |\XINT@RWB| +\centeredline{|\meaning\w:|\ttfamily{\meaning\w}} The macro +\csa{xintReverseWithBracesNoExpand} does the same job without the initial expansion of its argument. \subsection{\csbh{xintLen}}\label{xintiLen} @@ -1475,15 +1605,20 @@ count as one. \centeredline{|\xintLength {\xintiPow \def\y {a,b,c,d,e} \edef\z{\xintCSVtoList \y} -\makeatletter \csa{xintCSVtoList}|{a,b,c...,z}| returns |{a}{b}{c}...{z}|. The -argument may be a macro. It is first expanded: this means that if the argument -is |a,b,..|, then |a|, if a macro, will be expanded which may or may not be a -good thing. Chains of contiguous spaces are collapsed by the \TeX{} scanning -into single spaces. \centeredline{|\xintCSVtoList {1,2,a , b ,c d,x,y - }->|\texttt{\expandafter\strip@prefix\meaning\X}} -\centeredline{|\def\y{a,b,c,d,e}\xintCSVtoList\y->|\texttt{\expandafter\strip@prefix\meaning\z}} -The private macro |\XINT@CSVtoL| does the same job without the initial -expansion. \makeatother +\csa{xintCSVtoList}|{a,b,c...,z}| returns |{a}{b}{c}...{z}|. The argument may be +a macro. It is first expanded: this means that if the argument is |a,b,..|, then +|a|, if a macro, will be expanded which may or may not be a good thing (starting +the replacement text of the macro with |\space| stops the expansion at the first +level and gobbles +the space; prefixing a macro with |\space| stops preemptively the expansion and +gobbles the space). Chains of +contiguous spaces are collapsed by the \TeX{} scanning into single spaces. +\centeredline{|\xintCSVtoList {1,2,a , b ,c d,x,y + }->|\makeatletter\texttt{\expandafter\strip@prefix\meaning\X}\makeatother} +\centeredline{|\def\y{a,b,c,d,e}\xintCSVtoList\y->|\makeatletter\texttt{\expandafter\strip@prefix\meaning\z}\makeatother} + +% The macro \csa{xintCSVtoListNoExpand} does the same job without the initial +% expansion. \subsection{\csbh{xintNthElt}}\label{xintNthElt} @@ -1500,20 +1635,20 @@ thirty-seventh digit of &100!&. \centeredline{|\xintNthElt {10}{\xintFtoCv {566827/208524}}=|\texttt{\xintNthElt {10}{\xintFtoCv {566827/208524}}}} is the tenth convergent of &566827/208524& (uses \xintcfracname package). -If |x=0| -or |x<0|, the macro returns the length of the expanded list: this is not -equivalent to \csb{xintLength} due to the initial full expansion of the first -token, and differs from \csb{xintLen} which is to be used on numbers or +If |x=0| or |x<0|, the macro returns the length of the expanded list: this is +not equivalent to \csb{xintLength} due to the initial full expansion of the +first token, and differs from \csb{xintLen} which is to be used on numbers or fractions only. The situation with |x| larger than the length of the list is kept silent, the macro then returns nothing; this will perhaps be modified in future versions. \centeredline{|\xintNthElt {7}{\xintCSVtoList {1,2,3,4,5,6,7,8,9}}=|% \texttt{\xintNthElt {7}{\xintCSVtoList {1,2,3,4,5,6,7,8,9}}}}% -\centeredline{|\xintNthElt {0}{\xintCSVtoList - {1,2,3,4,5,6,7,8,9}}=|% - \texttt{\xintNthElt {0}{\xintCSVtoList {1,2,3,4,5,6,7,8,9}}}} The private -macro |\XINT@NthElt| does the same job without first expanding its second -argument. +\centeredline{|\xintNthElt {0}{\xintCSVtoList {1,2,3,4,5,6,7,8,9}}=|% + \texttt{\xintNthElt {0}{\xintCSVtoList {1,2,3,4,5,6,7,8,9}}}} + +% The macro +% \csa{xintNthEltNoExpand} does the same job without first expanding its +% second argument. \subsection{\csbh{xintListWithSep}}\label{xintListWithSep} @@ -1521,34 +1656,71 @@ argument. \def\macro #1{\the\numexpr 9-#1\relax} -\csa{xintListWithSep}|{sep}{list}| just inserts the given separator |sep| -in-between all elements of the given list. One level of braces is -removed. An empty input gives an empty output, a singleton gives a singleton, -the separator is used starting with at least two elements. The `list' argument -may be a macro: it is expanded. -\centeredline{|\xintListWithSep{:}{\xintFac +\csa{xintListWithSep}|{sep}|\marg{list} just inserts the given separator |sep| +in-between all elements of the given list: this separator may be a macro but +will not be expanded. The second argument also may be itself a macro: it is +expanded as usual, \emph{i.e.} fully for what comes first. Applying +\csa{xintListWithSep} removes one level of top braces to each list constituent. +An empty input gives an empty output, a singleton gives a singleton, the +separator is used starting with at least two elements. Using an empty separator +has the net effect of removing one-level of brace pairs from each ot the +top-level braced material constituting the \meta{list}. +\centeredline{|\xintListWithSep{:}{\xintFac {20}}=|\texttt{\xintListWithSep{:}{\xintFac {20}}}} -The private macro |XINT@LWS| does the same -job without the initial expansion. + +% The macro \csa{xintListWithSepNoExpand} does the same +% job without the initial expansion. \subsection{\csbh{xintApply}}\label{xintApply} -{\small New in release |1.04|.\par} +{\small New with release |1.04|.\par} \def\macro #1{\the\numexpr 9-#1\relax} -\csa{xintApply}|{\macro}{list}| applies the one parameter command |\macro| to -each item in the `list' (no separator) given as second argument. Each item is -given in turn as parameter to |\macro| which is (fully, as usual) expanded, and +\csa{xintApply}|{\macro}|\marg{list} applies the one parameter command |\macro| +to +each item in the \meta{list} (no separator) given as second argument. Each item +is +given in turn as parameter to |\macro| which is expanded (as usual, \emph{i.e.} +fully for what comes first), and the result is braced. On output, a new list with these braced results. The -`list' may itself be some macro expanding (in the previously described way) to +\meta{list} may itself be some macro expanding (in the previously described way) +to the list of tokens to which the command |\macro| will be applied. For example, -if the `list' expands to some positive number, then each digit will be replaced +if the \meta{list} expands to some positive number, then each digit will be +replaced by the result of applying |\macro| on it. \centeredline{|\def\macro #1{\the\numexpr 9-#1\relax}|} \centeredline{|\xintApply\macro{\xintFac - {20}}=|\texttt{\xintApply\macro{\xintFac {20}}}} The private macro -|XINT@Apply| does the same job without the first initial expansion providing the -`list'. + {20}}=|\texttt{\xintApply\macro{\xintFac {20}}}} + +% The macro +% \csa{xintApplyNoExpand} does the same job without the first initial expansion +% which gave the \meta{list} of braced tokens to which |\macro| is applied. + +\subsection{\csbh{xintApplyUnbraced}}\label{xintApplyUnbraced} + +{\small New in release |1.06b|.\par} + +\def\macro #1{\expandafter\def\csname myself#1\endcsname {#1}} +\xintApplyUnbraced\macro{{elta}{eltb}{eltc}} + +\csa{xintApplyUnbraced}|{\macro}|\marg{list} is like \csb{xintApply} except that +the +various outputs are not again braced. The net effect is the same as doing +\centeredline{|\xintListWithSep {}{\xintApply {\macro}|\marg{list}|}|} +This command is useful for non-expandable +things like doing macro definitions, for which braces are an inconvenience. +(sorry for the silly example: ) +% sorry also for the silly coding of the following verbatim block +\lverb|& +$ $ $ $ \def\macro #1{\expandafter\def\csname myself#1\endcsname {#1}}$\ +$null$ $ $ $ \xintApplyUnbraced\macro{{elta}{eltb}{eltc}}$\ +$null$ $ $ $ \meaning\myselfelta:$ $ $meaning$myselfelta +| +% The macro \csa{xintApplyUnbracedNoExpand} does the same job without the first +% initial expansion which gave the \meta{list} of braced tokens to which +% |\macro| +% is applied. \subsection{\csbh{xintAssign}}\label{xintAssign} @@ -1591,7 +1763,7 @@ pure expansion contexts, as assignments are made via the expands fully the first token then defines \csa{myArray} to be a macro with one parameter, such that \csa{myArray\x} expands in two steps (which provoke the full expansion of the `short' number \texttt{\x}, given to a -|\numexpr|) to give the |N|th braced +|\numexpr|) to give the |x|th braced thing, itself completely expanded. \csa{myArray}|{0}| returns the number |M| of elements of the array so that the successive elements are \csa{myArray}|{1}|, \dots, \csa{myArray}|{M}|. \centeredline{|\xintAssignArray\xintBezout @@ -2436,9 +2608,9 @@ as \csb{xintiNum}. \section{Commands of the \xintseriesname package}\label{sec:series} Some arguments to the package commands are macros which are expanded only later, -when given their parameters. The arguments serving as indices -({\color{niceone}new with |1.06|}) are systematically given to a |\numexpr| -expressions, hence fully expanded, they may be count registers, etc... +when given their parameters. The arguments serving as indices are systematically +given to a |\numexpr| expressions (new with |1.06|!) , hence fully expanded, +they may be count registers, etc... This package was first released with version |1.03| of the \xintname bundle. @@ -2457,15 +2629,14 @@ time of computing the successive |\coeff {n}|) should be defined as a one-parameter fully expandable command, providing its output from an input being an explicit number (string of digits, no need to make proviso for a count register). -\begin{verbatim} -\def\coeff #1{\xintiMON{#1}/#1.5} % (-1)^n/(n+1/2) +\dverb|& +\def\coeff #1{\xintiMON{#1}/#1.5} % (-1)^n/(n+1/2) \edef\w {\xintSeries {0}{50}{\coeff}} % we want to re-use it \edef\z {\xintJrr {\w}[0]} % the [0] for a microsecond gain. % \xintJrr preferred to \xintIrr: a big common factor is suspected. % But numbers much bigger would be needed to show the greater efficiency. \[ \sum_{n=0}^{n=50} \frac{(-1)^n}{n+\frac12} = \xintFrac\z \] -\end{verbatim} -\vspace*{-.5\baselineskip} +| \[ \sum_{n=0}^{n=50} \frac{(-1)^n}{n+\frac12} = \xintFrac\z \] For info, before action by |\xintJrr| the inner representation of the result has a denominator of |\xintLen {\xintDenominator\w}=|\xintLen @@ -2529,7 +2700,7 @@ digits) in the denominator. See the explanations in the next section. % \printnumber\z \setlength{\columnsep}{0pt} -\begin{verbatim} +\dverb|& \def\coeffleibnitz #1{\the\numexpr\ifodd #1 1\else-1\fi\relax/#1[0]} \cnta 1 \loop % in this loop we recompute from scratch each partial sum! @@ -2539,7 +2710,7 @@ digits) in the denominator. See the explanations in the next section. {\xintSeries {1}{\cnta}{\coeffleibnitz}}\dots \endgraf \ifnum\cnta < 30 \advance\cnta 1 \repeat -\end{verbatim} +| \begin{multicols}{3} \def\coeffleibnitz #1{\the\numexpr\ifodd #1 1\else-1\fi\relax/#1[0]} \cnta 1 \loop @@ -2562,18 +2733,18 @@ at the time of computing |\coeff {n}|) should be defined as a one-parameter fully expandable command, accepting on input an explicit number, and returning a (long) integer in the format understood by the integer-only \csa{xintiAdd}. -\begin{verbatim} +\dverb|& \def\coeff #1{\xintiTrunc {40}{\xintMON{#1}/#1.5}}% % better: \def\coeff #1{\xintiTrunc {40} - {\the\numexpr 2*\xintiMON{#1}\relax/\the\numexpr 2*#1+1\relax [0]}}% + {\the\numexpr 2*\xintiMON{#1}\relax/\the\numexpr 2*#1+1\relax [0]}}% % better still: \def\coeff #1{\xintiTrunc {40} - {\the\numexpr\ifodd #1 -2\else2\fi\relax/\the\numexpr 2*#1+1\relax [0]}}% + {\the\numexpr\ifodd #1 -2\else2\fi\relax/\the\numexpr 2*#1+1\relax [0]}}% % (-1)^n/(n+1/2) times 10^40, truncated to an integer. \[ \sum_{n=0}^{n=50} \frac{(-1)^n}{n+\frac12} \approx \xintTrunc {40}{\xintiSeries {0}{50}{\coeff}[-40]}\dots\] -\end{verbatim} +| The |#1.5| trick to define the |\coeff| macro was neat, but |1/3.5|, for example, turns internally into |10/35| whereas it would be more efficient to have |2/7|. The second way of coding the wanted coefficient avoids a superfluous @@ -2591,7 +2762,7 @@ should trash the last two digits, or at least round at 38 digits. It is interesting to compare with the computation where rounding rather than truncation is used, and with the decimal expansion of the exactly computed partial sum of the series: -\begin{verbatim} +\dverb|& \def\coeff #1{\xintiRound {40} % rounding at 40 {\the\numexpr\ifodd #1 -2\else2\fi\relax/\the\numexpr 2*#1+1\relax [0]}}% % (-1)^n/(n+1/2) times 10^40, rounded to an integer. @@ -2601,7 +2772,7 @@ expansion of the exactly computed partial sum of the series: {\the\numexpr\ifodd #1 -2\else2\fi\relax/\the\numexpr 2*#1+1\relax [0]}% \[ \sum_{n=0}^{n=50} \frac{(-1)^n}{n+\frac12} = \xintTrunc {50}{\xintSeries {0}{50}{\exactcoeff}}\dots\] -\end{verbatim} +| \def\coeff #1{\xintiRound {40} {\the\numexpr\ifodd #1 -2\else2\fi\relax/\the\numexpr 2*#1+1\relax [0]}}% % (-1)^n/(n+1/2) times 10^40, rounded to an integer. @@ -2630,7 +2801,7 @@ expanding to) the value |F(A)| and |\ratio| being a one-parameter expandable command, accepting on input an explicit number |n| and producing after (full iterated) expansion (of the first token) |F(n)/F(n-1)|. The initial and final indices are given to a |\numexpr| expression. -\begin{verbatim} +\dverb|& \def\ratio #1{2/#1[0]}% 2/n, comes from the series of exp(2) \cnta 0 % previously declared count \loop @@ -2639,7 +2810,7 @@ indices are given to a |\numexpr| expression. \xintTrunc{12}\z\dots= \xintFrac\z=\xintFrac{\xintIrr\z}$\vtop to 5pt{}\endgraf \ifnum\cnta<20 \advance\cnta 1 \repeat -\end{verbatim} +| \def\ratio #1{2/#1[0]}% 2/n, comes from the series of exp(2) \cnta 0 \loop @@ -2655,8 +2826,7 @@ Such computations would become quickly completely inaccessible via the all multiplied together: the raw addition and subtraction on fractions just blindly multiplies denominators! Whereas \csa{xintRationalSeries} evaluate the partial sums via a less silly iterative scheme. -\vspace*{-.5\baselineskip} -\begin{verbatim} +\dverb|& \def\ratio #1{-1/#1[0]}% -1/n, comes from the series of exp(-1) \cnta 0 % previously declared count \loop @@ -2665,7 +2835,7 @@ evaluate the partial sums via a less silly iterative scheme. \xintTrunc{20}\z\dots=\xintFrac{\z}=\xintFrac{\xintIrr\z}$ \vtop to 5pt{}\endgraf \ifnum\cnta<20 \advance\cnta 1 \repeat -\end{verbatim} +| \def\ratio #1{-1/#1[0]}% -1/n, comes from the series of exp(-1) \cnta 0 % previously declared count @@ -2685,8 +2855,7 @@ a macro with two parameters: |\def\ratioexp Then, if |\x| expands to some fraction |x|, the command \centeredline{|\xintRationalSeries {0}{b}{1}{\ratioexp{\x}}|} will compute $\sum_{n=0}^{n=b} x^n/n!$:\par -\vspace*{-.5\baselineskip} -\begin{verbatim} +\dverb|& \cnta 0 \def\ratioexp #1#2{\xintDiv{#1}{#2}}% #1/#2 \loop @@ -2695,7 +2864,7 @@ $\sum_{n=0}^{\the\cnta} (.57)^n/n! = \xintTrunc {50} {\xintRationalSeries {0}{\cnta}{1}{\ratioexp{.57}}}\dots$ \vtop to 5pt {}\endgraf \ifnum\cnta<50 \advance\cnta 10 \repeat -\end{verbatim} +| \cnta 0 \loop @@ -2718,7 +2887,7 @@ use this result without recomputing it. This is \csb{xintRationalSeriesX}, documented next. Here is a slightly more complicated evaluation: -\begin{verbatim} +\dverb|& \cnta 1 \loop \edef\z {\xintRationalSeries {\cnta} @@ -2731,7 +2900,7 @@ $\sum_{n=\the\cnta}^{\the\numexpr 2*\cnta-1\relax} \frac{\the\cnta^n}{n!}/% \sum_{n=0}^{\the\numexpr 2*\cnta-1\relax} \frac{\the\cnta^n}{n!} = \xintTrunc{8}{\xintDiv\z\w}\dots$ \vtop to 5pt{}\endgraf \ifnum\cnta<20 \advance\cnta 1 \repeat -\end{verbatim} +| \cnta 1 \begin{multicols}{2} \loop \edef\z {\xintRationalSeries @@ -2776,7 +2945,7 @@ explicit fraction encapsulated in a macro). The example will use the macro \csb{xintPowerSeries} which computes efficiently exact partial sums of power series, and is discussed in the next section. -\begin{verbatim} +\dverb|& \def\firstterm #1{1[0]}% first term of the exponential series % although it is the constant 1, here it must be defined as a % one-parameter macro. Next comes the ratio function for exp: @@ -2793,7 +2962,7 @@ next section. {\xintPowerSeries{1}{10}{\coefflog}{\the\cnta[-1]}}}\dots \endgraf \ifnum\cnta < 12 \advance \cnta 1 \repeat -\end{verbatim} +| \def\firstterm #1{1[0]}% first term of the exponential series % although it is the constant 1, here it must be defined as a @@ -2937,7 +3106,7 @@ was plaguing the |1.03| version. \footnote{with powers |x\string^k|, coefficients themselves. \end{framed} -\begin{verbatim} +\dverb|& \def\geom #1{1[0]} % the geometric series \def\x {5/17[0]} \[ \sum_{n=0}^{n=20} \Bigl(\frac 5{17}\Bigr)^n @@ -2947,7 +3116,7 @@ was plaguing the |1.03| version. \footnote{with powers |x\string^k|, % a parser for arbitrary algebraic expressions with the +,-,/,*,and ^ % operations would be dearly appreciated here ; implementing a completely % expandable one would be quite a lot of work, even if we plagiarize l3fp! -\end{verbatim} +| \def\geom #1{1[0]} % the geometric series \def\x {5/17[0]} % \[ \sum_{n=0}^{n=20} \Bigl(\frac 5{17}\Bigr)^n @@ -2955,14 +3124,14 @@ was plaguing the |1.03| version. \footnote{with powers |x\string^k|, =\xintFrac{\xintiSub{\xintiPow {17}{21}}{\xintiPow{5}{21}}% /\xintiMul{12}{\xintiPow {17}{20}}}\] -\begin{verbatim} +\dverb|& \def\coefflog #1{1/#1[0]}% 1/n \def\x {1/2[0]}% \[ \log 2 \approx \sum_{n=1}^{20} \frac1{n\cdot 2^n} = \xintFrac {\xintIrr {\xintPowerSeries {1}{20}{\coefflog}{\x}}}\] \[ \log 2 \approx \sum_{n=1}^{50} \frac1{n\cdot 2^n} = \xintFrac {\xintIrr {\xintPowerSeries {1}{50}{\coefflog}{\x}}}\] -\end{verbatim} +| \def\coefflog #1{1/#1[0]} % 1/n \def\x {1/2[0]}% \[ \log 2 \approx \sum_{n=1}^{20} \frac1{n\cdot 2^n} @@ -2970,7 +3139,7 @@ was plaguing the |1.03| version. \footnote{with powers |x\string^k|, {1}{20}{\coefflog}{\x}}}\] \[ \log 2 \approx \sum_{n=1}^{50} \frac1{n\cdot 2^n} = \xintFrac {\xintIrr {\xintPowerSeries {1}{50}{\coefflog}{\x}}}\] -\begin{verbatim} +\dverb|& \cnta 1 % previously declared count \loop % in this loop we recompute from scratch each partial sum! % we can afford that, as \xintPowerSeries is fast enough. @@ -2979,7 +3148,7 @@ was plaguing the |1.03| version. \footnote{with powers |x\string^k|, {\xintPowerSeries {1}{\cnta}{\coefflog}{\x}}\dots \endgraf \ifnum \cnta < 30 \advance\cnta 1 \repeat -\end{verbatim} +| \setlength{\columnsep}{0pt} \begin{multicols}{3} \cnta 1 % previously declared count @@ -2990,7 +3159,7 @@ was plaguing the |1.03| version. \footnote{with powers |x\string^k|, \endgraf \ifnum \cnta < 30 \advance\cnta 1 \repeat \end{multicols} -\begin{verbatim} +\dverb|& %\def\coeffarctg #1{1/\the\numexpr\xintMON{#1}*(2*#1+1)\relax }% \def\coeffarctg #1{1/\the\numexpr\ifodd #1 -2*#1-1\else2*#1+1\fi\relax }% % the above gives (-1)^n/(2n+1). The sign being in the denominator, @@ -3003,7 +3172,7 @@ was plaguing the |1.03| version. \footnote{with powers |x\string^k|, \frac15\sum_{n=0}^{15} \frac{(-1)^n}{(2n+1)25^n} = \xintFrac{\xintIrr {\xintDiv {\xintPowerSeries {0}{15}{\coeffarctg}{\x}}{5}}}\] -\end{verbatim} +| \def\coeffarctg #1{1/\the\numexpr\ifodd #1 -2*#1-1\else2*#1+1\fi\relax }% \def\x {1/25[0]}% 1/5^2 \[\mathrm{Arctg}(\frac15)\approx @@ -3031,7 +3200,7 @@ in token shuffling due to a very big fraction will not be avoided, but the far worse cost of re-doing each time the computations leading to such a fraction will be. The constraints of expandability make it impossible to encapsulate the result of this initial computation in a macro and have the best of both worlds. -\begin{verbatim} +\dverb|& \def\ratioexp #1#2{\xintDiv {#1}{#2}}% x/n % These are the (-1)^{n-1}/n of the log(1+h) series: \def\coefflog #1{\the\numexpr\ifodd #1 1\else-1\fi\relax/#1[0]}% @@ -3047,7 +3216,7 @@ result of this initial computation in a macro and have the best of both worlds. {1}}}\dots \endgraf \ifnum\cnta < 12 \advance \cnta 1 \repeat -\end{verbatim} +| \cnta 0 \def\ratioexp #1#2{\xintDiv {#1}{#2}}% x/n % These are the (-1)^{n-1}/n of the log(1+h) series @@ -3112,7 +3281,7 @@ $\ApproxExp {\cnta}{20}$\\ \advance\cnta 1 \repeat\par \end{multicols} -\begin{verbatim} +\dverb|& \def\coeffexp #1{1/\xintFac {#1}[0]}% 1/n! \def\x {-1/2[0]}% [0] for faster input parsing \def\ApproxExp #1#2{\xintFxPtPowerSeries {0}{#1}{\coeffexp}{\x}{#2}}% @@ -3125,7 +3294,7 @@ $\ApproxExp {\cnta}{20}$\\ % truncates 20 digits after decimal point % effect is attenuated by the alternating signs in the series). We can % confirm that the last two digits (of our evaluation of the nineteenth % partial sum) are wrong via the evaluation with more digits: -\end{verbatim} +| \centeredline{|\xintFxPtPowerSeries {0}{19}{\coeffexp}{\x}{25}=| \xintFxPtPowerSeries {0}{19}{\coeffexp}{\x}{25}} @@ -3171,7 +3340,7 @@ terms of their respective series. We will assume &|h|<0.5&. With only ten terms kept in the power series we do not have quite 3 digits precision as &2^10=1024&. So it wouldn't make sense to evaluate things more precisely than, say circa 5 digits after the decimal points. -\begin{verbatim} +\dverb|& \cnta 0 \def\coefflog #1{\the\numexpr\ifodd#1 1\else-1\fi\relax/#1[0]}% (-1)^{n-1}/n \def\coeffalt #1{\the\numexpr\ifodd#1 -1\else1\fi\relax [0]}% (-1)^n @@ -3182,7 +3351,7 @@ more precisely than, say circa 5 digits after the decimal points. {\xintFxPtPowerSeriesX {1}{10}{\coeffalt}{\the\cnta [-2]}{5}} {5}}\endgraf \ifnum\cnta < 49 \advance\cnta 7 \repeat -\end{verbatim} +| \cnta 0 \def\coefflog #1{\the\numexpr\ifodd#1 1\else-1\fi\relax/#1[0]}% (-1)^{n-1}/n @@ -3207,7 +3376,7 @@ digits precision. So we compute with 6 digits precision but return only 4 digits (rounded) after the decimal point. This result with 4 post-decimal points precision is then used as input to the next evaluation. -\begin{verbatim} +\dverb|& \loop \noindent \hbox to 2.5cm {\hss\texttt{D(\the\cnta/100): }}% \xintRound{4} @@ -3218,7 +3387,7 @@ to the next evaluation. {6}}% }\endgraf \ifnum\cnta < 49 \advance\cnta 7 \repeat -\end{verbatim} +| \begin{multicols}2 \loop @@ -3284,7 +3453,7 @@ correct exact truncated one. % 693147180559945309417232121458176568075500134360255254120680009493 -\begin{verbatim} +\dverb|& \def\coefflog #1{1/#1[0]}% 1/n \def\xa {13/256[0]}% we will compute log(1-13/256) \def\xb {1/9[0]}% we will compute log(1-1/9) @@ -3312,7 +3481,7 @@ correct exact truncated one. \noindent $\log 2 \approx \LogTwo {60}\dots$\endgraf \noindent\phantom{$\log 2$}${}\approx{}$\printnumber{\LogTwo {65}}\dots\endgraf \noindent\phantom{$\log 2$}${}\approx{}$\printnumber{\LogTwo {70}}\dots\endgraf -\end{verbatim} +| \def\coefflog #1{1/#1[0]}% 1/n \def\xa {13/256[0]}% we will compute log(1-13/256) \def\xb {1/9[0]}% we will compute log(1-1/9) @@ -3343,7 +3512,7 @@ first |D| digits, for all values from |D=0| to |D=100|, except in one case (|D=40|) where the last digit is wrong. For values of |D| higher than |100| it is more efficient to use the code using \csa{xintFxPtPowerSeries}. -\begin{verbatim} +\dverb|& \def\LogTwo #1% get log(2)=-2log(1-13/256)- 5log(1-1/9) {% \romannumeral0\expandafter\LogTwoDoIt \expandafter @@ -3359,7 +3528,7 @@ higher than |100| it is more efficient to use the code using {\xintMul {5}{\xintPowerSeries {1}{#1}{\coefflog}{\xb}}}% }% }% -\end{verbatim} +| Let us turn now to Pi, computed with the Machin formula. Again the numbers of terms to keep in the two |arctg| series were roughly estimated, @@ -3372,7 +3541,7 @@ always gets better than |10^{-D}| precision, but again, strings of zeros or nine encountered in the decimal expansion may falsify the ending digits, nines may be zeros (and the last non-nine one should be increased) and zeros may be nine (and the last non-zero one should be decreased). -\begin{verbatim} +\dverb|& % pi = 16 Arctg(1/5) - 4 Arctg(1/239) (John Machin's formula) \def\coeffarctg #1{\the\numexpr\ifodd#1 -1\else1\fi\relax/% \the\numexpr 2*#1+1\relax [0]}% @@ -3404,8 +3573,7 @@ zeros may be nine (and the last non-zero one should be decreased). {\xintMul {4/239}{\xintFxPtPowerSeries {0}{#2}{\coeffarctg}{\xb}{#3}}}% }}% \[ \pi = \Machin {60}\dots \] -\end{verbatim} -\vspace*{-\baselineskip} +| \def\coeffarctg #1{\the\numexpr\ifodd#1 -1\else1\fi\relax/% \the\numexpr 2*#1+1\relax [0]}% %\def\coeffarctg #1{\romannumeral0\xintmon{#1}/\the\numexpr 2*#1+1\relax }% @@ -3434,7 +3602,7 @@ Here is a variant|\MachinBis|, which evaluates the partial sums \emph{exactly} using \csa{xintPowerSeries}, before their final truncation. No need for a ``|+3|'' then. -\begin{verbatim} +\dverb|& \def\MachinBis #1{% #1 may be a count register, % the final result will be truncated to #1 digits post decimal point \romannumeral0\expandafter\MachinBisA \expandafter @@ -3450,7 +3618,7 @@ which evaluates the partial sums \emph{exactly} using {\xintMul {16/5}{\xintPowerSeries {0}{#1}{\coeffarctg}{\xa}}} {\xintMul{4/239}{\xintPowerSeries {0}{#2}{\coeffarctg}{\xb}}}% }}% -\end{verbatim} +| \def\MachinBis #1{% #1 may be a count register, % the final result will be truncated to #1 digits post decimal point @@ -3469,12 +3637,12 @@ which evaluates the partial sums \emph{exactly} using }}% Let us use this variant for a loop showing the build-up of digits: -\begin{verbatim} +\dverb|& \cnta 0 % previously declared \count register \loop \MachinBis{\cnta} \endgraf % Plain's \loop does not accept \par \ifnum\cnta < 30 \advance\cnta 1 \repeat -\end{verbatim} +| \begin{multicols}{2} \cnta 0 % previously declared \count register \loop \noindent @@ -3487,12 +3655,12 @@ Let us use this variant for a loop showing the build-up of digits: You want more digits and have some time? Copy the |\Machin| code to a Plain \TeX{} or \LaTeX{} document loading \xintseriesname, and compile: -\begin{verbatim} +\dverb|& \newwrite\outfile \immediate\openout\outfile \jobname-out\relax \immediate\write\outfile {\Machin {1000}} \immediate\closeout\outfile -\end{verbatim} +| This will create a file with the correct first 1000 digits of $\pi$ after the decimal point. On my laptop (a 2012 model) this took about 44 seconds last time I tried (and for 200 digits it is less than 1 second). @@ -3726,20 +3894,20 @@ fraction for $\pi$: \cfrac{4}{\xintGCFrac{\xintGCntoGC {5}{\an}{\bn}}} = \xintTrunc {10}{\xintDiv {4}{\xintGCntoF {5}{\an}{\bn}}}\dots\] was obtained with this code: -\begin{verbatim} +\dverb|& \def\an #1{\the\numexpr 2*#1+1\relax }% \def\bn #1{\the\numexpr (#1+1)*(#1+1)\relax }% \[ \xintFrac{\xintDiv {4}{\xintGCntoF {5}{\an}{\bn}}} = \cfrac{4}{\xintGCFrac{\xintGCntoGC {5}{\an}{\bn}}} = \xintTrunc {10}{\xintDiv {4}{\xintGCntoF {5}{\an}{\bn}}}\dots\] -\end{verbatim} +| We see that the quality of approximation is not fantastic compared to the simple continued fraction of $\pi$ with about as many terms: -\begin{verbatim} +\dverb|& \[ \xintFrac{\xintCstoF{3,7,15,1,292,1,1}}= \xintGCFrac{3+1/7+1/15+1/1+1/292+1/1+1/1}= \xintTrunc{10}{\xintCstoF{3,7,15,1,292,1,1}}\dots\] -\end{verbatim} +| \[ \xintFrac{\xintCstoF{3,7,15,1,292,1,1}}= \xintGCFrac{3+1/7+1/15+1/1+1/292+1/1+1/1}= \xintTrunc{10}{\xintCstoF{3,7,15,1,292,1,1}}\dots\] @@ -3747,7 +3915,7 @@ continued fraction of $\pi$ with about as many terms: \hypertarget{e-convergents}{To} conclude this overview of most of the package functionalities, let us explore the convergents of Euler's number $e$. -\begin{verbatim} +\dverb|& \def\cn #1{\the\numexpr\ifcase \numexpr #1+3-3*((#1+2)/3)\relax 1\or1\or2*(#1/3)\fi\relax } % produces the pattern 1,1,2,1,1,4,1,1,6,1,1,8,... which are the @@ -3760,7 +3928,7 @@ the convergents of Euler's number $e$. \xintFrac{\xintAdd {1[0]}{#1}}$}% \xintListWithSep{\vtop to 6pt{}\vbox to 12pt{}\par} {\xintApply\mymacro{\xintiCstoCv{\xintCntoCs {35}{\cn}}}} -\end{verbatim} +| \smallskip The volume of computation is kept minimal by the following steps: \begin{itemize} \item a comma separated list of the first 36 coefficients is produced by @@ -3809,14 +3977,14 @@ convergent already gets 799 digits correct! To allow speedy compilation of the source of this document when the need arises, I limit here to the 200th convergent (getting the 500th took about 1.2s on my laptop last time I tried, and the 200th convergent is obtained ten times faster). -\begin{verbatim} +\dverb|& \edef\z {\xintCntoF {199}{\cn}}% \begingroup\parindent 0pt \leftskip 2.5cm \indent\llap {Numerator = }\printnumber{\xintNumerator\z}\par \indent\llap {Denominator = }\printnumber{\xintDenominator\z}\par \indent\llap {Expansion = }\printnumber{\xintTrunc{268}\z}\dots \par\endgroup -\end{verbatim} +| \edef\z {\xintCntoF {199}{\cn}}% @@ -3981,19 +4149,19 @@ The output can then be used in \csb{xintGCFrac} for example. the inline generalized continued fraction. Coefficients may be fractions but must then be put within braces. They can be macros. The plus signs are mandatory. -\begin{verbatim} +\dverb|& \[\xintGCFrac {1+\xintPow{1.5}{3}/{1/7}+{-3/5}/\xintFac {6}} = \xintFrac{\xintGCtoF {1+\xintPow{1.5}{3}/{1/7}+{-3/5}/\xintFac {6}}} = \xintFrac{\xintIrr{\xintGCtoF {1+\xintPow{1.5}{3}/{1/7}+{-3/5}/\xintFac {6}}}}\] -\end{verbatim} +| \[\xintGCFrac {1+\xintPow{1.5}{3}/{1/7}+{-3/5}/\xintFac {6}} = \xintFrac{\xintGCtoF {1+\xintPow{1.5}{3}/{1/7}+{-3/5}/\xintFac {6}}} = \xintFrac{\xintIrr{\xintGCtoF {1+\xintPow{1.5}{3}/{1/7}+{-3/5}/\xintFac {6}}}}\] -\begin{verbatim} +\dverb|& \[ \xintGCFrac{{1/2}+{2/3}/{4/5}+{1/2}/{1/5}+{3/2}/{5/3}} = \xintFrac{\xintGCtoF {{1/2}+{2/3}/{4/5}+{1/2}/{1/5}+{3/2}/{5/3}}} \] -\end{verbatim} +| \[ \xintGCFrac{{1/2}+{2/3}/{4/5}+{1/2}/{1/5}+{3/2}/{5/3}} = \xintFrac{\xintGCtoF {{1/2}+{2/3}/{4/5}+{1/2}/{1/5}+{3/2}/{5/3}}} \] The macro tries its best not to accumulate superfluous factor in the @@ -4009,12 +4177,12 @@ then be inside braces. Or they may be macros, too. The convergents will in the general case be reducible. To put them into irreducible form, one needs one more step, for example it can be done with |\xintApply\xintIrr|. -\begin{verbatim} +\dverb|& \[\xintListWithSep{,}{\xintApply\xintFrac {\xintGCtoCv{3+{-2}/{7/2}+{3/4}/12+{-56}/3}}}\] \[\xintListWithSep{,}{\xintApply\xintFrac{\xintApply\xintIrr {\xintGCtoCv{3+{-2}/{7/2}+{3/4}/12+{-56}/3}}}}\] -\end{verbatim} +| \[\xintListWithSep{,}{\xintApply\xintFrac {\xintGCtoCv{3+{-2}/{7/2}+{3/4}/12+{-56}/3}}}\] \[\xintListWithSep{,}{\xintApply\xintFrac{\xintApply\xintIrr @@ -4089,13 +4257,13 @@ fractions. returns the corresponding |{a0}+{b0}/{a1}+{b1}/{a2}+...+{b(N-1)}/{aN}| inline generalized fraction. |N| is givent to a |\numexpr|. As shown, the coefficients are enclosed into added pairs of braces, and may thus be fractions. -\begin{verbatim} +\dverb|& \def\an #1{\the\numexpr #1*#1*#1+1\relax}% \def\bn #1{\the\numexpr \xintiMON{#1}*(#1+1)\relax}% \texttt{\xintGCntoGC {5}{\an}{\bn}}% ${}=\xintGCFrac {\xintGCntoGC {5}{\an}{\bn}} = \displaystyle\xintFrac {\xintGCntoF {5}{\an}{\bn}}$\par -\end{verbatim} +| \def\an #1{\the\numexpr #1*#1*#1+1\relax}% \def\bn #1{\the\numexpr \xintiMON{#1}*(#1+1)\relax}% \noindent\texttt{\xintGCntoGC {5}{\an}{\bn}}% @@ -4119,11 +4287,11 @@ hundreds of coefficients. \csa{xintGCtoGC}|{a+b/c+d/e+f/g+......+v/w+x/y}| expands (with the usual meaning) each one of the coefficients and returns an inline continued fraction of the same type, each expanded coefficient being enclosed withing braces. -\begin{verbatim} +\dverb|& \edef\x {\xintGCtoGC {1+\xintPow{1.5}{3}/{1/7}+{-3/5}/\xintFac {6}+\xintCstoF {2,-7,-5}/16}} \texttt{\meaning\x} -\end{verbatim} +| \edef\x {\xintGCtoGC {1+\xintPow{1.5}{3}/{1/7}+{-3/5}/\xintFac {6}+\xintCstoF {2,-7,-5}/16}} \texttt{\meaning\x} @@ -4131,23 +4299,22 @@ of the same type, each expanded coefficient being enclosed withing braces. To be honest I have, it seems, forgotten why I wrote this macro in the first place. - \catcode`\& 4 \makeatletter -\let\check@percent\original@check@percent \StopEventually{\end{document}\endinput} \makeatother -\newgeometry{hmarginratio=4:3,hscale=0.75} -\def\MacroFont{\ttfamily\small\baselineskip12pt\relax} +\newgeometry{hmarginratio=4:3,hscale=0.75} +\def\MacroFont{\ttfamily\small\hyphenchar\font45 + \baselineskip12pt\relax } \MakePercentIgnore % % \catcode`\<=0 \catcode`\>=11 \catcode`\*=11 \catcode`\/=11 % \let\relax -% \def<*xint>{\catcode`\<=12 \catcode`\>=12 \catcode`\*=12 \catcode`\/=12} +% \def<*xint>{\catcode`\<=12 \catcode`\>=12 \catcode`\*=12 \catcode`\/=12 } % % %<*xint> @@ -4164,7 +4331,7 @@ first place. % % The method for catcodes was also inspired by these packages, we proceed % slightly differently. |1.05| adds a |\relax| near the end of -% |\XINT@restorecatcodes@endinput|. Plain TeX users following the doc +% |\XINT_restorecatcodes_endinput|. Plain TeX users following the doc % instruction to do |\input xint.sty\relax| were anyhow protected from any side % effect. I didn't realize earlier that the |\endinput| would not have had the % effect of stopping the scanning from the last |\the\catcode61|. @@ -4173,6 +4340,11 @@ first place. % because we replace everywhere in the code the twice-expansion done with % |\expandafter| by the systematic use of |\romannumeral-`0|. % +% Starting with version |1.06b| I decide that I suffer from an indigestion of @ +% signs, so I replace them all with underscores |_|, \`a la \LaTeX 3. As this +% change makes it a bit more difficult to access the few private macros which +% were mentioned in the user documentation, I renamed them with only letters. +% % \begin{macrocode} \begingroup\catcode61\catcode48\catcode32=10\relax% \catcode13=5 % ^^M @@ -4180,6 +4352,7 @@ first place. \catcode123=1 % { \catcode125=2 % } \catcode64=11 % @ + \catcode95=11 % _ (starting with 1.06b, used inside cs names) \catcode35=6 % # \catcode44=12 % , \catcode45=12 % - @@ -4211,7 +4384,7 @@ first place. \def\ChangeCatcodesIfInputNotAborted {% \endgroup - \edef\XINT@restorecatcodes@endinput + \edef\XINT_restorecatcodes_endinput {% \catcode96=\the\catcode96 % ` \catcode47=\the\catcode47 % / @@ -4226,7 +4399,7 @@ first place. \catcode45=\the\catcode45 % - \catcode44=\the\catcode44 % , \catcode35=\the\catcode35 % # - \catcode64=\the\catcode64 % @ + \catcode95=\the\catcode95 % _ \catcode125=\the\catcode125 % } \catcode123=\the\catcode123 % { \endlinechar=\the\endlinechar @@ -4235,7 +4408,7 @@ first place. \catcode61=\the\catcode61\relax % = \noexpand\endinput }% - \def\XINT@setcatcodes + \def\XINT_setcatcodes {% \catcode61=12 % = \catcode32=10 % space @@ -4243,7 +4416,7 @@ first place. \endlinechar=13 % \catcode123=1 % { \catcode125=2 % } - \catcode64=11 % @ + \catcode95=11 % _ (replaces @ everywhere, starting with 1.06b) \catcode35=6 % # \catcode44=12 % , \catcode45=12 % - @@ -4258,7 +4431,7 @@ first place. \catcode47=12 % / \catcode96=12 % ` }% - \XINT@setcatcodes + \XINT_setcatcodes }% \ChangeCatcodesIfInputNotAborted % \end{macrocode} @@ -4268,6 +4441,7 @@ first place. % % \begin{macrocode} \begingroup + \catcode64=11 % @ \catcode91=12 % [ \catcode93=12 % ] \catcode58=12 % : (does not really matter, was letter) @@ -4289,500 +4463,516 @@ first place. \fi \expandafter\x\csname ver@xint.sty\endcsname \ProvidesPackage{xint}% - [2013/05/09 v1.06a Expandable operations on long numbers (jfB)]% + [2013/05/14 v1.06b Expandable operations on long numbers (jfB)]% % \end{macrocode} % \subsection{Token management macros} % \begin{macrocode} -\def\xint@gobble #1{}% -\def\xint@gobble@ {}% -\def\xint@gobble@i #1{}% -\def\xint@gobble@ii #1#2{}% -\def\xint@gobble@iii #1#2#3{}% -\def\xint@gobble@iv #1#2#3#4{}% -\def\xint@gobble@v #1#2#3#4#5{}% -\def\xint@gobble@vi #1#2#3#4#5#6{}% -\def\xint@gobble@vii #1#2#3#4#5#6#7{}% -\def\xint@gobble@viii #1#2#3#4#5#6#7#8{}% -\def\xint@firstoftwo #1#2{#1}% -\def\xint@secondoftwo #1#2{#2}% -\def\xint@firstoftwo@andstop #1#2{ #1}% -\def\xint@secondoftwo@andstop #1#2{ #2}% -\def\xint@exchangetwo@keepbraces@andstop #1#2{ {#2}{#1}}% -\def\xint@minus@andstop { -}% -\def\xint@r #1\R {}% -\def\xint@w #1\W {}% -\def\xint@z #1\Z {}% -\def\xint@zero #10{}% -\def\xint@one #11{}% -\def\xint@minus #1-{}% -\def\xint@relax #1\relax {}% -\def\xint@quatrezeros #10000{}% -\def\xint@bracedundef {\xint@undef }% -\def\xint@UDzerofork #10\dummy #2#3\xint@UDkrof {#2}% -\def\xint@UDsignfork #1-\dummy #2#3\xint@UDkrof {#2}% -\def\xint@UDwfork #1\W\dummy #2#3\xint@UDkrof {#2}% -\def\xint@UDzerosfork #100\dummy #2#3\xint@UDkrof {#2}% -\def\xint@UDonezerofork #110\dummy #2#3\xint@UDkrof {#2}% -\def\xint@UDzerominusfork #10-\dummy #2#3\xint@UDkrof {#2}% -\def\xint@UDsignsfork #1--\dummy #2#3\xint@UDkrof {#2}% -\def\xint@afterfi #1#2\fi {\fi #1}% +\def\xint_gobble_ {}% +\def\xint_gobble_i #1{}% +\def\xint_gobble_ii #1#2{}% +\def\xint_gobble_iii #1#2#3{}% +\def\xint_gobble_iv #1#2#3#4{}% +\def\xint_gobble_v #1#2#3#4#5{}% +\def\xint_gobble_vi #1#2#3#4#5#6{}% +\def\xint_gobble_vii #1#2#3#4#5#6#7{}% +\def\xint_gobble_viii #1#2#3#4#5#6#7#8{}% +\def\xint_firstoftwo #1#2{#1}% +\def\xint_secondoftwo #1#2{#2}% +\def\xint_firstoftwo_andstop #1#2{ #1}% +\def\xint_secondoftwo_andstop #1#2{ #2}% +\def\xint_exchangetwo_keepbraces_andstop #1#2{ {#2}{#1}}% +\def\xint_minus_andstop { -}% +\def\xint_gob_til_r #1\R {}% +\def\xint_gob_til_w #1\W {}% +\def\xint_gob_til_z #1\Z {}% +\def\xint_gob_til_zero #10{}% +\def\xint_gob_til_one #11{}% +\def\xint_gob_til_zeros_iv #10000{}% +\def\xint_gob_til_relax #1\relax {}% +\def\xint_gob_til_xint_undef #1\xint_undef {}% +\def\xint_gob_til_xint_relax #1\xint_relax {}% +\def\xint_UDzerofork #10\dummy #2#3\krof {#2}% +\def\xint_UDsignfork #1-\dummy #2#3\krof {#2}% +\def\xint_UDwfork #1\W\dummy #2#3\krof {#2}% +\def\xint_UDzerosfork #100\dummy #2#3\krof {#2}% +\def\xint_UDonezerofork #110\dummy #2#3\krof {#2}% +\def\xint_UDzerominusfork #10-\dummy #2#3\krof {#2}% +\def\xint_UDsignsfork #1--\dummy #2#3\krof {#2}% +\def\xint_afterfi #1#2\fi {\fi #1}% +\let\xint_relax\relax +\def\xint_braced_xint_relax {\xint_relax }% % \end{macrocode} % \subsection{\csh{xintRev}, \csh{xintReverseOrder}} -% \begin{verbatim} -% \xintRev: fait l'expansion avec \romannumeral-`0, vérifie le signe -% \xintReverseOrder: ne fait PAS l'expansion, ne regarde PAS le signe. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% \xintRev: fait l'expansion avec \romannumeral-`0, vérifie le signe.$\ +% \xintReverseOrder: ne fait PAS l'expansion, ne regarde PAS le signe.| % \begin{macrocode} \def\xintRev {\romannumeral0\xintrev }% \def\xintrev #1% {% - \expandafter\xint@rev\expandafter {\romannumeral-`0#1}% -}% -\def\xint@rev #1% -{% - \XINT@rev@fork #1\Z -}% -\def\XINT@rev@fork #1#2% -{% - \xint@UDsignfork - #1\dummy \XINT@rev@negative - -\dummy \XINT@rev@nonnegative - \xint@UDkrof - #1#2% -}% -\def\XINT@rev@negative #1#2\Z -{% - \expandafter\xint@minus@andstop\romannumeral0\XINT@rev {#2}% + \expandafter\XINT_rev_fork + \romannumeral-`0#1\xint_relax % empty #1 ok + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_relax }% -\def\XINT@rev@nonnegative #1\Z +\def\XINT_rev_fork #1% {% - \XINT@rev {#1}% + \xint_UDsignfork + #1\dummy {\expandafter\xint_minus_andstop + \romannumeral0\XINT_rord_main {}}% + -\dummy {\XINT_rord_main {}#1}% + \krof }% -\def\XINT@Rev {\romannumeral0\XINT@rev }% -\let\xintReverseOrder \XINT@Rev -\def\XINT@rev #1% +\def\XINT_Rev {\romannumeral0\XINT_rev }% +\def\xintReverseOrder {\romannumeral0\XINT_rev }% +\def\XINT_rev #1% {% - \XINT@rord@main {}#1% - \xint@UNDEF - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@UNDEF + \XINT_rord_main {}#1% + \xint_relax + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_relax }% -\def\XINT@rord@main #1#2#3#4#5#6#7#8#9% +\def\XINT_rord_main #1#2#3#4#5#6#7#8#9% {% - \XINT@strip@undef #9\XINT@rord@cleanup\xint@undef - \XINT@rord@main {#9#8#7#6#5#4#3#2#1}% + \xint_gob_til_xint_undef #9\XINT_rord_cleanup\xint_undef + \XINT_rord_main {#9#8#7#6#5#4#3#2#1}% }% -\def\XINT@rord@cleanup\xint@undef\XINT@rord@main #1#2\xint@UNDEF +\def\XINT_rord_cleanup\xint_undef\XINT_rord_main #1#2\xint_relax {% - \expandafter\space\XINT@strip@UNDEF #1% + \expandafter\space\xint_gob_til_xint_relax #1% }% -\def\XINT@strip@undef #1\xint@undef {}% -\def\XINT@strip@UNDEF #1\xint@UNDEF {}% % \end{macrocode} % \subsection{\csh{xintRevWithBraces}} -% \begin{verbatim} -% New with 1.06. Makes the expansion of its argument and then reverses the +% \lverb|New with 1.06. Makes the expansion of its argument and then reverses +% the % resulting tokens or braced tokens, adding a pair of braces to each (thus, -% maintaining it when it was already there.) -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% maintaining it when it was already there.) | % \begin{macrocode} -\def\xintRevWithBraces {\romannumeral0\xintrevwithbraces }% +\def\xintRevWithBraces {\romannumeral0\xintrevwithbraces }% +\def\xintRevWithBracesNoExpand {\romannumeral0\xintrevwithbracesnoexpand }% \def\xintrevwithbraces #1% {% - \expandafter\XINT@revwbr@prep\expandafter {\romannumeral-`0#1}% + \expandafter\XINT_revwbr_loop % #1 empty ok + \romannumeral-`0#1\xint_relax\xint_relax\xint_relax\xint_relax + \xint_relax\xint_relax\xint_relax\xint_relax\Z }% -\def\XINT@RWB {\romannumeral0\XINT@revwbr@prep }% -\def\XINT@revwbr@prep #1% +\def\xintrevwithbracesnoexpand #1% {% - \XINT@revwbr@loop - {}#1\xint@undef\xint@undef\xint@undef\xint@undef - \xint@undef\xint@undef\xint@undef\xint@undef\Z + \romannumeral0\XINT_revwbr_loop + #1\xint_relax\xint_relax\xint_relax\xint_relax + \xint_relax\xint_relax\xint_relax\xint_relax\Z }% -\def\XINT@revwbr@loop #1#2#3#4#5#6#7#8#9% +\def\XINT_revwbr_loop #1#2#3#4#5#6#7#8#9% {% - \XINT@strip@undef #9\XINT@revwbr@finish@a\xint@undef - \XINT@revwbr@loop {{#9}{#8}{#7}{#6}{#5}{#4}{#3}{#2}#1}% + \xint_gob_til_xint_relax #9\XINT_revwbr_finish_a\xint_relax + \XINT_revwbr_loop {{#9}{#8}{#7}{#6}{#5}{#4}{#3}{#2}#1}% }% -\def\XINT@revwbr@finish@a\xint@undef\XINT@revwbr@loop #1#2\Z +\def\XINT_revwbr_finish_a\xint_relax\XINT_revwbr_loop #1#2\Z {% - \XINT@revwbr@finish@b #2\R\R\R\R\R\R\R\Z #1% + \XINT_revwbr_finish_b #2\R\R\R\R\R\R\R\Z #1% }% -\def\XINT@revwbr@finish@b #1#2#3#4#5#6#7#8\Z +\def\XINT_revwbr_finish_b #1#2#3#4#5#6#7#8\Z {% - \xint@r #1\XINT@revwbr@finish@c 8% - #2\XINT@revwbr@finish@c 7% - #3\XINT@revwbr@finish@c 6% - #4\XINT@revwbr@finish@c 5% - #5\XINT@revwbr@finish@c 4% - #6\XINT@revwbr@finish@c 3% - #7\XINT@revwbr@finish@c 2% - \R\XINT@revwbr@finish@c 1\Z + \xint_gob_til_r + #1\XINT_revwbr_finish_c 8% + #2\XINT_revwbr_finish_c 7% + #3\XINT_revwbr_finish_c 6% + #4\XINT_revwbr_finish_c 5% + #5\XINT_revwbr_finish_c 4% + #6\XINT_revwbr_finish_c 3% + #7\XINT_revwbr_finish_c 2% + \R\XINT_revwbr_finish_c 1\Z }% -\def\XINT@revwbr@finish@c #1#2\Z +\def\XINT_revwbr_finish_c #1#2\Z {% \expandafter\expandafter\expandafter \space - \csname xint@gobble@\romannumeral #1\endcsname + \csname xint_gobble_\romannumeral #1\endcsname }% % \end{macrocode} % \subsection{\csh{xintLen}, \csh{xintLength}} -% \begin{verbatim} -% \xintLen -> fait l'expansion, ne compte PAS le signe -% \xintLength -> ne fait PAS l'expansion, compte le signe -% 1.06: improved code is roughly 20% faster than the one from earlier versions. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% \xintLen -> fait l'expansion, ne compte PAS le signe.$\ +% \xintLength -> ne fait PAS l'expansion, compte le signe.$\ +% 1.06: improved code is roughly 20$% faster than the one from earlier +% versions.| % \begin{macrocode} \def\xintiLen {\romannumeral0\xintilen }% \def\xintilen #1% {% - \expandafter\XINT@len@prep\expandafter {\romannumeral-`0#1}% + \expandafter\XINT_length_fork + \romannumeral-`0#1\xint_relax\xint_relax\xint_relax\xint_relax + \xint_relax\xint_relax\xint_relax\xint_relax\Z }% \let\xintLen\xintiLen \let\xintlen\xintilen -\def\XINT@Len {\romannumeral0\XINT@len@prep }% -\def\XINT@len@prep #1% +\def\XINT_Len #1% {% - \XINT@length@fork - #1\xint@undef\xint@undef\xint@undef\xint@undef - \xint@undef\xint@undef\xint@undef\xint@undef\Z + \romannumeral0\XINT_length_fork + #1\xint_relax\xint_relax\xint_relax\xint_relax + \xint_relax\xint_relax\xint_relax\xint_relax\Z }% -\def\XINT@length@fork #1% +\def\XINT_length_fork #1% {% - \expandafter\XINT@length@loop - \xint@UDsignfork + \expandafter\XINT_length_loop + \xint_UDsignfork #1\dummy {{0}}% -\dummy {{0}#1}% - \xint@UDkrof + \krof }% -\def\XINT@Length {\romannumeral0\XINT@length }% -\def\XINT@length #1% +\def\XINT_Length {\romannumeral0\XINT_length }% +\def\XINT_length #1% {% - \XINT@length@loop - {0}#1\xint@undef\xint@undef\xint@undef\xint@undef - \xint@undef\xint@undef\xint@undef\xint@undef\Z + \XINT_length_loop + {0}#1\xint_relax\xint_relax\xint_relax\xint_relax + \xint_relax\xint_relax\xint_relax\xint_relax\Z }% -\let\xintLength\XINT@Length -\def\XINT@length@loop #1#2#3#4#5#6#7#8#9% +\let\xintLength\XINT_Length +\def\XINT_length_loop #1#2#3#4#5#6#7#8#9% {% - \XINT@strip@undef #9\XINT@length@finish@a\xint@undef - \expandafter\XINT@length@loop\expandafter {\the\numexpr #1+8\relax}% + \xint_gob_til_xint_relax #9\XINT_length_finish_a\xint_relax + \expandafter\XINT_length_loop\expandafter {\the\numexpr #1+8\relax}% }% -\def\XINT@length@finish@a\xint@undef - \expandafter\XINT@length@loop\expandafter #1#2\Z +\def\XINT_length_finish_a\xint_relax + \expandafter\XINT_length_loop\expandafter #1#2\Z {% - \XINT@length@finish@b #2\W\W\W\W\W\W\W\Z {#1}% + \XINT_length_finish_b #2\W\W\W\W\W\W\W\Z {#1}% }% -\def\XINT@length@finish@b #1#2#3#4#5#6#7#8\Z +\def\XINT_length_finish_b #1#2#3#4#5#6#7#8\Z {% - \xint@w #1\XINT@length@finish@c 8% - #2\XINT@length@finish@c 7% - #3\XINT@length@finish@c 6% - #4\XINT@length@finish@c 5% - #5\XINT@length@finish@c 4% - #6\XINT@length@finish@c 3% - #7\XINT@length@finish@c 2% - \W\XINT@length@finish@c 1\Z + \xint_gob_til_w + #1\XINT_length_finish_c 8% + #2\XINT_length_finish_c 7% + #3\XINT_length_finish_c 6% + #4\XINT_length_finish_c 5% + #5\XINT_length_finish_c 4% + #6\XINT_length_finish_c 3% + #7\XINT_length_finish_c 2% + \W\XINT_length_finish_c 1\Z }% -\def\XINT@length@finish@c #1#2\Z #3{\expandafter\space\the\numexpr #3-#1\relax}% +\def\XINT_length_finish_c #1#2\Z #3% + {\expandafter\space\the\numexpr #3-#1\relax}% % \end{macrocode} % \subsection{\csh{xintCSVtoList}} -% \begin{verbatim} +% \lverb|& % \xintCSVtoList {a,b,..,z} returns {a}{b}...{z}. The comma separated list may -% be a macro which is first expanded. Each chain of spaces is collapsed -% into one space only. -% First included in release 1.06. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% be a macro which is first expanded. Each chain of spaces from the initial +% input will be collapsed as usual by the TeX initial scanning +% First included in release 1.06.| % \begin{macrocode} \def\xintCSVtoList {\romannumeral0\xintcsvtolist }% +% \def\xintCSVtoListNoExpand {\romannumeral0\xintcsvtolistnoexpand }% \def\xintcsvtolist #1% {% - \expandafter\XINT@csvtol@prep\expandafter {\romannumeral-`0#1}% -}% -\def\XINT@CSVtoL {\romannumeral0\XINT@csvtol@prep }% -\def\XINT@csvtol@prep #1% -{% - \XINT@csvtol@loop@a - {}#1,\xint@undef,\xint@undef,\xint@undef,\xint@undef,% - \xint@undef,\xint@undef,\xint@undef,\xint@undef,\Z -}% -\def\XINT@csvtol@loop@a #1#2,#3,#4,#5,#6,#7,#8,#9,% -{% - \XINT@strip@undef #9\XINT@csvtol@finish@a\xint@undef - \XINT@csvtol@loop@b {#1}{{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}}% -}% -\def\XINT@csvtol@loop@b #1#2{\XINT@csvtol@loop@a {#1#2}}% -\def\XINT@csvtol@finish@a\xint@undef\XINT@csvtol@loop@b #1#2#3\Z -{% - \XINT@csvtol@finish@b #3\R,\R,\R,\R,\R,\R,\R,\Z #2{#1}% -}% -\def\XINT@csvtol@finish@b #1,#2,#3,#4,#5,#6,#7,#8\Z -{% - \xint@r #1\XINT@csvtol@finish@c 8% - #2\XINT@csvtol@finish@c 7% - #3\XINT@csvtol@finish@c 6% - #4\XINT@csvtol@finish@c 5% - #5\XINT@csvtol@finish@c 4% - #6\XINT@csvtol@finish@c 3% - #7\XINT@csvtol@finish@c 2% - \R\XINT@csvtol@finish@c 1\Z -}% -\def\XINT@csvtol@finish@c #1#2\Z -{% - \csname XINT@csvtol@finish@d\romannumeral #1\endcsname -}% -\def\XINT@csvtol@finish@dviii #1#2#3#4#5#6#7#8#9{ #9}% -\def\XINT@csvtol@finish@dvii #1#2#3#4#5#6#7#8#9{ #9{#1}}% -\def\XINT@csvtol@finish@dvi #1#2#3#4#5#6#7#8#9{ #9{#1}{#2}}% -\def\XINT@csvtol@finish@dv #1#2#3#4#5#6#7#8#9{ #9{#1}{#2}{#3}}% -\def\XINT@csvtol@finish@div #1#2#3#4#5#6#7#8#9{ #9{#1}{#2}{#3}{#4}}% -\def\XINT@csvtol@finish@diii #1#2#3#4#5#6#7#8#9{ #9{#1}{#2}{#3}{#4}{#5}}% -\def\XINT@csvtol@finish@dii #1#2#3#4#5#6#7#8#9{ #9{#1}{#2}{#3}{#4}{#5}{#6}}% -\def\XINT@csvtol@finish@di #1#2#3#4#5#6#7#8#9{ #9{#1}{#2}{#3}{#4}{#5}{#6}{#7}}% + \expandafter\XINT_csvtol_loop_a\expandafter + {\expandafter}\romannumeral-`0#1% + ,\xint_undef,\xint_undef,\xint_undef,\xint_undef + ,\xint_undef,\xint_undef,\xint_undef,\xint_undef,\Z +}% +% \def\xintcsvtolistnoexpand #1% +% {% +% \romannumeral0\XINT_csvtol_loop_a +% {}#1,\xint_undef,\xint_undef,\xint_undef,\xint_undef +% ,\xint_undef,\xint_undef,\xint_undef,\xint_undef,\Z +% }% +\def\XINT_csvtol_loop_a #1#2,#3,#4,#5,#6,#7,#8,#9,% +{% + \xint_gob_til_xint_undef #9\XINT_csvtol_finish_a\xint_undef + \XINT_csvtol_loop_b {#1}{{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}}% +}% +\def\XINT_csvtol_loop_b #1#2{\XINT_csvtol_loop_a {#1#2}}% +\def\XINT_csvtol_finish_a\xint_undef\XINT_csvtol_loop_b #1#2#3\Z +{% + \XINT_csvtol_finish_b #3\R,\R,\R,\R,\R,\R,\R,\Z #2{#1}% +}% +\def\XINT_csvtol_finish_b #1,#2,#3,#4,#5,#6,#7,#8\Z +{% + \xint_gob_til_r + #1\XINT_csvtol_finish_c 8% + #2\XINT_csvtol_finish_c 7% + #3\XINT_csvtol_finish_c 6% + #4\XINT_csvtol_finish_c 5% + #5\XINT_csvtol_finish_c 4% + #6\XINT_csvtol_finish_c 3% + #7\XINT_csvtol_finish_c 2% + \R\XINT_csvtol_finish_c 1\Z +}% +\def\XINT_csvtol_finish_c #1#2\Z +{% + \csname XINT_csvtol_finish_d\romannumeral #1\endcsname +}% +\def\XINT_csvtol_finish_dviii #1#2#3#4#5#6#7#8#9{ #9}% +\def\XINT_csvtol_finish_dvii #1#2#3#4#5#6#7#8#9{ #9{#1}}% +\def\XINT_csvtol_finish_dvi #1#2#3#4#5#6#7#8#9{ #9{#1}{#2}}% +\def\XINT_csvtol_finish_dv #1#2#3#4#5#6#7#8#9{ #9{#1}{#2}{#3}}% +\def\XINT_csvtol_finish_div #1#2#3#4#5#6#7#8#9{ #9{#1}{#2}{#3}{#4}}% +\def\XINT_csvtol_finish_diii #1#2#3#4#5#6#7#8#9{ #9{#1}{#2}{#3}{#4}{#5}}% +\def\XINT_csvtol_finish_dii #1#2#3#4#5#6#7#8#9{ #9{#1}{#2}{#3}{#4}{#5}{#6}}% +\def\XINT_csvtol_finish_di #1#2#3#4#5#6#7#8#9% + { #9{#1}{#2}{#3}{#4}{#5}{#6}{#7}}% % \end{macrocode} % \subsection{\csh{xintListWithSep}} -% \begin{verbatim} -% \xintListWithSep {sep}{{a}{b}...{z}} returns a sep b sep .... sep z +% \lverb|& +% \xintListWithSep {sep}{{a}{b}...{z}} returns a sep b sep .... sep z$\ % Included in release 1.04. The 'sep' can be \par's: the macro % xintlistwithsep etc... are all declared long. 'sep' does not have to be a % single token. The list may be a macro it is first expanded. % 1.06 modifies the `feature' of returning sep if the list is empty: the output % is now empty in that case. (sep was not used for a one element list, but -% strangely it was for a zero-element list). -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% strangely it was for a zero-element list).| % \begin{macrocode} \def\xintListWithSep {\romannumeral0\xintlistwithsep }% +% \def\xintListWithSepNoExpand {\romannumeral0\xintlistwithsepnoexpand }% \long\def\xintlistwithsep #1#2% + {\expandafter\XINT_lws\expandafter {\romannumeral-`0#2}{#1}}% +\long\def\XINT_lws #1#2{\XINT_lws_start {#2}#1\Z }% +% \long\def\xintlistwithsepnoexpand #1#2% +% {\romannumeral0\XINT_lws_start {#1}#2\Z }% +\long\def\XINT_lws_start #1#2% {% - \expandafter\XINT@lws\expandafter {\romannumeral-`0#2}% - {#1}% + \xint_gob_til_z #2\XINT_lws_dont\Z + \XINT_lws_loop_a {#2}{#1}% }% -\long\def\XINT@LWS #1#2{\romannumeral0\XINT@lws@start {#1}#2\Z }% -\long\def\XINT@lws #1#2% +\long\def\XINT_lws_dont\Z\XINT_lws_loop_a #1#2{ }% +\long\def\XINT_lws_loop_a #1#2#3% {% - \XINT@lws@start {#2}#1\Z + \xint_gob_til_z #3\XINT_lws_end\Z + \XINT_lws_loop_b {#1}{#2#3}{#2}% }% -\long\def\XINT@lws@start #1#2% -{% - \xint@z #2\XINT@lws@dont\Z - \XINT@lws@loop@a {#2}{#1}% -}% -\long\def\XINT@lws@dont\Z\XINT@lws@loop@a #1#2{ }% -\long\def\XINT@lws@loop@a #1#2#3% -{% - \xint@z #3\XINT@lws@end\Z - \XINT@lws@loop@b {#1}{#2#3}{#2}% -}% -\long\def\XINT@lws@loop@b #1#2{\XINT@lws@loop@a {#1#2}}% -\long\def\XINT@lws@end\Z\XINT@lws@loop@b #1#2#3{ #1}% +\long\def\XINT_lws_loop_b #1#2{\XINT_lws_loop_a {#1#2}}% +\long\def\XINT_lws_end\Z\XINT_lws_loop_b #1#2#3{ #1}% % \end{macrocode} % \subsection{\csh{xintNthElt}} -% \begin{verbatim} +% \lverb|& % \xintNthElt {i}{{a}{b}...{z}} (or `tokens' abcd...z) returns the i th % element (one pair of braces removed). The list is first expanded. % First included in release 1.06. With 1.06a, a value of i = 0 (or negative) % makes the macro return the length. This is different from \xintLen which is % for numbers (checks sign) and different from \xintLength which does not first -% expand its argument. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% expand its argument.| % \begin{macrocode} -\def\xintNthElt {\romannumeral0\xintnthelt }% +\def\xintNthElt {\romannumeral0\xintnthelt }% +% \def\xintNthEltNoExpand {\romannumeral0\xintntheltnoexpand }% \def\xintnthelt #1#2% {% - \expandafter\XINT@nthelt\expandafter {\romannumeral-`0#2}% - {\numexpr #1\relax}% + \expandafter\XINT_nthelt\expandafter {\romannumeral-`0#2}% + {\numexpr #1\relax }% }% -\def\XINT@NthElt #1#2{\romannumeral0\XINT@nthelt {#2}{\numexpr #1\relax}}% -\def\XINT@nthelt #1#2% +% \def\xintntheltnoexpand #1#2% +% {% +% \romannumeral0\XINT_nthelt {#2}{\numexpr #1\relax}% +% }% +\def\XINT_nthelt #1#2% {% \ifnum #2>0 - \xint@afterfi {\XINT@nthelt@loop@a {#2}}% + \xint_afterfi {\XINT_nthelt_loop_a {#2}}% \else - \xint@afterfi {\XINT@length@loop {0}}% - \fi #1\xint@undef\xint@undef\xint@undef\xint@undef - \xint@undef\xint@undef\xint@undef\xint@undef\Z + \xint_afterfi {\XINT_length_loop {0}}% + \fi #1\xint_relax\xint_relax\xint_relax\xint_relax + \xint_relax\xint_relax\xint_relax\xint_relax\Z }% -\def\XINT@nthelt@loop@a #1% +\def\XINT_nthelt_loop_a #1% {% \ifnum #1>8 - \expandafter\XINT@nthelt@loop@b + \expandafter\XINT_nthelt_loop_b \else - \expandafter\XINT@nthelt@getit + \expandafter\XINT_nthelt_getit \fi {#1}% }% -\def\XINT@nthelt@loop@b #1#2#3#4#5#6#7#8#9% +\def\XINT_nthelt_loop_b #1#2#3#4#5#6#7#8#9% {% - \XINT@strip@undef #9\XINT@nthelt@silentend\xint@undef - \expandafter\XINT@nthelt@loop@a\expandafter{\the\numexpr #1-8\relax}% + \xint_gob_til_xint_relax #9\XINT_nthelt_silentend\xint_relax + \expandafter\XINT_nthelt_loop_a\expandafter{\the\numexpr #1-8\relax}% }% -\def\XINT@nthelt@silentend #1\Z { }% -\def\XINT@nthelt@getit #1% +\def\XINT_nthelt_silentend #1\Z { }% +\def\XINT_nthelt_getit #1% {% - \expandafter\expandafter\expandafter\XINT@nthelt@finish - \csname xint@gobble@\romannumeral\numexpr#1-1\endcsname + \expandafter\expandafter\expandafter\XINT_nthelt_finish + \csname xint_gobble_\romannumeral\numexpr#1-1\endcsname }% -\def\XINT@nthelt@finish #1#2\Z +\def\XINT_nthelt_finish #1#2\Z {% - \xint@UDwfork + \xint_UDwfork #1\dummy { }% \W\dummy { #1}% - \xint@UDkrof + \krof }% % \end{macrocode} % \subsection{\csh{xintApply}} -% \begin{verbatim} +% \lverb|& % \xintApply {\macro}{{a}{b}...{z}} returns {\macro{a}}...{\macro{b}} % where each instance of \macro is expanded. The list is first -% expanded. Introduced with release 1.04. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% expanded. Introduced with release 1.04| % \begin{macrocode} -\def\xintApply {\romannumeral0\xintapply }% +\def\xintApply {\romannumeral0\xintapply }% +% \def\xintApplyNoExpand {\romannumeral0\xintapplynoexpand }% \def\xintapply #1#2% {% - \expandafter\XINT@apply\expandafter {\romannumeral-`0#2}% + \expandafter\XINT_apply\expandafter {\romannumeral-`0#2}% {#1}% }% -\def\XINT@Apply #1#2{\romannumeral0\XINT@apply@loop@a {}{#1}#2\Z }% -\def\XINT@apply #1#2% +\def\XINT_apply #1#2{\XINT_apply_loop_a {}{#2}#1\Z }% +% \def\xintapplynoexpand #1#2{\romannumeral0\XINT_apply_loop_a {}{#1}#2\Z }% +\def\XINT_apply_loop_a #1#2#3% +{% + \xint_gob_til_z #3\XINT_apply_end\Z + \expandafter + \XINT_apply_loop_b + \expandafter {\romannumeral-`0#2{#3}}{#1}{#2}% +}% +\def\XINT_apply_loop_b #1#2{\XINT_apply_loop_a {#2{#1}}}% +\def\XINT_apply_end\Z\expandafter\XINT_apply_loop_b\expandafter #1#2#3{ #2}% +% \end{macrocode} +% \subsection{\csh{xintApplyUnbraced}} +% \lverb|& +% \xintApplyUnbraced {\macro}{{a}{b}...{z}} returns \macro{a}...\macro{b} +% where each instance of \macro is expanded using \romannumeral-`0. No braces +% are added: this allows for example a non-expandable \def in \macro, without +% having to do \gdef. The list is first expanded. Introduced with release 1.06b| +% \begin{macrocode} +\def\xintApplyUnbraced {\romannumeral0\xintapplyunbraced }% +% \def\xintApplyUnbracedNoExpand {\romannumeral0\xintapplyunbracednoexpand }% +\def\xintapplyunbraced #1#2% {% - \XINT@apply@loop@a {}{#2}#1\Z + \expandafter\XINT_applyunbr\expandafter {\romannumeral-`0#2}% + {#1}% }% -\def\XINT@apply@loop@a #1#2#3% +\def\XINT_applyunbr #1#2{\XINT_applyunbr_loop_a {}{#2}#1\Z }% +% \def\xintapplyunbracednoexpand #1#2% +% {\romannumeral0\XINT_applyunbr_loop_a {}{#1}#2\Z }% +\def\XINT_applyunbr_loop_a #1#2#3% {% - \xint@z #3\XINT@apply@end\Z - \expandafter - \XINT@apply@loop@b + \xint_gob_til_z #3\XINT_applyunbr_end\Z + \expandafter\XINT_applyunbr_loop_b \expandafter {\romannumeral-`0#2{#3}}{#1}{#2}% }% -\def\XINT@apply@loop@b #1#2{\XINT@apply@loop@a {#2{#1}}}% -\def\XINT@apply@end\Z\expandafter\XINT@apply@loop@b\expandafter #1#2#3{ #2}% +\def\XINT_applyunbr_loop_b #1#2{\XINT_applyunbr_loop_a {#2#1}}% +\def\XINT_applyunbr_end\Z + \expandafter\XINT_applyunbr_loop_b\expandafter #1#2#3{ #2}% % \end{macrocode} +% % \subsection{\csh{xintAssign},~\csh{xintAssignArray},~\csh{xintDigitsOf}} -% \begin{verbatim} -% \xintAssign {a}{b}..{z}\to\A\B...\Z, +% \lverb|& +% \xintAssign {a}{b}..{z}\to\A\B...\Z,$\ % \xintAssignArray {a}{b}..{z}\to\U +% % version 1.01 corrects an oversight in 1.0 related to the value of % \escapechar at the time of using \xintAssignArray or \xintRelaxArray % These macros are an exception in the xint bundle, they do not care at % all about compatibility with expansion-only contexts. -% In version 1.05a I suddenly see some incongruous \expandafter's in -% \XINT@assignarray@@@@end, which I remove. +% +% In version 1.05a I suddenly see some incongruous \expandafter's in (what is +% called now) \XINT_assignarray_end_c, which I remove. +% % Release 1.06 modifies the macros created by \xintAssignArray to feed their % argument to a \numexpr. +% % Release 1.06a detects an incredible typo in 1.01, (bad copy-paste from % \xintRelaxArray) which caused \xintAssignArray to use #1 rather than the #2 as % in the correct earlier 1.0 version!!! This went through undetected because -% \xint@arrayname, although weird, was still usable: the probability to +% \xint_arrayname, although weird, was still usable: the probability to % overwrite something was almost zero. The bug got finally revealed doing -% \xintAssignArray {}{}{}\to\Stuff. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \xintAssignArray {}{}{}\to\Stuff. +% +% With release 1.06b an empty argument (or expanding to empty) to +% \xintAssignArray is ok.| % \begin{macrocode} \def\xintAssign #1\to {% - \expandafter\XINT@assign@a\romannumeral-`0#1{}\to + \expandafter\XINT_assign_a\romannumeral-`0#1{}\to }% -\def\XINT@assign@a #1% attention to the # at the beginning of next line +\def\XINT_assign_a #1% attention to the # at the beginning of next line #{% - \def\xint@temp {#1}% - \ifx\empty\xint@temp - \expandafter\XINT@assign@b + \def\xint_temp {#1}% + \ifx\empty\xint_temp + \expandafter\XINT_assign_b \else - \expandafter\XINT@assign@B + \expandafter\XINT_assign_B \fi }% -\def\XINT@assign@b #1#2\to #3% +\def\XINT_assign_b #1#2\to #3% {% - \edef #3{#1}\def\xint@temp {#2}% - \ifx\empty\xint@temp + \edef #3{#1}\def\xint_temp {#2}% + \ifx\empty\xint_temp \else - \xint@afterfi{\XINT@assign@a #2\to }% + \xint_afterfi{\XINT_assign_a #2\to }% \fi }% -\def\XINT@assign@B #1\to #2% +\def\XINT_assign_B #1\to #2% {% - \edef #2{\xint@temp}% + \edef #2{\xint_temp}% }% \def\xintRelaxArray #1% {% - \edef\XINT@restoreescapechar {\escapechar\the\escapechar\relax}% + \edef\XINT_restoreescapechar {\escapechar\the\escapechar\relax}% \escapechar -1 - \edef\xint@arrayname {\string #1}% - \XINT@restoreescapechar - \expandafter\let\expandafter\xint@temp - \csname\xint@arrayname 0\endcsname + \edef\xint_arrayname {\string #1}% + \XINT_restoreescapechar + \expandafter\let\expandafter\xint_temp + \csname\xint_arrayname 0\endcsname \count 255 0 \loop \global\expandafter\let - \csname\xint@arrayname\the\count255\endcsname\relax - \ifnum \count 255 < \xint@temp + \csname\xint_arrayname\the\count255\endcsname\relax + \ifnum \count 255 < \xint_temp \advance\count 255 1 \repeat - \global\expandafter\let\csname\xint@arrayname 00\endcsname\relax + \global\expandafter\let\csname\xint_arrayname 00\endcsname\relax \global\let #1\relax }% -\def\xintAssignArray #1\to #2% +\def\xintAssignArray #1\to #2% 1.06b: #1 may now be empty {% - \edef\XINT@restoreescapechar {\escapechar\the\escapechar\relax}% + \edef\XINT_restoreescapechar {\escapechar\the\escapechar\relax }% \escapechar -1 - \edef\xint@arrayname {\string #2}% NOT #1! (amazing typo undetected during ages) - \XINT@restoreescapechar + \edef\xint_arrayname {\string #2}% + \XINT_restoreescapechar \count 255 0 - \expandafter - \XINT@assignarray@loop \romannumeral-`0#1\xint@undef - \csname\xint@arrayname 00\endcsname - \csname\xint@arrayname 0\endcsname - {\xint@arrayname}% + \expandafter\XINT_assignarray_loop \romannumeral-`0#1\xint_relax + \csname\xint_arrayname 00\endcsname + \csname\xint_arrayname 0\endcsname + {\xint_arrayname}% #2% }% -\def\XINT@assignarray@loop #1% +\def\XINT_assignarray_loop #1% {% - \def\xint@temp {#1}% - \ifx\xint@bracedundef\xint@temp - \edef\xint@temp{\the\count 255 }% - \expandafter\let\csname\xint@arrayname0\endcsname\xint@temp - \expandafter\XINT@assignarray@end + \def\xint_temp {#1}% + \ifx\xint_braced_xint_relax\xint_temp + \expandafter\edef\csname\xint_arrayname 0\endcsname{\the\count 255 }% + \expandafter\expandafter\expandafter\XINT_assignarray_end_a \else \advance\count 255 1 \expandafter\edef - \csname\xint@arrayname\the\count 255\endcsname{\xint@temp}% - \expandafter\XINT@assignarray@loop + \csname\xint_arrayname\the\count 255\endcsname{\xint_temp }% + \expandafter\XINT_assignarray_loop \fi }% -\def\XINT@assignarray@end {\expandafter\XINT@assignarray@@end }% -\def\XINT@assignarray@@end #1% +\def\XINT_assignarray_end_a #1% {% - \expandafter\XINT@assignarray@@@end\expandafter #1% + \expandafter\XINT_assignarray_end_b\expandafter #1% }% -\def\XINT@assignarray@@@end #1#2#3% +\def\XINT_assignarray_end_b #1#2#3% {% - \expandafter\XINT@assignarray@@@@end - \expandafter #1\expandafter #2\expandafter{#3}% + \expandafter\XINT_assignarray_end_c + \expandafter #1\expandafter #2\expandafter {#3}% }% -\def\XINT@assignarray@@@@end #1#2#3#4% +\def\XINT_assignarray_end_c #1#2#3#4% {% \def #4##1% {% - \romannumeral0% - \expandafter #1\expandafter{\the\numexpr ##1}% + \romannumeral0\expandafter #1\expandafter{\the\numexpr ##1}% }% \def #1##1% {% \ifnum ##1< 0 - \xint@afterfi {\xintError:ArrayIndexIsNegative\space 0}% + \xint_afterfi {\xintError:ArrayIndexIsNegative\space 0}% \else - \xint@afterfi {% + \xint_afterfi {% \ifnum ##1> #2 - \xint@afterfi {\xintError:ArrayIndexBeyondLimit\space 0}% + \xint_afterfi {\xintError:ArrayIndexBeyondLimit\space 0}% \else - \xint@afterfi + \xint_afterfi {\expandafter\expandafter\expandafter \space\csname #3##1\endcsname}% \fi}% @@ -4791,181 +4981,185 @@ first place. }% \let\xintDigitsOf\xintAssignArray % \end{macrocode} -% \subsection{\csh{XINT@RQ}} -% \begin{verbatim} +% \subsection{\csh{XINT\_RQ}} +% \lverb|& % cette macro renverse et ajoute le nombre minimal de zéros à -% la fin pour que la longueur soit alors multiple de 4 -% \romannumeral0\XINT@RQ {}\R\R\R\R\R\R\R\R\Z +% la fin pour que la longueur soit alors multiple de 4$\ +% \romannumeral0\XINT_RQ {}\R\R\R\R\R\R\R\R\Z$\ % Attention, ceci n'est utilisé que pour des chaînes de chiffres, et donc le % comportement avec des {..} ou autres espaces n'a fait l'objet d'aucune -% attention -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% attention | % \begin{macrocode} -\def\XINT@RQ #1#2#3#4#5#6#7#8#9% +\def\XINT_RQ #1#2#3#4#5#6#7#8#9% {% - \xint@r #9\XINT@RQ@end\R\XINT@RQ {#9#8#7#6#5#4#3#2#1}% + \xint_gob_til_r #9\XINT_RQ_end_a\R\XINT_RQ {#9#8#7#6#5#4#3#2#1}% }% -\def\XINT@RQ@end\R\XINT@RQ #1#2\Z +\def\XINT_RQ_end_a\R\XINT_RQ #1#2\Z {% - \XINT@RQ@end@ #1\Z + \XINT_RQ_end_b #1\Z }% -\def\XINT@RQ@end@ #1#2#3#4#5#6#7#8% +\def\XINT_RQ_end_b #1#2#3#4#5#6#7#8% {% - \xint@r #8\XINT@RQ@end@viii - #7\XINT@RQ@end@vii - #6\XINT@RQ@end@vi - #5\XINT@RQ@end@v - #4\XINT@RQ@end@iv - #3\XINT@RQ@end@iii - #2\XINT@RQ@end@ii - \R\XINT@RQ@end@i + \xint_gob_til_r + #8\XINT_RQ_end_viii + #7\XINT_RQ_end_vii + #6\XINT_RQ_end_vi + #5\XINT_RQ_end_v + #4\XINT_RQ_end_iv + #3\XINT_RQ_end_iii + #2\XINT_RQ_end_ii + \R\XINT_RQ_end_i \Z #2#3#4#5#6#7#8% }% -\def\XINT@RQ@end@viii #1\Z #2#3#4#5#6#7#8#9\Z { #9}% -\def\XINT@RQ@end@vii #1\Z #2#3#4#5#6#7#8#9\Z { #8#9000}% -\def\XINT@RQ@end@vi #1\Z #2#3#4#5#6#7#8#9\Z { #7#8#900}% -\def\XINT@RQ@end@v #1\Z #2#3#4#5#6#7#8#9\Z { #6#7#8#90}% -\def\XINT@RQ@end@iv #1\Z #2#3#4#5#6#7#8#9\Z { #5#6#7#8#9}% -\def\XINT@RQ@end@iii #1\Z #2#3#4#5#6#7#8#9\Z { #4#5#6#7#8#9000}% -\def\XINT@RQ@end@ii #1\Z #2#3#4#5#6#7#8#9\Z { #3#4#5#6#7#8#900}% -\def\XINT@RQ@end@i \Z #1#2#3#4#5#6#7#8\Z { #1#2#3#4#5#6#7#80}% +\def\XINT_RQ_end_viii #1\Z #2#3#4#5#6#7#8#9\Z { #9}% +\def\XINT_RQ_end_vii #1\Z #2#3#4#5#6#7#8#9\Z { #8#9000}% +\def\XINT_RQ_end_vi #1\Z #2#3#4#5#6#7#8#9\Z { #7#8#900}% +\def\XINT_RQ_end_v #1\Z #2#3#4#5#6#7#8#9\Z { #6#7#8#90}% +\def\XINT_RQ_end_iv #1\Z #2#3#4#5#6#7#8#9\Z { #5#6#7#8#9}% +\def\XINT_RQ_end_iii #1\Z #2#3#4#5#6#7#8#9\Z { #4#5#6#7#8#9000}% +\def\XINT_RQ_end_ii #1\Z #2#3#4#5#6#7#8#9\Z { #3#4#5#6#7#8#900}% +\def\XINT_RQ_end_i \Z #1#2#3#4#5#6#7#8\Z { #1#2#3#4#5#6#7#80}% % \end{macrocode} -% \subsection{\csh{XINT@cuz}} +% \subsection{\csh{XINT\_cuz}} % \begin{macrocode} -\def\xint@cleanupzeros@andstop #1#2#3#4% +\def\xint_cleanupzeros_andstop #1#2#3#4% {% \expandafter\space\the\numexpr #1#2#3#4\relax }% -\def\xint@cleanupzeros@nospace #1#2#3#4% +\def\xint_cleanupzeros_nospace #1#2#3#4% {% \the\numexpr #1#2#3#4\relax }% -\def\XINT@rev@andcuz #1% +\def\XINT_rev_andcuz #1% {% - \expandafter\xint@cleanupzeros@andstop - \romannumeral0\XINT@rord@main {}#1% - \xint@UNDEF - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@UNDEF + \expandafter\xint_cleanupzeros_andstop + \romannumeral0\XINT_rord_main {}#1% + \xint_relax + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_relax }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} +% \lverb|& % routine CleanUpZeros. Utilisée en particulier par la -% soustraction. -% INPUT: longueur **multiple de 4** (<-- ATTENTION) +% soustraction.$\ +% INPUT: longueur **multiple de 4** (<-- ATTENTION)$\ % OUTPUT: on a retiré tous les leading zéros, on n'est **plus* -% nécessairement de longueur 4n -% Délimiteur pour @main: \W\W\W\W\W\W\W\Z avec SEPT \W -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% nécessairement de longueur 4n$\ +% Délimiteur pour _main: \W\W\W\W\W\W\W\Z avec SEPT \W| % \begin{macrocode} -\def\XINT@cuz #1% +\def\XINT_cuz #1% {% - \XINT@cuz@loop #1\W\W\W\W\W\W\W\Z% + \XINT_cuz_loop #1\W\W\W\W\W\W\W\Z% }% -\def\XINT@cuz@loop #1#2#3#4#5#6#7#8% +\def\XINT_cuz_loop #1#2#3#4#5#6#7#8% {% - \xint@w #8\xint@cuz@enda\W - \xint@z #8\xint@cuz@endb\Z - \XINT@cuz@checka {#1#2#3#4#5#6#7#8}% + \xint_gob_til_w #8\xint_cuz_end_a\W + \xint_gob_til_z #8\xint_cuz_end_A\Z + \XINT_cuz_check_a {#1#2#3#4#5#6#7#8}% }% -\def\xint@cuz@enda #1\XINT@cuz@checka #2% +\def\xint_cuz_end_a #1\XINT_cuz_check_a #2% {% - \xint@cuz@endaa #2% + \xint_cuz_end_b #2% }% -\def\xint@cuz@endaa #1#2#3#4#5\Z +\def\xint_cuz_end_b #1#2#3#4#5\Z {% \expandafter\space\the\numexpr #1#2#3#4\relax }% -\def\xint@cuz@endb\Z\XINT@cuz@checka #1{ 0}% -\def\XINT@cuz@checka #1% +\def\xint_cuz_end_A \Z\XINT_cuz_check_a #1{ 0}% +\def\XINT_cuz_check_a #1% {% - \expandafter \XINT@cuz@checkb \the\numexpr #1\relax + \expandafter\XINT_cuz_check_b\the\numexpr #1\relax }% -\def\XINT@cuz@checkb #1% +\def\XINT_cuz_check_b #1% {% - \xint@zero #1\xint@cuz@backtoloop 0\XINT@cuz@Stop #1% + \xint_gob_til_zero #1\xint_cuz_backtoloop 0\XINT_cuz_stop #1% }% -\def\XINT@cuz@Stop #1\W #2\Z{ #1}% -\def\xint@cuz@backtoloop 0\XINT@cuz@Stop 0{\XINT@cuz@loop }% +\def\XINT_cuz_stop #1\W #2\Z{ #1}% +\def\xint_cuz_backtoloop 0\XINT_cuz_stop 0{\XINT_cuz_loop }% % \end{macrocode} -% \subsection{\csh{XINT@isOne}} -% Added in |1.03|. Attention: does not do any expansion. +% \subsection{\csh{XINT\_isOne}} +% \lverb|& +% Added in 1.03. Attention: does not do any expansion.| % \begin{macrocode} -\def\XINT@isOne #1{\romannumeral0\XINT@isone #1\W\Z }% -\def\XINT@isone #1#2% +\def\XINT_isOne #1{\romannumeral0\XINT_isone #1\W\Z }% +\def\XINT_isone #1#2% {% - \xint@one #1\XINT@isone@b 1\expandafter\space\expandafter 0\xint@z #2% + \xint_gob_til_one #1\XINT_isone_b 1% + \expandafter\space\expandafter 0\xint_gob_til_z #2% }% -\def\XINT@isone@b #1\xint@z #2% +\def\XINT_isone_b #1\xint_gob_til_z #2% {% - \xint@w #2\XINT@isone@yes\W\expandafter\space\expandafter 0\xint@z + \xint_gob_til_w #2\XINT_isone_yes \W + \expandafter\space\expandafter 0\xint_gob_til_z }% -\def\XINT@isone@yes #1\Z{ 1}% +\def\XINT_isone_yes #1\Z { 1}% % \end{macrocode} % \subsection{\csh{xintNum}} -% \begin{verbatim} -% For example \xintNum {----+-+++---+----000000000000003} +% \lverb|& +% For example \xintNum {----+-+++---+----000000000000003}$\ % 1.05 defines \xintiNum, which allows redefinition of \xintNum by xintfrac.sty -% \end{verbatim} +% Slightly modified in 1.06b (\R->\xint_relax) to avoid initial re-scan of +% input stack (while still allowing empty #1)| % \begin{macrocode} \def\xintiNum {\romannumeral0\xintinum }% \def\xintinum #1% {% - \expandafter\XINT@num\expandafter {\romannumeral-`0#1}% + \expandafter\XINT_num_loop + \romannumeral-`0#1\xint_relax\xint_relax\xint_relax\xint_relax + \xint_relax\xint_relax\xint_relax\xint_relax\Z }% \let\xintNum\xintiNum \let\xintnum\xintinum -\def\XINT@Num {\romannumeral0\XINT@num }% -\def\XINT@num #1{\XINT@num@loop #1\R\R\R\R\R\R\R\R\Z }% -\def\XINT@num@loop #1#2#3#4#5#6#7#8% +\def\XINT_num #1% +{% + \XINT_num_loop #1\xint_relax\xint_relax\xint_relax\xint_relax + \xint_relax\xint_relax\xint_relax\xint_relax\Z +}% +\def\XINT_num_loop #1#2#3#4#5#6#7#8% {% - \xint@r #8\XINT@num@end\R\XINT@num@NumEight #1#2#3#4#5#6#7#8% + \xint_gob_til_xint_relax #8\XINT_num_end\xint_relax + \XINT_num_NumEight #1#2#3#4#5#6#7#8% }% -\def\XINT@num@end\R\XINT@num@NumEight #1\R #2\Z +\def\XINT_num_end\xint_relax\XINT_num_NumEight #1\xint_relax #2\Z {% \expandafter\space\the\numexpr #1+0\relax }% -\def\XINT@num@NumEight #1#2#3#4#5#6#7#8% +\def\XINT_num_NumEight #1#2#3#4#5#6#7#8% {% - \ifnum \numexpr #1#2#3#4#5#6#7#8+0\relax = 0 - \xint@afterfi {\expandafter\XINT@num@keepsign@a + \ifnum \numexpr #1#2#3#4#5#6#7#8+0= 0 + \xint_afterfi {\expandafter\XINT_num_keepsign_a \the\numexpr #1#2#3#4#5#6#7#81\relax}% \else - \xint@afterfi {\expandafter\XINT@num@finish + \xint_afterfi {\expandafter\XINT_num_finish \the\numexpr #1#2#3#4#5#6#7#8\relax}% \fi }% -\def\XINT@num@keepsign@a #1% +\def\XINT_num_keepsign_a #1% {% - \xint@one#1\XINT@num@gobacktoloop 1\XINT@num@keepsign@b + \xint_gob_til_one#1\XINT_num_gobacktoloop 1\XINT_num_keepsign_b }% -\def\XINT@num@gobacktoloop 1\XINT@num@keepsign@b {\XINT@num@loop }% -\def\XINT@num@keepsign@b #1{\XINT@num@loop -}% -\def\XINT@num@finish #1\R #2\Z { #1}% +\def\XINT_num_gobacktoloop 1\XINT_num_keepsign_b {\XINT_num_loop }% +\def\XINT_num_keepsign_b #1{\XINT_num_loop -}% +\def\XINT_num_finish #1\xint_relax #2\Z { #1}% % \end{macrocode} % \subsection{\csh{xintSgn}} -% \begin{verbatim} -% Changed in 1.05. Earlier code was unnecessarily strange. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% Changed in 1.05. Earlier code was unnecessarily strange.| % \begin{macrocode} \def\xintiSgn {\romannumeral0\xintisgn }% \def\xintisgn #1% {% - \expandafter\XINT@sgn \romannumeral-`0#1\Z% + \expandafter\XINT_sgn \romannumeral-`0#1\Z% }% \let\xintSgn\xintiSgn \let\xintsgn\xintisgn -\def\XINT@Sgn #1{\romannumeral0\XINT@sgn #1\Z }% -\def\XINT@sgn #1#2\Z +\def\XINT_Sgn #1{\romannumeral0\XINT_sgn #1\Z }% +\def\XINT_sgn #1#2\Z {% - \xint@UDzerominusfork + \xint_UDzerominusfork #1-\dummy { 0}% 0#1\dummy { -1}% 0-\dummy { 1}% - \xint@UDkrof + \krof }% % \end{macrocode} % \subsection{\csh{xintOpp}} @@ -4973,17 +5167,17 @@ first place. \def\xintiOpp {\romannumeral0\xintiopp }% \def\xintiopp #1% {% - \expandafter\XINT@opp \romannumeral-`0#1% + \expandafter\XINT_opp \romannumeral-`0#1% }% \let\xintOpp\xintiOpp \let\xintopp\xintiopp -\def\XINT@Opp #1{\romannumeral0\XINT@opp #1}% -\def\XINT@opp #1% +\def\XINT_Opp #1{\romannumeral0\XINT_opp #1}% +\def\XINT_opp #1% {% - \xint@UDzerominusfork + \xint_UDzerominusfork #1-\dummy { 0}% zero 0#1\dummy { }% negative 0-\dummy { -#1}% positive - \xint@UDkrof + \krof }% % \end{macrocode} % \subsection{\csh{xintAbs}} @@ -4991,22 +5185,22 @@ first place. \def\xintiAbs {\romannumeral0\xintiabs }% \def\xintiabs #1% {% - \expandafter\XINT@abs \romannumeral-`0#1% + \expandafter\XINT_abs \romannumeral-`0#1% }% \let\xintAbs\xintiAbs \let\xintabs\xintiabs -\def\XINT@Abs #1{\romannumeral0\XINT@abs #1}% -\def\XINT@abs #1% +\def\XINT_Abs #1{\romannumeral0\XINT_abs #1}% +\def\XINT_abs #1% {% - \xint@UDsignfork + \xint_UDsignfork #1\dummy { }% -\dummy { #1}% - \xint@UDkrof + \krof }% % \end{macrocode} -% \begin{verbatim} -%----------------------------------------------------------------- -%----------------------------------------------------------------- -% ARITHMETIC OPERATIONS: ADDITION, SUBTRACTION, SUMS, +% \lverb|& +% -----------------------------------------------------------------$\ +% -----------------------------------------------------------------$\ +% ARITHMETIC OPERATIONS: ADDITION, SUBTRACTION, SUMS, % MULTIPLICATION, PRODUCTS, FACTORIAL, POWERS, EUCLIDEAN DIVISION. % % Release 1.03 re-organizes sub-routines to facilitate future developments: the @@ -5015,494 +5209,469 @@ first place. % the power routines. I am aware that the commenting is close to non-existent, % sorry about that. % -% ADDITION -% I: \XINT@add@A -% INPUT: -% \romannumeral0\XINT@add@A 0{}\W\X\Y\Z \W\X\Y\Z -% 1. et renversés -% 2. de longueur 4n (avec des leading zéros éventuels) -% 3. l'un des deux ne doit pas se terminer par 0000 +% ADDITION I: \XINT_add_A +% +% INPUT:$\ +% \romannumeral0\XINT_add_A 0{}\W\X\Y\Z \W\X\Y\Z$\ +% 1. et renversés $\ +% 2. de longueur 4n (avec des leading zéros éventuels)$\ +% 3. l'un des deux ne doit pas se terminer par 0000$\$relax % [Donc on peut avoir 0000 comme input si l'autre est >0 et ne se termine pas en % 0000 bien sûr]. On peut avoir l'un des deux vides. Mais alors l'autre ne doit % être ni vide ni 0000. -% OUTPUT: la somme +, order normal, plus sur 4n, pas de leading zeros -% La procédure est plus rapide lorsque est le plus court des deux. +% +% OUTPUT: la somme +, ordre normal, plus sur 4n, pas de leading zeros +% La procédure est plus rapide lorsque est le plus court des deux.$\ % Nota bene: (30 avril 2013). J'ai une version qui est deux fois plus rapide sur % des nombres d'environ 1000 chiffres chacun, et qui commence à être avantageuse % pour des nombres d'au moins 200 chiffres. Cependant il serait vraiment % compliqué d'en étendre l'utilisation aux emplois de l'addition dans les % autres routines, comme celle de multiplication ou celle de division; et son -% implémentation ajouterait au minimum la mesure de la longueur des summands. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% implémentation ajouterait au minimum la mesure de la longueur des summands.| % \begin{macrocode} -\def\XINT@add@A #1#2#3#4#5#6% +\def\XINT_add_A #1#2#3#4#5#6% {% - \xint@w #3\xint@add@az\W\XINT@add@AB #1{#3#4#5#6}{#2}% + \xint_gob_til_w #3\xint_add_az\W + \XINT_add_AB #1{#3#4#5#6}{#2}% }% -\def\xint@add@az\W\XINT@add@AB #1#2% +\def\xint_add_az\W\XINT_add_AB #1#2% {% - \XINT@add@AC@checkcarry #1% + \XINT_add_AC_checkcarry #1% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% ici #2 est prévu pour l'addition, mais attention il devra être renversé pour -% \numexpr. #3 = résultat partiel. #4 = chiffres qui restent. On vérifie si le -% deuxième nombre s'arrête. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% ici #2 est prévu pour l'addition, mais attention il devra être renversé +% pour \numexpr. #3 = résultat partiel. #4 = chiffres qui restent. On vérifie si +% le deuxième nombre s'arrête.| % \begin{macrocode} -\def\XINT@add@AB #1#2#3#4\W\X\Y\Z #5#6#7#8% +\def\XINT_add_AB #1#2#3#4\W\X\Y\Z #5#6#7#8% {% - \xint@w #5\xint@add@bz\W - \XINT@add@ABE #1#2{#8#7#6#5}{#3}#4\W\X\Y\Z + \xint_gob_til_w #5\xint_add_bz\W + \XINT_add_ABE #1#2{#8#7#6#5}{#3}#4\W\X\Y\Z }% -\def\XINT@add@ABE #1#2#3#4#5#6% +\def\XINT_add_ABE #1#2#3#4#5#6% {% - \expandafter\XINT@add@ABEA\the\numexpr #1+10#5#4#3#2+#6\relax.% + \expandafter\XINT_add_ABEA\the\numexpr #1+10#5#4#3#2+#6\relax.% }% -\def\XINT@add@ABEA #1#2#3.#4% +\def\XINT_add_ABEA #1#2#3.#4% {% - \XINT@add@A #2{#3#4}% + \XINT_add_A #2{#3#4}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} +% \lverb|& % ici le deuxième nombre est fini -% #6 part à la poubelle, #2#3#4#5 est le #2 dans \XINT@add@AB -% on ne vérifie pas la retenue cette fois, mais les fois suivantes -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% #6 part à la poubelle, #2#3#4#5 est le #2 dans \XINT_add_AB +% on ne vérifie pas la retenue cette fois, mais les fois suivantes| % \begin{macrocode} -\def\xint@add@bz\W\XINT@add@ABE #1#2#3#4#5#6% +\def\xint_add_bz\W\XINT_add_ABE #1#2#3#4#5#6% {% - \expandafter\XINT@add@CC\the\numexpr #1+10#5#4#3#2\relax.% + \expandafter\XINT_add_CC\the\numexpr #1+10#5#4#3#2\relax.% }% -\def\XINT@add@CC #1#2#3.#4% +\def\XINT_add_CC #1#2#3.#4% {% - \XINT@add@AC@checkcarry #2{#3#4}% on va examiner et \'eliminer #2 + \XINT_add_AC_checkcarry #2{#3#4}% on va examiner et \'eliminer #2 }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} +% \lverb|& % retenue plus chiffres qui restent de l'un des deux nombres. % #2 = résultat partiel -% #3#4#5#6 = summand, avec plus significatif à droite -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% #3#4#5#6 = summand, avec plus significatif à droite| % \begin{macrocode} -\def\XINT@add@AC@checkcarry #1% +\def\XINT_add_AC_checkcarry #1% {% - \xint@zero #1\xint@add@AC@nocarry 0\XINT@add@C + \xint_gob_til_zero #1\xint_add_AC_nocarry 0\XINT_add_C }% -\def\xint@add@AC@nocarry 0\XINT@add@C #1#2\W\X\Y\Z +\def\xint_add_AC_nocarry 0\XINT_add_C #1#2\W\X\Y\Z {% \expandafter - \xint@cleanupzeros@andstop + \xint_cleanupzeros_andstop \romannumeral0% - \XINT@rord@main {}#2% - \xint@UNDEF - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@UNDEF + \XINT_rord_main {}#2% + \xint_relax + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_relax #1% }% -\def\XINT@add@C #1#2#3#4#5% +\def\XINT_add_C #1#2#3#4#5% {% - \xint@w #2\xint@add@cz\W\XINT@add@CD {#5#4#3#2}{#1}%q + \xint_gob_til_w #2\xint_add_cz\W + \XINT_add_CD {#5#4#3#2}{#1}% }% -\def\XINT@add@CD #1% +\def\XINT_add_CD #1% {% - \expandafter\XINT@add@CC\the\numexpr 1+10#1\relax.% + \expandafter\XINT_add_CC\the\numexpr 1+10#1\relax.% }% -\def\xint@add@cz\W\XINT@add@CD #1#2{ 1#2}% +\def\xint_add_cz\W\XINT_add_CD #1#2{ 1#2}% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% Addition II: \XINT@addr@A. -% INPUT: -% \romannumeral0\XINT@addr@A 0{}\W\X\Y\Z \W\X\Y\Z -% Comme \XINT@add@A, la différence principale c'est qu'elle donne son résultat +% \lverb|Addition II: \XINT_addr_A.$\ +% INPUT: \romannumeral0\XINT_addr_A 0{}\W\X\Y\Z \W\X\Y\Z +% +% Comme \XINT_add_A, la différence principale c'est qu'elle donne son résultat % aussi *sur 4n*, renversé. De plus cette variante accepte que l'un ou même les -% deux inputs soient vides. -% Utilisé par la sommation et par la division (pour les quotients). Et aussi -% par la multiplication d'ailleurs. -% INPUT: comme pour \XINT@add@A -% 1. et renversés -% 2. de longueur 4n (avec des leading zéros éventuels) -% 3. l'un des deux ne doit pas se terminer par 0000 -% OUTPUT: la somme +, *aussi renversée* et *sur 4n* -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% deux inputs soient vides. Utilisé par la sommation et par la division (pour +% les quotients). Et aussi par la multiplication d'ailleurs.$\ +% INPUT: comme pour \XINT_add_A$\ +% 1. et renversés $\ +% 2. de longueur 4n (avec des leading zéros éventuels)$\ +% 3. l'un des deux ne doit pas se terminer par 0000$\ +% OUTPUT: la somme +, *aussi renversée* et *sur 4n*| % \begin{macrocode} -\def\XINT@addr@A #1#2#3#4#5#6% +\def\XINT_addr_A #1#2#3#4#5#6% {% - \xint@w #3\xint@addr@az\W\XINT@addr@B #1{#3#4#5#6}{#2}% + \xint_gob_til_w #3\xint_addr_az\W + \XINT_addr_B #1{#3#4#5#6}{#2}% }% -\def\xint@addr@az\W\XINT@addr@B #1#2% +\def\xint_addr_az\W\XINT_addr_B #1#2% {% - \XINT@addr@AC@checkcarry #1% + \XINT_addr_AC_checkcarry #1% }% -\def\XINT@addr@B #1#2#3#4\W\X\Y\Z #5#6#7#8% +\def\XINT_addr_B #1#2#3#4\W\X\Y\Z #5#6#7#8% {% - \xint@w #5\xint@addr@bz\W\XINT@addr@E #1#2{#8#7#6#5}{#3}#4\W\X\Y\Z + \xint_gob_til_w #5\xint_addr_bz\W + \XINT_addr_E #1#2{#8#7#6#5}{#3}#4\W\X\Y\Z }% -\def\XINT@addr@E #1#2#3#4#5#6% +\def\XINT_addr_E #1#2#3#4#5#6% {% - \expandafter\XINT@addr@ABEA\the\numexpr #1+10#5#4#3#2+#6\relax + \expandafter\XINT_addr_ABEA\the\numexpr #1+10#5#4#3#2+#6\relax }% -\def\XINT@addr@ABEA #1#2#3#4#5#6#7% +\def\XINT_addr_ABEA #1#2#3#4#5#6#7% {% - \XINT@addr@A #2{#7#6#5#4#3}% + \XINT_addr_A #2{#7#6#5#4#3}% }% -\def\xint@addr@bz\W\XINT@addr@E #1#2#3#4#5#6% +\def\xint_addr_bz\W\XINT_addr_E #1#2#3#4#5#6% {% - \expandafter\XINT@addr@CC\the\numexpr #1+10#5#4#3#2\relax + \expandafter\XINT_addr_CC\the\numexpr #1+10#5#4#3#2\relax }% -\def\XINT@addr@CC #1#2#3#4#5#6#7% +\def\XINT_addr_CC #1#2#3#4#5#6#7% {% - \XINT@addr@AC@checkcarry #2{#7#6#5#4#3}% + \XINT_addr_AC_checkcarry #2{#7#6#5#4#3}% }% -\def\XINT@addr@AC@checkcarry #1% +\def\XINT_addr_AC_checkcarry #1% {% - \xint@zero #1\xint@addr@AC@nocarry 0\XINT@addr@C + \xint_gob_til_zero #1\xint_addr_AC_nocarry 0\XINT_addr_C }% -\def\xint@addr@AC@nocarry 0\XINT@addr@C #1#2\W\X\Y\Z { #1#2}% -\def\XINT@addr@C #1#2#3#4#5% +\def\xint_addr_AC_nocarry 0\XINT_addr_C #1#2\W\X\Y\Z { #1#2}% +\def\XINT_addr_C #1#2#3#4#5% {% - \xint@w #2\xint@addr@cz\W\XINT@addr@D {#5#4#3#2}{#1}% + \xint_gob_til_w #2\xint_addr_cz\W + \XINT_addr_D {#5#4#3#2}{#1}% }% -\def\XINT@addr@D #1% +\def\XINT_addr_D #1% {% - \expandafter\XINT@addr@CC\the\numexpr 1+10#1\relax + \expandafter\XINT_addr_CC\the\numexpr 1+10#1\relax }% -\def\xint@addr@cz\W\XINT@addr@D #1#2{ #21000}% +\def\xint_addr_cz\W\XINT_addr_D #1#2{ #21000}% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% ADDITION III, \XINT@addm@A -% INPUT: -% \romannumeral0\XINT@addm@A 0{}\W\X\Y\Z \W\X\Y\Z -% 1. et renversés -% 2. de longueur 4n ; non -% 3. est *garanti au moins aussi long* que +% \lverb|ADDITION III, \XINT_addm_A$\ +% INPUT:\romannumeral0\XINT_addm_A 0{}\W\X\Y\Z \W\X\Y\Z$\ +% 1. et renversés$\ +% 2. de longueur 4n ; non$\ +% 3. est *garanti au moins aussi long* que $\ % OUTPUT: la somme +, ordre normal, pas sur 4n, leading zeros retirés. -% Utilisé par la multiplication. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% Utilisé par la multiplication.| % \begin{macrocode} -\def\XINT@addm@A #1#2#3#4#5#6% +\def\XINT_addm_A #1#2#3#4#5#6% {% - \xint@w #3\xint@addm@az\W\XINT@addm@AB #1{#3#4#5#6}{#2}% + \xint_gob_til_w #3\xint_addm_az\W + \XINT_addm_AB #1{#3#4#5#6}{#2}% }% -\def\xint@addm@az\W\XINT@addm@AB #1#2% +\def\xint_addm_az\W\XINT_addm_AB #1#2% {% - \XINT@addm@AC@checkcarry #1% + \XINT_addm_AC_checkcarry #1% }% -\def\XINT@addm@AB #1#2#3#4\W\X\Y\Z #5#6#7#8% +\def\XINT_addm_AB #1#2#3#4\W\X\Y\Z #5#6#7#8% {% - \XINT@addm@ABE #1#2{#8#7#6#5}{#3}#4\W\X\Y\Z + \XINT_addm_ABE #1#2{#8#7#6#5}{#3}#4\W\X\Y\Z }% -\def\XINT@addm@ABE #1#2#3#4#5#6% +\def\XINT_addm_ABE #1#2#3#4#5#6% {% - \expandafter\XINT@addm@ABEA\the\numexpr #1+10#5#4#3#2+#6\relax.% + \expandafter\XINT_addm_ABEA\the\numexpr #1+10#5#4#3#2+#6\relax.% }% -\def\XINT@addm@ABEA #1#2#3.#4% +\def\XINT_addm_ABEA #1#2#3.#4% {% - \XINT@addm@A #2{#3#4}% + \XINT_addm_A #2{#3#4}% }% -\def\XINT@addm@AC@checkcarry #1% +\def\XINT_addm_AC_checkcarry #1% {% - \xint@zero #1\xint@addm@AC@nocarry 0\XINT@addm@C + \xint_gob_til_zero #1\xint_addm_AC_nocarry 0\XINT_addm_C }% -\def\xint@addm@AC@nocarry 0\XINT@addm@C #1#2\W\X\Y\Z +\def\xint_addm_AC_nocarry 0\XINT_addm_C #1#2\W\X\Y\Z {% \expandafter - \xint@cleanupzeros@andstop + \xint_cleanupzeros_andstop \romannumeral0% - \XINT@rord@main {}#2% - \xint@UNDEF - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@UNDEF + \XINT_rord_main {}#2% + \xint_relax + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_relax #1% }% -\def\XINT@addm@C #1#2#3#4#5% +\def\XINT_addm_C #1#2#3#4#5% {% - \xint@w - #5\xint@addm@cw - #4\xint@addm@cx - #3\xint@addm@cy - #2\xint@addm@cz - \W\XINT@addm@CD {#5#4#3#2}{#1}% + \xint_gob_til_w + #5\xint_addm_cw + #4\xint_addm_cx + #3\xint_addm_cy + #2\xint_addm_cz + \W\XINT_addm_CD {#5#4#3#2}{#1}% }% -\def\XINT@addm@CD #1% +\def\XINT_addm_CD #1% {% - \expandafter\XINT@addm@CC\the\numexpr 1+10#1\relax.% + \expandafter\XINT_addm_CC\the\numexpr 1+10#1\relax.% }% -\def\XINT@addm@CC #1#2#3.#4% +\def\XINT_addm_CC #1#2#3.#4% {% - \XINT@addm@AC@checkcarry #2{#3#4}% + \XINT_addm_AC_checkcarry #2{#3#4}% }% -\def\xint@addm@cw - #1\xint@addm@cx - #2\xint@addm@cy - #3\xint@addm@cz - \W\XINT@addm@CD +\def\xint_addm_cw + #1\xint_addm_cx + #2\xint_addm_cy + #3\xint_addm_cz + \W\XINT_addm_CD {% - \expandafter\XINT@addm@CDw\the\numexpr 1+#1#2#3\relax.% + \expandafter\XINT_addm_CDw\the\numexpr 1+#1#2#3\relax.% }% -\def\XINT@addm@CDw #1.#2#3\X\Y\Z +\def\XINT_addm_CDw #1.#2#3\X\Y\Z {% - \XINT@addm@end #1#3% + \XINT_addm_end #1#3% }% -\def\xint@addm@cx - #1\xint@addm@cy - #2\xint@addm@cz - \W\XINT@addm@CD +\def\xint_addm_cx + #1\xint_addm_cy + #2\xint_addm_cz + \W\XINT_addm_CD {% - \expandafter\XINT@addm@CDx\the\numexpr 1+#1#2\relax.% + \expandafter\XINT_addm_CDx\the\numexpr 1+#1#2\relax.% }% -\def\XINT@addm@CDx #1.#2#3\Y\Z +\def\XINT_addm_CDx #1.#2#3\Y\Z {% - \XINT@addm@end #1#3% + \XINT_addm_end #1#3% }% -\def\xint@addm@cy - #1\xint@addm@cz - \W\XINT@addm@CD +\def\xint_addm_cy + #1\xint_addm_cz + \W\XINT_addm_CD {% - \expandafter\XINT@addm@CDy\the\numexpr 1+#1\relax.% + \expandafter\XINT_addm_CDy\the\numexpr 1+#1\relax.% }% -\def\XINT@addm@CDy #1.#2#3\Z +\def\XINT_addm_CDy #1.#2#3\Z {% - \XINT@addm@end #1#3% + \XINT_addm_end #1#3% }% -\def\xint@addm@cz\W\XINT@addm@CD #1#2#3{\XINT@addm@end #1#3}% -\def\XINT@addm@end #1#2#3#4#5% +\def\xint_addm_cz\W\XINT_addm_CD #1#2#3{\XINT_addm_end #1#3}% +\def\XINT_addm_end #1#2#3#4#5% {\expandafter\space\the\numexpr #1#2#3#4#5\relax}% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% ADDITION IV, variante \XINT@addp@A +% \lverb|ADDITION IV, variante \XINT_addp_A$\ % INPUT: -% \romannumeral0\XINT@addp@A 0{}\W\X\Y\Z \W\X\Y\Z -% 1. et renversés -% 2. de longueur 4n ; non -% 3. est *garanti au moins aussi long* que +% \romannumeral0\XINT_addp_A 0{}\W\X\Y\Z \W\X\Y\Z$\ +% 1. et renversés$\ +% 2. de longueur 4n ; non$\ +% 3. est *garanti au moins aussi long* que $\ % OUTPUT: la somme +, dans l'ordre renversé, sur 4n, et en faisant % attention de ne pas terminer en 0000. -% Utilisé par la multiplication servant pour le calcul des puissances. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% Utilisé par la multiplication servant pour le calcul des puissances.| % \begin{macrocode} -\def\XINT@addp@A #1#2#3#4#5#6% +\def\XINT_addp_A #1#2#3#4#5#6% {% - \xint@w #3\xint@addp@az\W\XINT@addp@AB #1{#3#4#5#6}{#2}% + \xint_gob_til_w #3\xint_addp_az\W + \XINT_addp_AB #1{#3#4#5#6}{#2}% }% -\def\xint@addp@az\W\XINT@addp@AB #1#2% +\def\xint_addp_az\W\XINT_addp_AB #1#2% {% - \XINT@addp@AC@checkcarry #1% + \XINT_addp_AC_checkcarry #1% }% -\def\XINT@addp@AC@checkcarry #1% +\def\XINT_addp_AC_checkcarry #1% {% - \xint@zero #1\xint@addp@AC@nocarry 0\XINT@addp@C + \xint_gob_til_zero #1\xint_addp_AC_nocarry 0\XINT_addp_C }% -\def\xint@addp@AC@nocarry 0\XINT@addp@C +\def\xint_addp_AC_nocarry 0\XINT_addp_C {% - \XINT@addp@F + \XINT_addp_F }% -\def\XINT@addp@AB #1#2#3#4\W\X\Y\Z #5#6#7#8% +\def\XINT_addp_AB #1#2#3#4\W\X\Y\Z #5#6#7#8% {% - \XINT@addp@ABE #1#2{#8#7#6#5}{#3}#4\W\X\Y\Z + \XINT_addp_ABE #1#2{#8#7#6#5}{#3}#4\W\X\Y\Z }% -\def\XINT@addp@ABE #1#2#3#4#5#6% +\def\XINT_addp_ABE #1#2#3#4#5#6% {% - \expandafter\XINT@addp@ABEA\the\numexpr #1+10#5#4#3#2+#6\relax + \expandafter\XINT_addp_ABEA\the\numexpr #1+10#5#4#3#2+#6\relax }% -\def\XINT@addp@ABEA #1#2#3#4#5#6#7% +\def\XINT_addp_ABEA #1#2#3#4#5#6#7% {% - \XINT@addp@A #2{#7#6#5#4#3}%<-- attention on met donc \`a droite + \XINT_addp_A #2{#7#6#5#4#3}%<-- attention on met donc \`a droite }% -\def\XINT@addp@C #1#2#3#4#5% +\def\XINT_addp_C #1#2#3#4#5% {% - \xint@w - #5\xint@addp@cw - #4\xint@addp@cx - #3\xint@addp@cy - #2\xint@addp@cz - \W\XINT@addp@CD {#5#4#3#2}{#1}% + \xint_gob_til_w + #5\xint_addp_cw + #4\xint_addp_cx + #3\xint_addp_cy + #2\xint_addp_cz + \W\XINT_addp_CD {#5#4#3#2}{#1}% }% -\def\XINT@addp@CD #1% +\def\XINT_addp_CD #1% {% - \expandafter\XINT@addp@CC\the\numexpr 1+10#1\relax + \expandafter\XINT_addp_CC\the\numexpr 1+10#1\relax }% -\def\XINT@addp@CC #1#2#3#4#5#6#7% +\def\XINT_addp_CC #1#2#3#4#5#6#7% {% - \XINT@addp@AC@checkcarry #2{#7#6#5#4#3}% + \XINT_addp_AC_checkcarry #2{#7#6#5#4#3}% }% -\def\xint@addp@cw - #1\xint@addp@cx - #2\xint@addp@cy - #3\xint@addp@cz - \W\XINT@addp@CD +\def\xint_addp_cw + #1\xint_addp_cx + #2\xint_addp_cy + #3\xint_addp_cz + \W\XINT_addp_CD {% - \expandafter\XINT@addp@CDw\the\numexpr 1+10#1#2#3\relax + \expandafter\XINT_addp_CDw\the\numexpr 1+10#1#2#3\relax }% -\def\XINT@addp@CDw #1#2#3#4#5#6% +\def\XINT_addp_CDw #1#2#3#4#5#6% {% - \xint@quatrezeros #2#3#4#5\XINT@addp@endDw@zeros - 0000\XINT@addp@endDw #2#3#4#5% + \xint_gob_til_zeros_iv #2#3#4#5\XINT_addp_endDw_zeros + 0000\XINT_addp_endDw #2#3#4#5% }% -\def\XINT@addp@endDw@zeros 0000\XINT@addp@endDw 0000#1\X\Y\Z{ #1}% -\def\XINT@addp@endDw #1#2#3#4#5\X\Y\Z{ #5#4#3#2#1}% -\def\xint@addp@cx - #1\xint@addp@cy - #2\xint@addp@cz - \W\XINT@addp@CD +\def\XINT_addp_endDw_zeros 0000\XINT_addp_endDw 0000#1\X\Y\Z{ #1}% +\def\XINT_addp_endDw #1#2#3#4#5\X\Y\Z{ #5#4#3#2#1}% +\def\xint_addp_cx + #1\xint_addp_cy + #2\xint_addp_cz + \W\XINT_addp_CD {% - \expandafter\XINT@addp@CDx\the\numexpr 1+100#1#2\relax + \expandafter\XINT_addp_CDx\the\numexpr 1+100#1#2\relax }% -\def\XINT@addp@CDx #1#2#3#4#5#6% +\def\XINT_addp_CDx #1#2#3#4#5#6% {% - \xint@quatrezeros #2#3#4#5\XINT@addp@endDx@zeros - 0000\XINT@addp@endDx #2#3#4#5% + \xint_gob_til_zeros_iv #2#3#4#5\XINT_addp_endDx_zeros + 0000\XINT_addp_endDx #2#3#4#5% }% -\def\XINT@addp@endDx@zeros 0000\XINT@addp@endDx 0000#1\Y\Z{ #1}% -\def\XINT@addp@endDx #1#2#3#4#5\Y\Z{ #5#4#3#2#1}% -\def\xint@addp@cy - #1\xint@addp@cz - \W\XINT@addp@CD +\def\XINT_addp_endDx_zeros 0000\XINT_addp_endDx 0000#1\Y\Z{ #1}% +\def\XINT_addp_endDx #1#2#3#4#5\Y\Z{ #5#4#3#2#1}% +\def\xint_addp_cy + #1\xint_addp_cz + \W\XINT_addp_CD {% - \expandafter\XINT@addp@CDy\the\numexpr 1+1000#1\relax + \expandafter\XINT_addp_CDy\the\numexpr 1+1000#1\relax }% -\def\XINT@addp@CDy #1#2#3#4#5#6% +\def\XINT_addp_CDy #1#2#3#4#5#6% {% - \xint@quatrezeros #2#3#4#5\XINT@addp@endDy@zeros - 0000\XINT@addp@endDy #2#3#4#5% + \xint_gob_til_zeros_iv #2#3#4#5\XINT_addp_endDy_zeros + 0000\XINT_addp_endDy #2#3#4#5% }% -\def\XINT@addp@endDy@zeros 0000\XINT@addp@endDy 0000#1\Z{ #1}% -\def\XINT@addp@endDy #1#2#3#4#5\Z{ #5#4#3#2#1}% -\def\xint@addp@cz\W\XINT@addp@CD #1#2{ #21000}% -\def\XINT@addp@F #1#2#3#4#5% +\def\XINT_addp_endDy_zeros 0000\XINT_addp_endDy 0000#1\Z{ #1}% +\def\XINT_addp_endDy #1#2#3#4#5\Z{ #5#4#3#2#1}% +\def\xint_addp_cz\W\XINT_addp_CD #1#2{ #21000}% +\def\XINT_addp_F #1#2#3#4#5% {% - \xint@w - #5\xint@addp@Gw - #4\xint@addp@Gx - #3\xint@addp@Gy - #2\xint@addp@Gz - \W\XINT@addp@G {#2#3#4#5}{#1}% + \xint_gob_til_w + #5\xint_addp_Gw + #4\xint_addp_Gx + #3\xint_addp_Gy + #2\xint_addp_Gz + \W\XINT_addp_G {#2#3#4#5}{#1}% }% -\def\XINT@addp@G #1#2% +\def\XINT_addp_G #1#2% {% - \XINT@addp@F {#2#1}% + \XINT_addp_F {#2#1}% }% -\def\xint@addp@Gw - #1\xint@addp@Gx - #2\xint@addp@Gy - #3\xint@addp@Gz - \W\XINT@addp@G #4% +\def\xint_addp_Gw + #1\xint_addp_Gx + #2\xint_addp_Gy + #3\xint_addp_Gz + \W\XINT_addp_G #4% {% - \xint@quatrezeros #3#2#10\XINT@addp@endGw@zeros - 0000\XINT@addp@endGw #3#2#10% + \xint_gob_til_zeros_iv #3#2#10\XINT_addp_endGw_zeros + 0000\XINT_addp_endGw #3#2#10% }% -\def\XINT@addp@endGw@zeros 0000\XINT@addp@endGw 0000#1\X\Y\Z{ #1}% -\def\XINT@addp@endGw #1#2#3#4#5\X\Y\Z{ #5#1#2#3#4}% -\def\xint@addp@Gx - #1\xint@addp@Gy - #2\xint@addp@Gz - \W\XINT@addp@G #3% +\def\XINT_addp_endGw_zeros 0000\XINT_addp_endGw 0000#1\X\Y\Z{ #1}% +\def\XINT_addp_endGw #1#2#3#4#5\X\Y\Z{ #5#1#2#3#4}% +\def\xint_addp_Gx + #1\xint_addp_Gy + #2\xint_addp_Gz + \W\XINT_addp_G #3% {% - \xint@quatrezeros #2#100\XINT@addp@endGx@zeros - 0000\XINT@addp@endGx #2#100% + \xint_gob_til_zeros_iv #2#100\XINT_addp_endGx_zeros + 0000\XINT_addp_endGx #2#100% }% -\def\XINT@addp@endGx@zeros 0000\XINT@addp@endGx 0000#1\Y\Z{ #1}% -\def\XINT@addp@endGx #1#2#3#4#5\Y\Z{ #5#1#2#3#4}% -\def\xint@addp@Gy - #1\xint@addp@Gz - \W\XINT@addp@G #2% +\def\XINT_addp_endGx_zeros 0000\XINT_addp_endGx 0000#1\Y\Z{ #1}% +\def\XINT_addp_endGx #1#2#3#4#5\Y\Z{ #5#1#2#3#4}% +\def\xint_addp_Gy + #1\xint_addp_Gz + \W\XINT_addp_G #2% {% - \xint@quatrezeros #1000\XINT@addp@endGy@zeros - 0000\XINT@addp@endGy #1000% + \xint_gob_til_zeros_iv #1000\XINT_addp_endGy_zeros + 0000\XINT_addp_endGy #1000% }% -\def\XINT@addp@endGy@zeros 0000\XINT@addp@endGy 0000#1\Z{ #1}% -\def\XINT@addp@endGy #1#2#3#4#5\Z{ #5#1#2#3#4}% -\def\xint@addp@Gz\W\XINT@addp@G #1#2{ #2}% +\def\XINT_addp_endGy_zeros 0000\XINT_addp_endGy 0000#1\Z{ #1}% +\def\XINT_addp_endGy #1#2#3#4#5\Z{ #5#1#2#3#4}% +\def\xint_addp_Gz\W\XINT_addp_G #1#2{ #2}% % \end{macrocode} % \subsection{\csh{xintAdd}} % \begin{macrocode} \def\xintiAdd {\romannumeral0\xintiadd }% \def\xintiadd #1% {% - \expandafter\xint@add\expandafter{\romannumeral-`0#1}% + \expandafter\xint_add\expandafter{\romannumeral-`0#1}% }% \let\xintAdd\xintiAdd \let\xintadd\xintiadd -\def\xint@add #1#2% +\def\xint_add #1#2% {% - \expandafter\XINT@add@fork \romannumeral-`0#2\Z #1\Z + \expandafter\XINT_add_fork \romannumeral-`0#2\Z #1\Z }% -\def\XINT@Add #1#2{\romannumeral0\XINT@add@fork #2\Z #1\Z }% -\def\XINT@add #1#2{\XINT@add@fork #2\Z #1\Z }% +\def\XINT_Add #1#2{\romannumeral0\XINT_add_fork #2\Z #1\Z }% +\def\XINT_add #1#2{\XINT_add_fork #2\Z #1\Z }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% ADDITION +% \lverb|ADDITION % Ici #1#2 vient du *deuxième* argument de \xintAdd et #3#4 donc du *premier* -% [algo plus efficace lorsque le premier est plus long que le second] -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% [algo plus efficace lorsque le premier est plus long que le second]| % \begin{macrocode} -\def\XINT@add@fork #1#2\Z #3#4\Z +\def\XINT_add_fork #1#2\Z #3#4\Z {% - \xint@UDzerofork - #1\dummy \XINT@add@secondiszero - #3\dummy \XINT@add@firstiszero + \xint_UDzerofork + #1\dummy \XINT_add_secondiszero + #3\dummy \XINT_add_firstiszero 0\dummy - {\xint@UDsignsfork - #1#3\dummy \XINT@add@minusminus % #1 = #3 = - - #1-\dummy \XINT@add@minusplus % #1 = - - #3-\dummy \XINT@add@plusminus % #3 = - - --\dummy \XINT@add@plusplus - \xint@UDkrof }% - \xint@UDkrof + {\xint_UDsignsfork + #1#3\dummy \XINT_add_minusminus % #1 = #3 = - + #1-\dummy \XINT_add_minusplus % #1 = - + #3-\dummy \XINT_add_plusminus % #3 = - + --\dummy \XINT_add_plusplus + \krof }% + \krof {#2}{#4}#1#3% }% -\def\XINT@add@secondiszero #1#2#3#4{ #4#2}% -\def\XINT@add@firstiszero #1#2#3#4{ #3#1}% +\def\XINT_add_secondiszero #1#2#3#4{ #4#2}% +\def\XINT_add_firstiszero #1#2#3#4{ #3#1}% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% #1 vient du *deuxième* et #2 vient du *premier* -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|#1 vient du *deuxième* et #2 vient du *premier*| % \begin{macrocode} -\def\XINT@add@minusminus #1#2#3#4% +\def\XINT_add_minusminus #1#2#3#4% {% - \expandafter\xint@minus@andstop% - \romannumeral0\XINT@add@pre {#2}{#1}% + \expandafter\xint_minus_andstop% + \romannumeral0\XINT_add_pre {#2}{#1}% }% -\def\XINT@add@minusplus #1#2#3#4% +\def\XINT_add_minusplus #1#2#3#4% {% - \XINT@sub@pre {#4#2}{#1}% + \XINT_sub_pre {#4#2}{#1}% }% -\def\XINT@add@plusminus #1#2#3#4% +\def\XINT_add_plusminus #1#2#3#4% {% - \XINT@sub@pre {#3#1}{#2}% + \XINT_sub_pre {#3#1}{#2}% }% -\def\XINT@add@plusplus #1#2#3#4% +\def\XINT_add_plusplus #1#2#3#4% {% - \XINT@add@pre {#4#2}{#3#1}% + \XINT_add_pre {#4#2}{#3#1}% }% -\def\XINT@add@pre #1% +\def\XINT_add_pre #1% {% - \expandafter\XINT@add@@pre\expandafter - {\romannumeral0\XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z }% + \expandafter\XINT_add__pre\expandafter + {\romannumeral0\XINT_RQ {}#1\R\R\R\R\R\R\R\R\Z }% }% -\def\XINT@add@@pre #1#2% +\def\XINT_add__pre #1#2% {% - \expandafter\XINT@add@A + \expandafter\XINT_add_A \expandafter0\expandafter{\expandafter}% - \romannumeral0\XINT@RQ {}#2\R\R\R\R\R\R\R\R\Z + \romannumeral0\XINT_RQ {}#2\R\R\R\R\R\R\R\R\Z \W\X\Y\Z #1\W\X\Y\Z }% % \end{macrocode} @@ -5511,298 +5680,281 @@ first place. \def\xintiSub {\romannumeral0\xintisub }% \def\xintisub #1% {% - \expandafter\xint@sub\expandafter{\romannumeral-`0#1}% + \expandafter\xint_sub\expandafter{\romannumeral-`0#1}% }% \let\xintSub\xintiSub \let\xintsub\xintisub -\def\xint@sub #1#2% +\def\xint_sub #1#2% {% - \expandafter\XINT@sub@fork \romannumeral-`0#2\Z #1\Z + \expandafter\XINT_sub_fork \romannumeral-`0#2\Z #1\Z }% -\def\XINT@Sub #1#2{\romannumeral0\XINT@sub@fork #2\Z #1\Z }% -\def\XINT@sub #1#2{\XINT@sub@fork #2\Z #1\Z }% +\def\XINT_Sub #1#2{\romannumeral0\XINT_sub_fork #2\Z #1\Z }% +\def\XINT_sub #1#2{\XINT_sub_fork #2\Z #1\Z }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} +% \lverb|& % SOUSTRACTION -% #3#4-#1#2 +% #3#4-#1#2: % #3#4 vient du *premier* -% #1#2 vient du *second* -% \end{verbatim} -% \vspace*{-1.5\baselineskip} -% \begin{macrocode} -\def\XINT@sub@fork #1#2\Z #3#4\Z -{% - \xint@UDsignsfork - #1#3\dummy \XINT@sub@minusminus - #1-\dummy \XINT@sub@minusplus % attention, #3=0 possible - #3-\dummy \XINT@sub@plusminus % attention, #1=0 possible - --\dummy {\xint@UDzerofork - #1\dummy \XINT@sub@secondiszero - #3\dummy \XINT@sub@firstiszero - 0\dummy \XINT@sub@plusplus - \xint@UDkrof }% - \xint@UDkrof +% #1#2 vient du *second*| +% \begin{macrocode} +\def\XINT_sub_fork #1#2\Z #3#4\Z +{% + \xint_UDsignsfork + #1#3\dummy \XINT_sub_minusminus + #1-\dummy \XINT_sub_minusplus % attention, #3=0 possible + #3-\dummy \XINT_sub_plusminus % attention, #1=0 possible + --\dummy {\xint_UDzerofork + #1\dummy \XINT_sub_secondiszero + #3\dummy \XINT_sub_firstiszero + 0\dummy \XINT_sub_plusplus + \krof }% + \krof {#2}{#4}#1#3% }% -\def\XINT@sub@secondiszero #1#2#3#4{ #4#2}% -\def\XINT@sub@firstiszero #1#2#3#4{ -#3#1}% -\def\XINT@sub@plusplus #1#2#3#4% +\def\XINT_sub_secondiszero #1#2#3#4{ #4#2}% +\def\XINT_sub_firstiszero #1#2#3#4{ -#3#1}% +\def\XINT_sub_plusplus #1#2#3#4% {% - \XINT@sub@pre {#4#2}{#3#1}% + \XINT_sub_pre {#4#2}{#3#1}% }% -\def\XINT@sub@minusminus #1#2#3#4% +\def\XINT_sub_minusminus #1#2#3#4% {% - \XINT@sub@pre {#1}{#2}% + \XINT_sub_pre {#1}{#2}% }% -\def\XINT@sub@minusplus #1#2#3#4% +\def\XINT_sub_minusplus #1#2#3#4% {% - \xint@zero #4\xint@sub@mp0\XINT@add@pre {#4#2}{#1}% + \xint_gob_til_zero #4\xint_sub_mp0\XINT_add_pre {#4#2}{#1}% }% -\def\xint@sub@mp0\XINT@add@pre #1#2{ #2}% -\def\XINT@sub@plusminus #1#2#3#4% +\def\xint_sub_mp0\XINT_add_pre #1#2{ #2}% +\def\XINT_sub_plusminus #1#2#3#4% {% - \xint@zero #3\xint@sub@pm0\expandafter\xint@minus@andstop% - \romannumeral0\XINT@add@pre {#2}{#3#1}% + \xint_gob_til_zero #3\xint_sub_pm0\expandafter\xint_minus_andstop% + \romannumeral0\XINT_add_pre {#2}{#3#1}% }% -\def\xint@sub@pm #1\XINT@add@pre #2#3{ -#2}% -\def\XINT@sub@pre #1% +\def\xint_sub_pm #1\XINT_add_pre #2#3{ -#2}% +\def\XINT_sub_pre #1% {% - \expandafter\XINT@sub@@pre\expandafter - {\romannumeral0\XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z }% + \expandafter\XINT_sub__pre\expandafter + {\romannumeral0\XINT_RQ {}#1\R\R\R\R\R\R\R\R\Z }% }% -\def\XINT@sub@@pre #1#2% +\def\XINT_sub__pre #1#2% {% - \expandafter\XINT@sub@A + \expandafter\XINT_sub_A \expandafter1\expandafter{\expandafter}% - \romannumeral0\XINT@RQ {}#2\R\R\R\R\R\R\R\R\Z + \romannumeral0\XINT_RQ {}#2\R\R\R\R\R\R\R\R\Z \W\X\Y\Z #1 \W\X\Y\Z }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% \romannumeral0\XINT@sub@A 1{}\W\X\Y\Z\W\X\Y\Z +% \lverb|& +% \romannumeral0\XINT_sub_A 1{}\W\X\Y\Z\W\X\Y\Z$\ % N1 et N2 sont présentés à l'envers ET ON A RAJOUTÉ DES ZÉROS % POUR QUE LEURS LONGUEURS À CHACUN SOIENT MULTIPLES DE 4, MAIS -% AUCUN NE SE TERMINE EN 0000 -% output: N2 - N1 +% AUCUN NE SE TERMINE EN 0000.$\ output: N2 - N1$\ % Elle donne le résultat dans le **bon ordre**, avec le bon signe, -% et sans zéros superflus. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% et sans zéros superflus.| % \begin{macrocode} -\def\XINT@sub@A #1#2#3\W\X\Y\Z #4#5#6#7% +\def\XINT_sub_A #1#2#3\W\X\Y\Z #4#5#6#7% {% - \xint@w - #4\xint@sub@az - \W\XINT@sub@B #1{#4#5#6#7}{#2}#3\W\X\Y\Z + \xint_gob_til_w + #4\xint_sub_az + \W\XINT_sub_B #1{#4#5#6#7}{#2}#3\W\X\Y\Z }% -\def\XINT@sub@B #1#2#3#4#5#6#7% +\def\XINT_sub_B #1#2#3#4#5#6#7% {% - \xint@w - #4\xint@sub@bz - \W\XINT@sub@onestep #1#2{#7#6#5#4}{#3}% + \xint_gob_til_w + #4\xint_sub_bz + \W\XINT_sub_onestep #1#2{#7#6#5#4}{#3}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} +% \lverb|& % d'abord la branche principale % #6 = 4 chiffres de N1, plus significatif en *premier*, % #2#3#4#5 chiffres de N2, plus significatif en *dernier* -% On veut N2 - N1. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% On veut N2 - N1.| % \begin{macrocode} -\def\XINT@sub@onestep #1#2#3#4#5#6% +\def\XINT_sub_onestep #1#2#3#4#5#6% {% - \expandafter\XINT@sub@backtoA\the\numexpr 11#5#4#3#2-#6+#1-1\relax.% + \expandafter\XINT_sub_backtoA\the\numexpr 11#5#4#3#2-#6+#1-1\relax.% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% ON PRODUIT LE RÉSULTAT DANS LE BON ORDRE -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|ON PRODUIT LE RÉSULTAT DANS LE BON ORDRE| % \begin{macrocode} -\def\XINT@sub@backtoA #1#2#3.#4% +\def\XINT_sub_backtoA #1#2#3.#4% {% - \XINT@sub@A #2{#3#4}% + \XINT_sub_A #2{#3#4}% }% -\def\xint@sub@bz - \W\XINT@sub@onestep #1#2#3#4#5#6#7% +\def\xint_sub_bz + \W\XINT_sub_onestep #1#2#3#4#5#6#7% {% - \xint@UDzerofork - #1\dummy \XINT@sub@C % une retenue - 0\dummy \XINT@sub@D % pas de retenue - \xint@UDkrof + \xint_UDzerofork + #1\dummy \XINT_sub_C % une retenue + 0\dummy \XINT_sub_D % pas de retenue + \krof {#7}#2#3#4#5% }% -\def\XINT@sub@D #1#2\W\X\Y\Z +\def\XINT_sub_D #1#2\W\X\Y\Z {% \expandafter - \xint@cleanupzeros@andstop + \xint_cleanupzeros_andstop \romannumeral0% - \XINT@rord@main {}#2% - \xint@UNDEF - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@UNDEF + \XINT_rord_main {}#2% + \xint_relax + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_relax #1% }% -\def\XINT@sub@C #1#2#3#4#5% +\def\XINT_sub_C #1#2#3#4#5% {% - \xint@w - #2\xint@sub@cz - \W\XINT@sub@AC@onestep {#5#4#3#2}{#1}% + \xint_gob_til_w + #2\xint_sub_cz + \W\XINT_sub_AC_onestep {#5#4#3#2}{#1}% }% -\def\XINT@sub@AC@onestep #1% +\def\XINT_sub_AC_onestep #1% {% - \expandafter\XINT@sub@backtoC\the\numexpr 11#1-1\relax.% + \expandafter\XINT_sub_backtoC\the\numexpr 11#1-1\relax.% }% -\def\XINT@sub@backtoC #1#2#3.#4% +\def\XINT_sub_backtoC #1#2#3.#4% {% - \XINT@sub@AC@checkcarry #2{#3#4}% la retenue va \^etre examin\'ee + \XINT_sub_AC_checkcarry #2{#3#4}% la retenue va \^etre examin\'ee }% -\def\XINT@sub@AC@checkcarry #1% +\def\XINT_sub_AC_checkcarry #1% {% - \xint@one #1\xint@sub@AC@nocarry 1\XINT@sub@C + \xint_gob_til_one #1\xint_sub_AC_nocarry 1\XINT_sub_C }% -\def\xint@sub@AC@nocarry 1\XINT@sub@C #1#2\W\X\Y\Z +\def\xint_sub_AC_nocarry 1\XINT_sub_C #1#2\W\X\Y\Z {% \expandafter - \XINT@cuz@loop + \XINT_cuz_loop \romannumeral0% - \XINT@rord@main {}#2% - \xint@UNDEF - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@UNDEF + \XINT_rord_main {}#2% + \xint_relax + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_relax #1\W\W\W\W\W\W\W\Z }% -\def\xint@sub@cz\W\XINT@sub@AC@onestep #1% +\def\xint_sub_cz\W\XINT_sub_AC_onestep #1% {% - \XINT@cuz + \XINT_cuz }% -\def\xint@sub@az\W\XINT@sub@B #1#2#3#4#5#6#7% +\def\xint_sub_az\W\XINT_sub_B #1#2#3#4#5#6#7% {% - \xint@w - #4\xint@sub@ez - \W\XINT@sub@Eenter #1{#3}#4#5#6#7% + \xint_gob_til_w + #4\xint_sub_ez + \W\XINT_sub_Eenter #1{#3}#4#5#6#7% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% le premier nombre continue, le résultat sera < 0. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|le premier nombre continue, le résultat sera < 0.| % \begin{macrocode} -\def\XINT@sub@Eenter #1#2% +\def\XINT_sub_Eenter #1#2% {% \expandafter - \XINT@sub@E\expandafter1\expandafter{\expandafter}% + \XINT_sub_E\expandafter1\expandafter{\expandafter}% \romannumeral0% - \XINT@rord@main {}#2% - \xint@UNDEF - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@UNDEF + \XINT_rord_main {}#2% + \xint_relax + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_relax \W\X\Y\Z #1% }% -\def\XINT@sub@E #1#2#3#4#5#6% +\def\XINT_sub_E #1#2#3#4#5#6% {% - \xint@w #3\xint@sub@F\W\XINT@sub@Eonestep #1{#6#5#4#3}{#2}% + \xint_gob_til_w #3\xint_sub_F\W + \XINT_sub_Eonestep #1{#6#5#4#3}{#2}% }% -\def\XINT@sub@Eonestep #1#2% +\def\XINT_sub_Eonestep #1#2% {% - \expandafter\XINT@sub@backtoE\the\numexpr 109999-#2+#1\relax.% + \expandafter\XINT_sub_backtoE\the\numexpr 109999-#2+#1\relax.% }% -\def\XINT@sub@backtoE #1#2#3.#4% +\def\XINT_sub_backtoE #1#2#3.#4% {% - \XINT@sub@E #2{#3#4}% + \XINT_sub_E #2{#3#4}% }% -\def\xint@sub@F\W\XINT@sub@Eonestep #1#2#3#4% +\def\xint_sub_F\W\XINT_sub_Eonestep #1#2#3#4% {% - \xint@UDonezerofork - #4#1\dummy {\XINT@sub@Fdec 0}% soustraire 1. Et faire signe - - #1#4\dummy {\XINT@sub@Finc 1}% additionner 1. Et faire signe - - 10\dummy \XINT@sub@DD % terminer. Mais avec signe - - \xint@UDkrof + \xint_UDonezerofork + #4#1\dummy {\XINT_sub_Fdec 0}% soustraire 1. Et faire signe - + #1#4\dummy {\XINT_sub_Finc 1}% additionner 1. Et faire signe - + 10\dummy \XINT_sub_DD % terminer. Mais avec signe - + \krof {#3}% }% -\def\XINT@sub@DD {\expandafter\xint@minus@andstop\romannumeral0\XINT@sub@D }% -\def\XINT@sub@Fdec #1#2#3#4#5#6% +\def\XINT_sub_DD {\expandafter\xint_minus_andstop\romannumeral0\XINT_sub_D }% +\def\XINT_sub_Fdec #1#2#3#4#5#6% {% - \xint@w #3\xint@sub@Fdec@finish\W - \XINT@sub@Fdec@onestep #1{#6#5#4#3}{#2}% + \xint_gob_til_w #3\xint_sub_Fdec_finish\W + \XINT_sub_Fdec_onestep #1{#6#5#4#3}{#2}% }% -\def\XINT@sub@Fdec@onestep #1#2% +\def\XINT_sub_Fdec_onestep #1#2% {% - \expandafter\XINT@sub@backtoFdec\the\numexpr 11#2+#1-1\relax.% + \expandafter\XINT_sub_backtoFdec\the\numexpr 11#2+#1-1\relax.% }% -\def\XINT@sub@backtoFdec #1#2#3.#4% +\def\XINT_sub_backtoFdec #1#2#3.#4% {% - \XINT@sub@Fdec #2{#3#4}% + \XINT_sub_Fdec #2{#3#4}% }% -\def\xint@sub@Fdec@finish\W\XINT@sub@Fdec@onestep #1#2% +\def\xint_sub_Fdec_finish\W\XINT_sub_Fdec_onestep #1#2% {% - \expandafter\xint@minus@andstop\romannumeral0\XINT@cuz + \expandafter\xint_minus_andstop\romannumeral0\XINT_cuz }% -\def\XINT@sub@Finc #1#2#3#4#5#6% +\def\XINT_sub_Finc #1#2#3#4#5#6% {% - \xint@w #3\xint@sub@Finc@finish\W - \XINT@sub@Finc@onestep #1{#6#5#4#3}{#2}% + \xint_gob_til_w #3\xint_sub_Finc_finish\W + \XINT_sub_Finc_onestep #1{#6#5#4#3}{#2}% }% -\def\XINT@sub@Finc@onestep #1#2% +\def\XINT_sub_Finc_onestep #1#2% {% - \expandafter\XINT@sub@backtoFinc\the\numexpr 10#2+#1\relax.% + \expandafter\XINT_sub_backtoFinc\the\numexpr 10#2+#1\relax.% }% -\def\XINT@sub@backtoFinc #1#2#3.#4% +\def\XINT_sub_backtoFinc #1#2#3.#4% {% - \XINT@sub@Finc #2{#3#4}% + \XINT_sub_Finc #2{#3#4}% }% -\def\xint@sub@Finc@finish\W\XINT@sub@Finc@onestep #1#2#3% +\def\xint_sub_Finc_finish\W\XINT_sub_Finc_onestep #1#2#3% {% - \xint@UDzerofork - #1\dummy {\expandafter\xint@minus@andstop\xint@cleanupzeros@nospace}% + \xint_UDzerofork + #1\dummy {\expandafter\xint_minus_andstop\xint_cleanupzeros_nospace}% 0\dummy { -1}% - \xint@UDkrof + \krof #3% }% -\def\xint@sub@ez\W\XINT@sub@Eenter #1% +\def\xint_sub_ez\W\XINT_sub_Eenter #1% {% - \xint@UDzerofork - #1\dummy \XINT@sub@K % il y a une retenue - 0\dummy \XINT@sub@L % pas de retenue - \xint@UDkrof + \xint_UDzerofork + #1\dummy \XINT_sub_K % il y a une retenue + 0\dummy \XINT_sub_L % pas de retenue + \krof }% -\def\XINT@sub@L #1\W\X\Y\Z {\XINT@cuz@loop #1\W\W\W\W\W\W\W\Z }% -\def\XINT@sub@K #1% +\def\XINT_sub_L #1\W\X\Y\Z {\XINT_cuz_loop #1\W\W\W\W\W\W\W\Z }% +\def\XINT_sub_K #1% {% \expandafter - \XINT@sub@KK\expandafter1\expandafter{\expandafter}% + \XINT_sub_KK\expandafter1\expandafter{\expandafter}% \romannumeral0% - \XINT@rord@main {}#1% - \xint@UNDEF - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@UNDEF + \XINT_rord_main {}#1% + \xint_relax + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_relax }% -\def\XINT@sub@KK #1#2#3#4#5#6% +\def\XINT_sub_KK #1#2#3#4#5#6% {% - \xint@w #3\xint@sub@KK@finish\W - \XINT@sub@KK@onestep #1{#6#5#4#3}{#2}% + \xint_gob_til_w #3\xint_sub_KK_finish\W + \XINT_sub_KK_onestep #1{#6#5#4#3}{#2}% }% -\def\XINT@sub@KK@onestep #1#2% +\def\XINT_sub_KK_onestep #1#2% {% - \expandafter\XINT@sub@backtoKK\the\numexpr 109999-#2+#1\relax.% + \expandafter\XINT_sub_backtoKK\the\numexpr 109999-#2+#1\relax.% }% -\def\XINT@sub@backtoKK #1#2#3.#4% +\def\XINT_sub_backtoKK #1#2#3.#4% {% - \XINT@sub@KK #2{#3#4}% + \XINT_sub_KK #2{#3#4}% }% -\def\xint@sub@KK@finish\W\XINT@sub@KK@onestep #1#2#3% +\def\xint_sub_KK_finish\W\XINT_sub_KK_onestep #1#2#3% {% - \expandafter\xint@minus@andstop - \romannumeral0\XINT@cuz@loop #3\W\W\W\W\W\W\W\Z + \expandafter\xint_minus_andstop + \romannumeral0\XINT_cuz_loop #3\W\W\W\W\W\W\W\Z }% % \end{macrocode} % \subsection{\csh{xintCmp}} @@ -5810,306 +5962,287 @@ first place. \def\xintiCmp {\romannumeral0\xinticmp }% \def\xinticmp #1% {% - \expandafter\xint@cmp\expandafter{\romannumeral-`0#1}% + \expandafter\xint_cmp\expandafter{\romannumeral-`0#1}% }% \let\xintCmp\xintiCmp \let\xintcmp\xinticmp -\def\xint@cmp #1#2% -{% - \expandafter\XINT@cmp@fork \romannumeral-`0#2\Z #1\Z -}% -\def\XINT@Cmp #1#2{\romannumeral0\XINT@cmp@fork #2\Z #1\Z }% -% \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% COMPARAISON -% 1 si #3#4>#1#2, 0 si #3#4=#1#2, -1 si #3#4<#1#2 -% #3#4 vient du *premier* -% #1#2 vient du *second* -% \end{verbatim} -% \vspace*{-1.5\baselineskip} -% \begin{macrocode} -\def\XINT@cmp@fork #1#2\Z #3#4\Z -{% - \xint@UDsignsfork - #1#3\dummy \XINT@cmp@minusminus - #1-\dummy \XINT@cmp@minusplus - #3-\dummy \XINT@cmp@plusminus - --\dummy {\xint@UDzerosfork - #1#3\dummy \XINT@cmp@zerozero - #10\dummy \XINT@cmp@zeroplus - #30\dummy \XINT@cmp@pluszero - 00\dummy \XINT@cmp@plusplus - \xint@UDkrof }% - \xint@UDkrof +\def\xint_cmp #1#2% +{% + \expandafter\XINT_cmp_fork \romannumeral-`0#2\Z #1\Z +}% +\def\XINT_Cmp #1#2{\romannumeral0\XINT_cmp_fork #2\Z #1\Z }% +% \end{macrocode} +% \lverb|& +% COMPARAISON $\ +% 1 si #3#4>#1#2, 0 si #3#4=#1#2, -1 si #3#4<#1#2$\ +% #3#4 vient du *premier*,$ +% #1#2 vient du *second*| +% \begin{macrocode} +\def\XINT_cmp_fork #1#2\Z #3#4\Z +{% + \xint_UDsignsfork + #1#3\dummy \XINT_cmp_minusminus + #1-\dummy \XINT_cmp_minusplus + #3-\dummy \XINT_cmp_plusminus + --\dummy {\xint_UDzerosfork + #1#3\dummy \XINT_cmp_zerozero + #10\dummy \XINT_cmp_zeroplus + #30\dummy \XINT_cmp_pluszero + 00\dummy \XINT_cmp_plusplus + \krof }% + \krof {#2}{#4}#1#3% }% -\def\XINT@cmp@minusplus #1#2#3#4{ 1}% -\def\XINT@cmp@plusminus #1#2#3#4{ -1}% -\def\XINT@cmp@zerozero #1#2#3#4{ 0}% -\def\XINT@cmp@zeroplus #1#2#3#4{ 1}% -\def\XINT@cmp@pluszero #1#2#3#4{ -1}% -\def\XINT@cmp@plusplus #1#2#3#4% +\def\XINT_cmp_minusplus #1#2#3#4{ 1}% +\def\XINT_cmp_plusminus #1#2#3#4{ -1}% +\def\XINT_cmp_zerozero #1#2#3#4{ 0}% +\def\XINT_cmp_zeroplus #1#2#3#4{ 1}% +\def\XINT_cmp_pluszero #1#2#3#4{ -1}% +\def\XINT_cmp_plusplus #1#2#3#4% {% - \XINT@cmp@pre {#4#2}{#3#1}% + \XINT_cmp_pre {#4#2}{#3#1}% }% -\def\XINT@cmp@minusminus #1#2#3#4% +\def\XINT_cmp_minusminus #1#2#3#4% {% - \XINT@cmp@pre {#1}{#2}% + \XINT_cmp_pre {#1}{#2}% }% -\def\XINT@cmp@pre #1% +\def\XINT_cmp_pre #1% {% - \expandafter\XINT@cmp@@pre\expandafter - {\romannumeral0\XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z }% + \expandafter\XINT_cmp__pre\expandafter + {\romannumeral0\XINT_RQ {}#1\R\R\R\R\R\R\R\R\Z }% }% -\def\XINT@cmp@@pre #1#2% +\def\XINT_cmp__pre #1#2% {% - \expandafter\XINT@cmp@A + \expandafter\XINT_cmp_A \expandafter1\expandafter{\expandafter}% - \romannumeral0\XINT@RQ {}#2\R\R\R\R\R\R\R\R\Z + \romannumeral0\XINT_RQ {}#2\R\R\R\R\R\R\R\R\Z \W\X\Y\Z #1\W\X\Y\Z }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% COMPARAISON +% \lverb|& +% COMPARAISON$\ % N1 et N2 sont présentés à l'envers ET ON A RAJOUTÉ DES ZÉROS -% POUR QUE LEURS LONGUEURS À CHACUN SOIENT MULTIPLES DE 4, MAIS -% AUCUN NE SE TERMINE EN 0000 -% routine appelée via \XINT@cmp@A 1{}\W\X\Y\Z\W\X\Y\Z -% ATTENTION RENVOIE 1 SI N1 < N2, 0 si N1 = N2, -1 si N1 > N2 -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% POUR QUE LEUR LONGUEURS À CHACUN SOIENT MULTIPLES DE 4, MAIS +% AUCUN NE SE TERMINE EN 0000. +% routine appelée via$\ +% \XINT_cmp_A 1{}\W\X\Y\Z\W\X\Y\Z$\ +% ATTENTION RENVOIE 1 SI N1 < N2, 0 si N1 = N2, -1 si N1 > N2| % \begin{macrocode} -\def\XINT@cmp@A #1#2#3\W\X\Y\Z #4#5#6#7% +\def\XINT_cmp_A #1#2#3\W\X\Y\Z #4#5#6#7% {% - \xint@w #4\xint@cmp@az\W\XINT@cmp@B #1{#4#5#6#7}{#2}#3\W\X\Y\Z + \xint_gob_til_w #4\xint_cmp_az\W + \XINT_cmp_B #1{#4#5#6#7}{#2}#3\W\X\Y\Z }% -\def\XINT@cmp@B #1#2#3#4#5#6#7% +\def\XINT_cmp_B #1#2#3#4#5#6#7% {% - \xint@w#4\xint@cmp@bz\W\XINT@cmp@onestep #1#2{#7#6#5#4}{#3}% + \xint_gob_til_w#4\xint_cmp_bz\W + \XINT_cmp_onestep #1#2{#7#6#5#4}{#3}% }% -\def\XINT@cmp@onestep #1#2#3#4#5#6% +\def\XINT_cmp_onestep #1#2#3#4#5#6% {% - \expandafter\XINT@cmp@backtoA\the\numexpr 11#5#4#3#2-#6+#1-1\relax.% + \expandafter\XINT_cmp_backtoA\the\numexpr 11#5#4#3#2-#6+#1-1\relax.% }% -\def\XINT@cmp@backtoA #1#2#3.#4% +\def\XINT_cmp_backtoA #1#2#3.#4% {% - \XINT@cmp@A #2{#3#4}% + \XINT_cmp_A #2{#3#4}% }% -\def\xint@cmp@bz\W\XINT@cmp@onestep #1\Z { 1}% -\def\xint@cmp@az\W\XINT@cmp@B #1#2#3#4#5#6#7% +\def\xint_cmp_bz\W\XINT_cmp_onestep #1\Z { 1}% +\def\xint_cmp_az\W\XINT_cmp_B #1#2#3#4#5#6#7% {% - \xint@w #4\xint@cmp@ez\W\XINT@cmp@Eenter #1{#3}#4#5#6#7% + \xint_gob_til_w #4\xint_cmp_ez\W + \XINT_cmp_Eenter #1{#3}#4#5#6#7% }% -\def\XINT@cmp@Eenter #1\Z { -1}% -\def\xint@cmp@ez\W\XINT@cmp@Eenter #1% +\def\XINT_cmp_Eenter #1\Z { -1}% +\def\xint_cmp_ez\W\XINT_cmp_Eenter #1% {% - \xint@UDzerofork - #1\dummy \XINT@cmp@K % il y a une retenue - 0\dummy \XINT@cmp@L % pas de retenue - \xint@UDkrof + \xint_UDzerofork + #1\dummy \XINT_cmp_K % il y a une retenue + 0\dummy \XINT_cmp_L % pas de retenue + \krof }% -\def\XINT@cmp@K #1\Z { -1}% -\def\XINT@cmp@L #1{\XINT@OneIfPositive@main #1}% -\def\XINT@OneIfPositive #1% +\def\XINT_cmp_K #1\Z { -1}% +\def\XINT_cmp_L #1{\XINT_OneIfPositive_main #1}% +\def\XINT_OneIfPositive #1% {% - \XINT@OneIfPositive@main #1\W\X\Y\Z% + \XINT_OneIfPositive_main #1\W\X\Y\Z% }% -\def\XINT@OneIfPositive@main #1#2#3#4% +\def\XINT_OneIfPositive_main #1#2#3#4% {% - \xint@z #4\xint@OneIfPositive@terminated\Z - \XINT@OneIfPositive@onestep #1#2#3#4% + \xint_gob_til_z #4\xint_OneIfPositive_terminated\Z + \XINT_OneIfPositive_onestep #1#2#3#4% }% -\def\xint@OneIfPositive@terminated\Z\XINT@OneIfPositive@onestep\W\X\Y\Z { 0}% -\def\XINT@OneIfPositive@onestep #1#2#3#4% +\def\xint_OneIfPositive_terminated\Z\XINT_OneIfPositive_onestep\W\X\Y\Z { 0}% +\def\XINT_OneIfPositive_onestep #1#2#3#4% {% - \expandafter\XINT@OneIfPositive@check\the\numexpr #1#2#3#4\relax + \expandafter\XINT_OneIfPositive_check\the\numexpr #1#2#3#4\relax }% -\def\XINT@OneIfPositive@check #1% +\def\XINT_OneIfPositive_check #1% {% - \xint@zero #1\xint@OneIfPositive@backtomain 0% - \XINT@OneIfPositive@finish #1% + \xint_gob_til_zero #1\xint_OneIfPositive_backtomain 0% + \XINT_OneIfPositive_finish #1% }% -\def\XINT@OneIfPositive@finish #1\W\X\Y\Z{ 1}% -\def\xint@OneIfPositive@backtomain 0\XINT@OneIfPositive@finish 0% - {\XINT@OneIfPositive@main }% +\def\XINT_OneIfPositive_finish #1\W\X\Y\Z{ 1}% +\def\xint_OneIfPositive_backtomain 0\XINT_OneIfPositive_finish 0% + {\XINT_OneIfPositive_main }% % \end{macrocode} % \subsection{\csh{xintGeq}} -% \begin{verbatim} -% PLUS GRAND OU ÉGAL -% attention compare les **valeurs absolues** -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% PLUS GRAND OU ÉGAL +% attention compare les **valeurs absolues**| % \begin{macrocode} \def\xintiGeq {\romannumeral0\xintigeq }% \def\xintigeq #1% {% - \expandafter\xint@geq\expandafter {\romannumeral-`0#1}% + \expandafter\xint_geq\expandafter {\romannumeral-`0#1}% }% \let\xintGeq\xintiGeq \let\xintgeq\xintigeq -\def\xint@geq #1#2% -{% - \expandafter\XINT@geq@fork \romannumeral-`0#2\Z #1\Z -}% -\def\XINT@Geq #1#2{\romannumeral0\XINT@geq@fork #2\Z #1\Z }% -% \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% PLUS GRAND OU ÉGAL -% ATTENTION, TESTE les VALEURS ABSOLUES -% \end{verbatim} -% \vspace*{-1.5\baselineskip} -% \begin{macrocode} -\def\XINT@geq@fork #1#2\Z #3#4\Z -{% - \xint@UDzerofork - #1\dummy \XINT@geq@secondiszero % |#1#2|=0 - #3\dummy \XINT@geq@firstiszero % |#1#2|>0 - 0\dummy {\xint@UDsignsfork - #1#3\dummy \XINT@geq@minusminus - #1-\dummy \XINT@geq@minusplus - #3-\dummy \XINT@geq@plusminus - --\dummy \XINT@geq@plusplus - \xint@UDkrof }% - \xint@UDkrof +\def\xint_geq #1#2% +{% + \expandafter\XINT_geq_fork \romannumeral-`0#2\Z #1\Z +}% +\def\XINT_Geq #1#2{\romannumeral0\XINT_geq_fork #2\Z #1\Z }% +% \end{macrocode} +% \lverb|& +% PLUS GRAND OU ÉGAL +% ATTENTION, TESTE les VALEURS ABSOLUES| +% \begin{macrocode} +\def\XINT_geq_fork #1#2\Z #3#4\Z +{% + \xint_UDzerofork + #1\dummy \XINT_geq_secondiszero % |#1#2|=0 + #3\dummy \XINT_geq_firstiszero % |#1#2|>0 + 0\dummy {\xint_UDsignsfork + #1#3\dummy \XINT_geq_minusminus + #1-\dummy \XINT_geq_minusplus + #3-\dummy \XINT_geq_plusminus + --\dummy \XINT_geq_plusplus + \krof }% + \krof {#2}{#4}#1#3% }% -\def\XINT@geq@secondiszero #1#2#3#4{ 1}% -\def\XINT@geq@firstiszero #1#2#3#4{ 0}% -\def\XINT@geq@plusplus #1#2#3#4{\XINT@geq@pre {#4#2}{#3#1}}% -\def\XINT@geq@minusminus #1#2#3#4{\XINT@geq@pre {#2}{#1}}% -\def\XINT@geq@minusplus #1#2#3#4{\XINT@geq@pre {#4#2}{#1}}% -\def\XINT@geq@plusminus #1#2#3#4{\XINT@geq@pre {#2}{#3#1}}% -\def\XINT@geq@pre #1% +\def\XINT_geq_secondiszero #1#2#3#4{ 1}% +\def\XINT_geq_firstiszero #1#2#3#4{ 0}% +\def\XINT_geq_plusplus #1#2#3#4{\XINT_geq_pre {#4#2}{#3#1}}% +\def\XINT_geq_minusminus #1#2#3#4{\XINT_geq_pre {#2}{#1}}% +\def\XINT_geq_minusplus #1#2#3#4{\XINT_geq_pre {#4#2}{#1}}% +\def\XINT_geq_plusminus #1#2#3#4{\XINT_geq_pre {#2}{#3#1}}% +\def\XINT_geq_pre #1% {% - \expandafter\XINT@geq@@pre\expandafter - {\romannumeral0\XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z }% + \expandafter\XINT_geq__pre\expandafter + {\romannumeral0\XINT_RQ {}#1\R\R\R\R\R\R\R\R\Z }% }% -\def\XINT@geq@@pre #1#2% +\def\XINT_geq__pre #1#2% {% - \expandafter\XINT@geq@A + \expandafter\XINT_geq_A \expandafter1\expandafter{\expandafter}% - \romannumeral0\XINT@RQ {}#2\R\R\R\R\R\R\R\R\Z + \romannumeral0\XINT_RQ {}#2\R\R\R\R\R\R\R\R\Z \W\X\Y\Z #1 \W\X\Y\Z }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% PLUS GRAND OU ÉGAL +% \lverb|& +% PLUS GRAND OU ÉGAL$\ % N1 et N2 sont présentés à l'envers ET ON A RAJOUTÉ DES ZÉROS % POUR QUE LEURS LONGUEURS À CHACUN SOIENT MULTIPLES DE 4, MAIS -% AUCUN NE SE TERMINE EN 0000 -% routine appelée via -% \romannumeral0\XINT@geq@A 1{}\W\X\Y\Z\W\X\Y\Z -% ATTENTION RENVOIE 1 SI N1 < N2 ou N1 = N2 et 0 si N1 > N2 -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% AUCUN NE SE TERMINE EN 0000$\ +% routine appelée via$\ +% \romannumeral0\XINT_geq_A 1{}\W\X\Y\Z\W\X\Y\Z$\ +% ATTENTION RENVOIE 1 SI N1 < N2 ou N1 = N2 et 0 si N1 > N2| % \begin{macrocode} -\def\XINT@geq@A #1#2#3\W\X\Y\Z #4#5#6#7% +\def\XINT_geq_A #1#2#3\W\X\Y\Z #4#5#6#7% {% - \xint@w #4\xint@geq@az\W\XINT@geq@B #1{#4#5#6#7}{#2}#3\W\X\Y\Z + \xint_gob_til_w #4\xint_geq_az\W + \XINT_geq_B #1{#4#5#6#7}{#2}#3\W\X\Y\Z }% -\def\XINT@geq@B #1#2#3#4#5#6#7% +\def\XINT_geq_B #1#2#3#4#5#6#7% {% - \xint@w #4\xint@geq@bz\W\XINT@geq@onestep #1#2{#7#6#5#4}{#3}% + \xint_gob_til_w #4\xint_geq_bz\W + \XINT_geq_onestep #1#2{#7#6#5#4}{#3}% }% -\def\XINT@geq@onestep #1#2#3#4#5#6% +\def\XINT_geq_onestep #1#2#3#4#5#6% {% - \expandafter\XINT@geq@backtoA\the\numexpr 11#5#4#3#2-#6+#1-1\relax.% + \expandafter\XINT_geq_backtoA\the\numexpr 11#5#4#3#2-#6+#1-1\relax.% }% -\def\XINT@geq@backtoA #1#2#3.#4% +\def\XINT_geq_backtoA #1#2#3.#4% {% - \XINT@geq@A #2{#3#4}% + \XINT_geq_A #2{#3#4}% }% -\def\xint@geq@bz\W\XINT@geq@onestep #1\W\X\Y\Z { 1}% -\def\xint@geq@az\W\XINT@geq@B #1#2#3#4#5#6#7% +\def\xint_geq_bz\W\XINT_geq_onestep #1\W\X\Y\Z { 1}% +\def\xint_geq_az\W\XINT_geq_B #1#2#3#4#5#6#7% {% - \xint@w #4\xint@geq@ez\W\XINT@geq@Eenter #1% + \xint_gob_til_w #4\xint_geq_ez\W + \XINT_geq_Eenter #1% }% -\def\XINT@geq@Eenter #1\W\X\Y\Z { 0}% -\def\xint@geq@ez\W\XINT@geq@Eenter #1% +\def\XINT_geq_Eenter #1\W\X\Y\Z { 0}% +\def\xint_geq_ez\W\XINT_geq_Eenter #1% {% - \xint@UDzerofork + \xint_UDzerofork #1\dummy { 0} % il y a une retenue 0\dummy { 1} % pas de retenue - \xint@UDkrof + \krof }% % \end{macrocode} % \subsection{\csh{xintMax}} -% \begin{verbatim} +% \lverb|& % The rationale is that it is more efficient than using \xintCmp. -% 1.03 makes the code a tiny bit slower but easier to re-use for fractions. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% 1.03 makes the code a tiny bit slower but easier to re-use for fractions. | % \begin{macrocode} \def\xintiMax {\romannumeral0\xintimax }% \def\xintimax #1% {% - \expandafter\xint@max\expandafter {\romannumeral-`0#1}% + \expandafter\xint_max\expandafter {\romannumeral-`0#1}% }% \let\xintMax\xintiMax \let\xintmax\xintimax -\def\xint@max #1#2% -{% - \expandafter\XINT@max@pre\expandafter {\romannumeral-`0#2}{#1}% -}% -\def\XINT@max@pre #1#2{\XINT@max@fork #1\Z #2\Z {#2}{#1}}% -\def\XINT@Max #1#2{\romannumeral0\XINT@max@fork #2\Z #1\Z {#1}{#2}}% -% \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% #3#4 vient du *premier* -% #1#2 vient du *second* -% \end{verbatim} -% \vspace*{-1.5\baselineskip} -% \begin{macrocode} -\def\XINT@max@fork #1#2\Z #3#4\Z -{% - \xint@UDsignsfork - #1#3\dummy \XINT@max@minusminus % A < 0, B < 0 - #1-\dummy \XINT@max@minusplus % B < 0, A >= 0 - #3-\dummy \XINT@max@plusminus % A < 0, B >= 0 - --\dummy {\xint@UDzerosfork - #1#3\dummy \XINT@max@zerozero % A = B = 0 - #10\dummy \XINT@max@zeroplus % B = 0, A > 0 - #30\dummy \XINT@max@pluszero % A = 0, B > 0 - 00\dummy \XINT@max@plusplus % A, B > 0 - \xint@UDkrof }% - \xint@UDkrof +\def\xint_max #1#2% +{% + \expandafter\XINT_max_pre\expandafter {\romannumeral-`0#2}{#1}% +}% +\def\XINT_max_pre #1#2{\XINT_max_fork #1\Z #2\Z {#2}{#1}}% +\def\XINT_Max #1#2{\romannumeral0\XINT_max_fork #2\Z #1\Z {#1}{#2}}% +% \end{macrocode} +% \lverb|& +% #3#4 vient du *premier*, +% #1#2 vient du *second*| +% \begin{macrocode} +\def\XINT_max_fork #1#2\Z #3#4\Z +{% + \xint_UDsignsfork + #1#3\dummy \XINT_max_minusminus % A < 0, B < 0 + #1-\dummy \XINT_max_minusplus % B < 0, A >= 0 + #3-\dummy \XINT_max_plusminus % A < 0, B >= 0 + --\dummy {\xint_UDzerosfork + #1#3\dummy \XINT_max_zerozero % A = B = 0 + #10\dummy \XINT_max_zeroplus % B = 0, A > 0 + #30\dummy \XINT_max_pluszero % A = 0, B > 0 + 00\dummy \XINT_max_plusplus % A, B > 0 + \krof }% + \krof {#2}{#4}#1#3% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% A = #4#2, B = #3#1 -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% A = #4#2, B = #3#1| % \begin{macrocode} -\def\XINT@max@zerozero #1#2#3#4{\xint@firstoftwo@andstop }% -\def\XINT@max@zeroplus #1#2#3#4{\xint@firstoftwo@andstop }% -\def\XINT@max@pluszero #1#2#3#4{\xint@secondoftwo@andstop }% -\def\XINT@max@minusplus #1#2#3#4{\xint@firstoftwo@andstop }% -\def\XINT@max@plusminus #1#2#3#4{\xint@secondoftwo@andstop }% -\def\XINT@max@plusplus #1#2#3#4% +\def\XINT_max_zerozero #1#2#3#4{\xint_firstoftwo_andstop }% +\def\XINT_max_zeroplus #1#2#3#4{\xint_firstoftwo_andstop }% +\def\XINT_max_pluszero #1#2#3#4{\xint_secondoftwo_andstop }% +\def\XINT_max_minusplus #1#2#3#4{\xint_firstoftwo_andstop }% +\def\XINT_max_plusminus #1#2#3#4{\xint_secondoftwo_andstop }% +\def\XINT_max_plusplus #1#2#3#4% {% - \ifodd\XINT@Geq {#4#2}{#3#1} - \expandafter\xint@firstoftwo@andstop + \ifodd\XINT_Geq {#4#2}{#3#1} + \expandafter\xint_firstoftwo_andstop \else - \expandafter\xint@secondoftwo@andstop + \expandafter\xint_secondoftwo_andstop \fi }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% #3=-, #4=-, #1 = |B| = -B, #2 = |A| = -A -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb+#3=-, #4=-, #1 = |B| = -B, #2 = |A| = -A+ % \begin{macrocode} -\def\XINT@max@minusminus #1#2#3#4% +\def\XINT_max_minusminus #1#2#3#4% {% - \ifodd\XINT@Geq {#1}{#2} - \expandafter\xint@firstoftwo@andstop + \ifodd\XINT_Geq {#1}{#2} + \expandafter\xint_firstoftwo_andstop \else - \expandafter\xint@secondoftwo@andstop + \expandafter\xint_secondoftwo_andstop \fi }% % \end{macrocode} @@ -6118,147 +6251,134 @@ first place. \def\xintiMin {\romannumeral0\xintimin }% \def\xintimin #1% {% - \expandafter\xint@min\expandafter {\romannumeral-`0#1}% + \expandafter\xint_min\expandafter {\romannumeral-`0#1}% }% \let\xintMin\xintiMin \let\xintmin\xintimin -\def\xint@min #1#2% -{% - \expandafter\XINT@min@pre\expandafter {\romannumeral-`0#2}{#1}% -}% -\def\XINT@min@pre #1#2{\XINT@min@fork #1\Z #2\Z {#2}{#1}}% -\def\XINT@Min #1#2{\romannumeral0\XINT@min@fork #2\Z #1\Z {#1}{#2}}% -% \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% #3#4 vient du *premier* -% #1#2 vient du *second* -% \end{verbatim} -% \vspace*{-1.5\baselineskip} -% \begin{macrocode} -\def\XINT@min@fork #1#2\Z #3#4\Z -{% - \xint@UDsignsfork - #1#3\dummy \XINT@min@minusminus % A < 0, B < 0 - #1-\dummy \XINT@min@minusplus % B < 0, A >= 0 - #3-\dummy \XINT@min@plusminus % A < 0, B >= 0 - --\dummy {\xint@UDzerosfork - #1#3\dummy \XINT@min@zerozero % A = B = 0 - #10\dummy \XINT@min@zeroplus % B = 0, A > 0 - #30\dummy \XINT@min@pluszero % A = 0, B > 0 - 00\dummy \XINT@min@plusplus % A, B > 0 - \xint@UDkrof }% - \xint@UDkrof +\def\xint_min #1#2% +{% + \expandafter\XINT_min_pre\expandafter {\romannumeral-`0#2}{#1}% +}% +\def\XINT_min_pre #1#2{\XINT_min_fork #1\Z #2\Z {#2}{#1}}% +\def\XINT_Min #1#2{\romannumeral0\XINT_min_fork #2\Z #1\Z {#1}{#2}}% +% \end{macrocode} +% \lverb|& +% #3#4 vient du *premier*, +% #1#2 vient du *second*| +% \begin{macrocode} +\def\XINT_min_fork #1#2\Z #3#4\Z +{% + \xint_UDsignsfork + #1#3\dummy \XINT_min_minusminus % A < 0, B < 0 + #1-\dummy \XINT_min_minusplus % B < 0, A >= 0 + #3-\dummy \XINT_min_plusminus % A < 0, B >= 0 + --\dummy {\xint_UDzerosfork + #1#3\dummy \XINT_min_zerozero % A = B = 0 + #10\dummy \XINT_min_zeroplus % B = 0, A > 0 + #30\dummy \XINT_min_pluszero % A = 0, B > 0 + 00\dummy \XINT_min_plusplus % A, B > 0 + \krof }% + \krof {#2}{#4}#1#3% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% A = #4#2, B = #3#1 -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% A = #4#2, B = #3#1| % \begin{macrocode} -\def\XINT@min@zerozero #1#2#3#4{\xint@firstoftwo@andstop }% -\def\XINT@min@zeroplus #1#2#3#4{\xint@secondoftwo@andstop }% -\def\XINT@min@pluszero #1#2#3#4{\xint@firstoftwo@andstop }% -\def\XINT@min@minusplus #1#2#3#4{\xint@secondoftwo@andstop }% -\def\XINT@min@plusminus #1#2#3#4{\xint@firstoftwo@andstop }% -\def\XINT@min@plusplus #1#2#3#4% +\def\XINT_min_zerozero #1#2#3#4{\xint_firstoftwo_andstop }% +\def\XINT_min_zeroplus #1#2#3#4{\xint_secondoftwo_andstop }% +\def\XINT_min_pluszero #1#2#3#4{\xint_firstoftwo_andstop }% +\def\XINT_min_minusplus #1#2#3#4{\xint_secondoftwo_andstop }% +\def\XINT_min_plusminus #1#2#3#4{\xint_firstoftwo_andstop }% +\def\XINT_min_plusplus #1#2#3#4% {% - \ifodd\XINT@Geq {#4#2}{#3#1} - \expandafter\xint@secondoftwo@andstop + \ifodd\XINT_Geq {#4#2}{#3#1} + \expandafter\xint_secondoftwo_andstop \else - \expandafter\xint@firstoftwo@andstop + \expandafter\xint_firstoftwo_andstop \fi }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% #3=-, #4=-, #1 = |B| = -B, #2 = |A| = -A -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb+#3=-, #4=-, #1 = |B| = -B, #2 = |A| = -A+ % \begin{macrocode} -\def\XINT@min@minusminus #1#2#3#4% +\def\XINT_min_minusminus #1#2#3#4% {% - \ifodd\XINT@Geq {#1}{#2} - \expandafter\xint@secondoftwo@andstop + \ifodd\XINT_Geq {#1}{#2} + \expandafter\xint_secondoftwo_andstop \else - \expandafter\xint@firstoftwo@andstop + \expandafter\xint_firstoftwo_andstop \fi }% % \end{macrocode} % \subsection{\csh{xintSum}, \csh{xintSumExpr}} -% \begin{verbatim} -% \xintSum {{a}{b}...{z}} -% \xintSumExpr {a}{b}...{z}\relax +% \lverb|& +% \xintSum {{a}{b}...{z}}$\ +% \xintSumExpr {a}{b}...{z}\relax$\ % 1.03 (drastically) simplifies and makes the routines more efficient (for big % computations). Also the way \xintSum and \xintSumExpr ...\relax are related. % has been modified. Now \xintSumExpr \z \relax is accepted input when % \z expands to a list of braced terms (prior only \xintSum {\z} or \xintSum \z -% was possible). -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% was possible). | % \begin{macrocode} \def\xintiSum {\romannumeral0\xintisum }% \def\xintisum #1{\xintisumexpr #1\relax }% \def\xintiSumExpr {\romannumeral0\xintisumexpr }% -\def\xintisumexpr {\expandafter\XINT@sumexpr\romannumeral-`0}% +\def\xintisumexpr {\expandafter\XINT_sumexpr\romannumeral-`0}% \let\xintSum\xintiSum \let\xintsum\xintisum \let\xintSumExpr\xintiSumExpr \let\xintsumexpr\xintisumexpr -\def\XINT@sumexpr {\XINT@sum@loop {0000}{0000}}% -\def\XINT@sum@loop #1#2#3% +\def\XINT_sumexpr {\XINT_sum_loop {0000}{0000}}% +\def\XINT_sum_loop #1#2#3% {% - \expandafter\XINT@sum@checksign\romannumeral-`0#3\Z {#1}{#2}% + \expandafter\XINT_sum_checksign\romannumeral-`0#3\Z {#1}{#2}% }% -\def\XINT@sum@checksign #1% +\def\XINT_sum_checksign #1% {% - \xint@relax #1\XINT@sum@finished\relax - \xint@zero #1\XINT@sum@skipzeroinput0% - \xint@UDsignfork - #1\dummy \XINT@sum@N - -\dummy {\XINT@sum@P #1}% - \xint@UDkrof + \xint_gob_til_relax #1\XINT_sum_finished\relax + \xint_gob_til_zero #1\XINT_sum_skipzeroinput0% + \xint_UDsignfork + #1\dummy \XINT_sum_N + -\dummy {\XINT_sum_P #1}% + \krof }% -\def\XINT@sum@finished #1\Z #2#3% +\def\XINT_sum_finished #1\Z #2#3% {% - \XINT@sub@A 1{}#3\W\X\Y\Z #2\W\X\Y\Z + \XINT_sub_A 1{}#3\W\X\Y\Z #2\W\X\Y\Z }% -\def\XINT@sum@skipzeroinput #1\xint@UDkrof #2\Z {\XINT@sum@loop }% -\def\XINT@sum@P #1\Z #2% +\def\XINT_sum_skipzeroinput #1\krof #2\Z {\XINT_sum_loop }% +\def\XINT_sum_P #1\Z #2% {% - \expandafter\XINT@sum@loop\expandafter + \expandafter\XINT_sum_loop\expandafter {\romannumeral0\expandafter - \XINT@addr@A\expandafter0\expandafter{\expandafter}% - \romannumeral0\XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z + \XINT_addr_A\expandafter0\expandafter{\expandafter}% + \romannumeral0\XINT_RQ {}#1\R\R\R\R\R\R\R\R\Z \W\X\Y\Z #2\W\X\Y\Z }% }% -\def\XINT@sum@N #1\Z #2#3% +\def\XINT_sum_N #1\Z #2#3% {% - \expandafter\XINT@sum@NN\expandafter + \expandafter\XINT_sum_NN\expandafter {\romannumeral0\expandafter - \XINT@addr@A\expandafter0\expandafter{\expandafter}% - \romannumeral0\XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z + \XINT_addr_A\expandafter0\expandafter{\expandafter}% + \romannumeral0\XINT_RQ {}#1\R\R\R\R\R\R\R\R\Z \W\X\Y\Z #3\W\X\Y\Z }{#2}% }% -\def\XINT@sum@NN #1#2{\XINT@sum@loop {#2}{#1}}% +\def\XINT_sum_NN #1#2{\XINT_sum_loop {#2}{#1}}% % \end{macrocode} % \subsection{\csh{xintMul}} % \begin{macrocode} \def\xintiMul {\romannumeral0\xintimul }% \def\xintimul #1% {% - \expandafter\xint@mul\expandafter {\romannumeral-`0#1}% + \expandafter\xint_mul\expandafter {\romannumeral-`0#1}% }% \let\xintMul\xintiMul \let\xintmul\xintimul -\def\xint@mul #1#2% +\def\xint_mul #1#2% {% - \expandafter\XINT@mul@fork \romannumeral-`0#2\Z #1\Z + \expandafter\XINT_mul_fork \romannumeral-`0#2\Z #1\Z }% -\def\XINT@Mul #1#2{\romannumeral0\XINT@mul@fork #2\Z #1\Z }% +\def\XINT_Mul #1#2{\romannumeral0\XINT_mul_fork #2\Z #1\Z }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% MULTIPLICATION -% Ici #1#2 = 2e input et #3#4 = 1er input +% \lverb|& +% MULTIPLICATION$\ +% Ici #1#2 = 2e input et #3#4 = 1er input $\ % Release 1.03 adds some overhead to first compute and compare the % lengths of the two inputs. The algorithm is asymmetrical and whether % the first input is the longest or the shortest sometimes has a strong @@ -6267,473 +6387,454 @@ first place. % order does not matter as it is decided by the routine what is best. % This is important for the extension to fractions, as there is no way % then to generally control or guess the most frequent sizes of the -% inputs besides actually computing their lengths. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% inputs besides actually computing their lengths. | % \begin{macrocode} -\def\XINT@mul@fork #1#2\Z #3#4\Z +\def\XINT_mul_fork #1#2\Z #3#4\Z {% - \xint@UDzerofork - #1\dummy \XINT@mul@zero - #3\dummy \XINT@mul@zero + \xint_UDzerofork + #1\dummy \XINT_mul_zero + #3\dummy \XINT_mul_zero 0\dummy - {\xint@UDsignsfork - #1#3\dummy \XINT@mul@minusminus % #1 = #3 = - - #1-\dummy {\XINT@mul@minusplus #3}% % #1 = - - #3-\dummy {\XINT@mul@plusminus #1}% % #3 = - - --\dummy {\XINT@mul@plusplus #1#3}% - \xint@UDkrof }% - \xint@UDkrof + {\xint_UDsignsfork + #1#3\dummy \XINT_mul_minusminus % #1 = #3 = - + #1-\dummy {\XINT_mul_minusplus #3}% % #1 = - + #3-\dummy {\XINT_mul_plusminus #1}% % #3 = - + --\dummy {\XINT_mul_plusplus #1#3}% + \krof }% + \krof {#2}{#4}% }% -\def\XINT@mul@zero #1#2{ 0}% -\def\XINT@mul@minusminus #1#2% +\def\XINT_mul_zero #1#2{ 0}% +\def\XINT_mul_minusminus #1#2% {% - \expandafter\XINT@mul@choice@a - \expandafter{\romannumeral0\XINT@length {#2}}% - {\romannumeral0\XINT@length {#1}}{#1}{#2}% + \expandafter\XINT_mul_choice_a + \expandafter{\romannumeral0\XINT_length {#2}}% + {\romannumeral0\XINT_length {#1}}{#1}{#2}% }% -\def\XINT@mul@minusplus #1#2#3% +\def\XINT_mul_minusplus #1#2#3% {% - \expandafter\xint@minus@andstop\romannumeral0\expandafter - \XINT@mul@choice@a - \expandafter{\romannumeral0\XINT@length {#1#3}}% - {\romannumeral0\XINT@length {#2}}{#2}{#1#3}% + \expandafter\xint_minus_andstop\romannumeral0\expandafter + \XINT_mul_choice_a + \expandafter{\romannumeral0\XINT_length {#1#3}}% + {\romannumeral0\XINT_length {#2}}{#2}{#1#3}% }% -\def\XINT@mul@plusminus #1#2#3% +\def\XINT_mul_plusminus #1#2#3% {% - \expandafter\xint@minus@andstop\romannumeral0\expandafter - \XINT@mul@choice@a - \expandafter{\romannumeral0\XINT@length {#3}}% - {\romannumeral0\XINT@length {#1#2}}{#1#2}{#3}% + \expandafter\xint_minus_andstop\romannumeral0\expandafter + \XINT_mul_choice_a + \expandafter{\romannumeral0\XINT_length {#3}}% + {\romannumeral0\XINT_length {#1#2}}{#1#2}{#3}% }% -\def\XINT@mul@plusplus #1#2#3#4% +\def\XINT_mul_plusplus #1#2#3#4% {% - \expandafter\XINT@mul@choice@a - \expandafter{\romannumeral0\XINT@length {#2#4}}% - {\romannumeral0\XINT@length {#1#3}}{#1#3}{#2#4}% + \expandafter\XINT_mul_choice_a + \expandafter{\romannumeral0\XINT_length {#2#4}}% + {\romannumeral0\XINT_length {#1#3}}{#1#3}{#2#4}% }% -\def\XINT@mul@choice@a #1#2% +\def\XINT_mul_choice_a #1#2% {% - \expandafter\XINT@mul@choice@b\expandafter{#2}{#1}% + \expandafter\XINT_mul_choice_b\expandafter{#2}{#1}% }% -\def\XINT@mul@choice@b #1#2% +\def\XINT_mul_choice_b #1#2% {% \ifnum #1<5 - \expandafter\XINT@mul@choice@littlebyfirst + \expandafter\XINT_mul_choice_littlebyfirst \else \ifnum #2<5 - \expandafter\expandafter\expandafter\XINT@mul@choice@littlebysecond + \expandafter\expandafter\expandafter\XINT_mul_choice_littlebysecond \else - \expandafter\expandafter\expandafter\XINT@mul@choice@compare + \expandafter\expandafter\expandafter\XINT_mul_choice_compare \fi \fi {#1}{#2}% }% -\def\XINT@mul@choice@littlebyfirst #1#2#3#4% +\def\XINT_mul_choice_littlebyfirst #1#2#3#4% {% - \expandafter\XINT@mul@M + \expandafter\XINT_mul_M \expandafter{\the\numexpr #3\expandafter}% - \romannumeral0\XINT@RQ {}#4\R\R\R\R\R\R\R\R\Z \Z\Z\Z\Z + \romannumeral0\XINT_RQ {}#4\R\R\R\R\R\R\R\R\Z \Z\Z\Z\Z }% -\def\XINT@mul@choice@littlebysecond #1#2#3#4% +\def\XINT_mul_choice_littlebysecond #1#2#3#4% {% - \expandafter\XINT@mul@M + \expandafter\XINT_mul_M \expandafter{\the\numexpr #4\expandafter}% - \romannumeral0\XINT@RQ {}#3\R\R\R\R\R\R\R\R\Z \Z\Z\Z\Z + \romannumeral0\XINT_RQ {}#3\R\R\R\R\R\R\R\R\Z \Z\Z\Z\Z }% -\def\XINT@mul@choice@compare #1#2% +\def\XINT_mul_choice_compare #1#2% {% \ifnum #1>#2 - \expandafter \XINT@mul@choice@i + \expandafter \XINT_mul_choice_i \else - \expandafter \XINT@mul@choice@ii + \expandafter \XINT_mul_choice_ii \fi {#1}{#2}% }% -\def\XINT@mul@choice@i #1#2% +\def\XINT_mul_choice_i #1#2% {% \ifnum #1<\numexpr\ifcase \numexpr (#2-3)/4\relax \or 330\or 168\or 109\or 80\or 66\or 52\else 0\fi\relax - \expandafter\XINT@mul@choice@same + \expandafter\XINT_mul_choice_same \else - \expandafter\XINT@mul@choice@permute + \expandafter\XINT_mul_choice_permute \fi }% -\def\XINT@mul@choice@ii #1#2% +\def\XINT_mul_choice_ii #1#2% {% \ifnum #2<\numexpr\ifcase \numexpr (#1-3)/4\relax \or 330\or 168\or 109\or 80\or 66\or 52\else 0\fi\relax - \expandafter\XINT@mul@choice@permute + \expandafter\XINT_mul_choice_permute \else - \expandafter\XINT@mul@choice@same + \expandafter\XINT_mul_choice_same \fi }% -\def\XINT@mul@choice@same #1#2% +\def\XINT_mul_choice_same #1#2% {% - \expandafter\XINT@mul@enter - \romannumeral0\XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z + \expandafter\XINT_mul_enter + \romannumeral0\XINT_RQ {}#1\R\R\R\R\R\R\R\R\Z \W\X\Y\Z #2\W\X\Y\Z }% -\def\XINT@mul@choice@permute #1#2% +\def\XINT_mul_choice_permute #1#2% {% - \expandafter\XINT@mul@enter - \romannumeral0\XINT@RQ {}#2\R\R\R\R\R\R\R\R\Z + \expandafter\XINT_mul_enter + \romannumeral0\XINT_RQ {}#2\R\R\R\R\R\R\R\R\Z \W\X\Y\Z #1\W\X\Y\Z }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% Cette portion de routine d'addition se branche directement sur @addr@ lorsque +% \lverb|& +% Cette portion de routine d'addition se branche directement sur _addr_ +% lorsque % le premier nombre est épuisé, ce qui est garanti arriver avant le second % nombre. Elle produit son résultat toujours sur 4n, renversé. Ses deux inputs -% sont garantis sur 4n. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% sont garantis sur 4n.| % \begin{macrocode} -\def\XINT@mul@Ar #1#2#3#4#5#6% +\def\XINT_mul_Ar #1#2#3#4#5#6% {% - \xint@z #6\xint@mul@br\Z\XINT@mul@Br #1{#6#5#4#3}{#2}% + \xint_gob_til_z #6\xint_mul_br\Z\XINT_mul_Br #1{#6#5#4#3}{#2}% }% -\def\xint@mul@br\Z\XINT@mul@Br #1#2% +\def\xint_mul_br\Z\XINT_mul_Br #1#2% {% - \XINT@addr@AC@checkcarry #1% + \XINT_addr_AC_checkcarry #1% }% -\def\XINT@mul@Br #1#2#3#4\W\X\Y\Z #5#6#7#8% +\def\XINT_mul_Br #1#2#3#4\W\X\Y\Z #5#6#7#8% {% - \expandafter\XINT@mul@ABEAr + \expandafter\XINT_mul_ABEAr \the\numexpr #1+10#2+#8#7#6#5\relax.{#3}#4\W\X\Y\Z }% -\def\XINT@mul@ABEAr #1#2#3#4#5#6.#7% +\def\XINT_mul_ABEAr #1#2#3#4#5#6.#7% {% - \XINT@mul@Ar #2{#7#6#5#4#3}% + \XINT_mul_Ar #2{#7#6#5#4#3}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} +% \lverb|& % << Petite >> multiplication. -% mul@Mr renvoie le résultat *à l'envers*, sur *4n* -% \romannumeral0\XINT@mul@Mr {}\Z\Z\Z\Z +% mul_Mr renvoie le résultat *à l'envers*, sur *4n*$\ +% \romannumeral0\XINT_mul_Mr {}\Z\Z\Z\Z$\ % Fait la multiplication de par , qui est < 10000. -% est présenté *à l'envers*, sur *4n*. Lorsque vaut 0, donne 0000. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% est présenté *à l'envers*, sur *4n*. Lorsque vaut 0, donne 0000.| % \begin{macrocode} -\def\XINT@mul@Mr #1% +\def\XINT_mul_Mr #1% {% - \expandafter\XINT@mul@Mr@checkifzeroorone\expandafter{\the\numexpr #1}% + \expandafter\XINT_mul_Mr_checkifzeroorone\expandafter{\the\numexpr #1}% }% -\def\XINT@mul@Mr@checkifzeroorone #1% +\def\XINT_mul_Mr_checkifzeroorone #1% {% \ifcase #1 - \expandafter\XINT@mul@Mr@zero + \expandafter\XINT_mul_Mr_zero \or - \expandafter\XINT@mul@Mr@one + \expandafter\XINT_mul_Mr_one \else - \expandafter\XINT@mul@Nr + \expandafter\XINT_mul_Nr \fi {0000}{}{#1}% }% -\def\XINT@mul@Mr@zero #1\Z\Z\Z\Z { 0000}% -\def\XINT@mul@Mr@one #1#2#3#4\Z\Z\Z\Z { #4}% -\def\XINT@mul@Nr #1#2#3#4#5#6#7% +\def\XINT_mul_Mr_zero #1\Z\Z\Z\Z { 0000}% +\def\XINT_mul_Mr_one #1#2#3#4\Z\Z\Z\Z { #4}% +\def\XINT_mul_Nr #1#2#3#4#5#6#7% {% - \xint@z #4\xint@mul@pr\Z\XINT@mul@Pr {#1}{#3}{#7#6#5#4}{#2}{#3}% + \xint_gob_til_z #4\xint_mul_pr\Z\XINT_mul_Pr {#1}{#3}{#7#6#5#4}{#2}{#3}% }% -\def\XINT@mul@Pr #1#2#3% +\def\XINT_mul_Pr #1#2#3% {% - \expandafter\XINT@mul@Lr\the\numexpr 10000#1+#2*#3\relax + \expandafter\XINT_mul_Lr\the\numexpr 10000#1+#2*#3\relax }% -\def\XINT@mul@Lr 1#1#2#3#4#5#6#7#8#9% +\def\XINT_mul_Lr 1#1#2#3#4#5#6#7#8#9% {% - \XINT@mul@Nr {#1#2#3#4}{#9#8#7#6#5}% + \XINT_mul_Nr {#1#2#3#4}{#9#8#7#6#5}% }% -\def\xint@mul@pr\Z\XINT@mul@Pr #1#2#3#4#5% +\def\xint_mul_pr\Z\XINT_mul_Pr #1#2#3#4#5% {% - \xint@quatrezeros #1\XINT@mul@Mr@end@nocarry 0000% - \XINT@mul@Mr@end@carry #1{#4}% + \xint_gob_til_zeros_iv #1\XINT_mul_Mr_end_nocarry 0000% + \XINT_mul_Mr_end_carry #1{#4}% }% -\def\XINT@mul@Mr@end@nocarry 0000\XINT@mul@Mr@end@carry 0000#1{ #1}% -\def\XINT@mul@Mr@end@carry #1#2#3#4#5{ #5#4#3#2#1}% +\def\XINT_mul_Mr_end_nocarry 0000\XINT_mul_Mr_end_carry 0000#1{ #1}% +\def\XINT_mul_Mr_end_carry #1#2#3#4#5{ #5#4#3#2#1}% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} +% \lverb|& % << Petite >> multiplication. -%renvoie le résultat *à l'endroit*, avec *nettoyage des leading zéros*. -% \romannumeral0\XINT@mul@M {}\Z\Z\Z\Z +% renvoie le résultat *à l'endroit*, avec *nettoyage des leading zéros*.$\ +% \romannumeral0\XINT_mul_M {}\Z\Z\Z\Z$\ % Fait la multiplication de par , qui est < 10000. -% est présenté *à l'envers*, sur *4n*. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% est présenté *à l'envers*, sur *4n*. | % \begin{macrocode} -\def\XINT@mul@M #1% +\def\XINT_mul_M #1% {% - \expandafter\XINT@mul@M@checkifzeroorone\expandafter{\the\numexpr #1}% + \expandafter\XINT_mul_M_checkifzeroorone\expandafter{\the\numexpr #1}% }% -\def\XINT@mul@M@checkifzeroorone #1% +\def\XINT_mul_M_checkifzeroorone #1% {% \ifcase #1 - \expandafter\XINT@mul@M@zero + \expandafter\XINT_mul_M_zero \or - \expandafter\XINT@mul@M@one + \expandafter\XINT_mul_M_one \else - \expandafter\XINT@mul@N + \expandafter\XINT_mul_N \fi {0000}{}{#1}% }% -\def\XINT@mul@M@zero #1\Z\Z\Z\Z { 0}% -\def\XINT@mul@M@one #1#2#3#4\Z\Z\Z\Z +\def\XINT_mul_M_zero #1\Z\Z\Z\Z { 0}% +\def\XINT_mul_M_one #1#2#3#4\Z\Z\Z\Z {% - \expandafter\xint@cleanupzeros@andstop\romannumeral0\XINT@rev{#4}% + \expandafter\xint_cleanupzeros_andstop\romannumeral0\XINT_rev{#4}% }% -\def\XINT@mul@N #1#2#3#4#5#6#7% +\def\XINT_mul_N #1#2#3#4#5#6#7% {% - \xint@z #4\xint@mul@p\Z\XINT@mul@P {#1}{#3}{#7#6#5#4}{#2}{#3}% + \xint_gob_til_z #4\xint_mul_p\Z\XINT_mul_P {#1}{#3}{#7#6#5#4}{#2}{#3}% }% -\def\XINT@mul@P #1#2#3% +\def\XINT_mul_P #1#2#3% {% - \expandafter\XINT@mul@L\the\numexpr 10000#1+#2*#3\relax + \expandafter\XINT_mul_L\the\numexpr 10000#1+#2*#3\relax }% -\def\XINT@mul@L 1#1#2#3#4#5#6#7#8#9% +\def\XINT_mul_L 1#1#2#3#4#5#6#7#8#9% {% - \XINT@mul@N {#1#2#3#4}{#5#6#7#8#9}% + \XINT_mul_N {#1#2#3#4}{#5#6#7#8#9}% }% -\def\xint@mul@p\Z\XINT@mul@P #1#2#3#4#5% +\def\xint_mul_p\Z\XINT_mul_P #1#2#3#4#5% {% - \XINT@mul@M@end #1#4% + \XINT_mul_M_end #1#4% }% -\def\XINT@mul@M@end #1#2#3#4#5#6#7#8% +\def\XINT_mul_M_end #1#2#3#4#5#6#7#8% {% \expandafter\space\the\numexpr #1#2#3#4#5#6#7#8\relax }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} +% \lverb|& % Routine de multiplication principale -% délimiteur \W\X\Y\Z +% délimiteur \W\X\Y\Z$\ % Le résultat partiel est toujours maintenu avec significatif à -% droite et il a un nombre multiple de 4 de chiffres -% \romannumeral0\XINT@mul@enter \W\X\Y\Z \W\X\Y\Z +% droite et il a un nombre multiple de 4 de chiffres$\ +% \romannumeral0\XINT_mul_enter \W\X\Y\Z \W\X\Y\Z$\ % avec *renversé*, *longueur 4n* (zéros éventuellement ajoutés % au-delà du chiffre le plus significatif) % et dans l'ordre *normal*, et pas forcément longueur 4n. -% pas de signes -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% pas de signes| % \begin{macrocode} -\def\XINT@mul@enter #1\W\X\Y\Z #2#3#4#5% +\def\XINT_mul_enter #1\W\X\Y\Z #2#3#4#5% {% - \xint@w - #5\xint@mul@enterw - #4\xint@mul@enterx - #3\xint@mul@entery - #2\xint@mul@enterz - \W\XINT@mul@start {#2#3#4#5}#1\W\X\Y\Z + \xint_gob_til_w + #5\xint_mul_enterw + #4\xint_mul_enterx + #3\xint_mul_entery + #2\xint_mul_enterz + \W\XINT_mul_start {#2#3#4#5}#1\W\X\Y\Z }% -\def\xint@mul@enterw - #1\xint@mul@enterx - #2\xint@mul@entery - #3\xint@mul@enterz - \W\XINT@mul@start #4#5\W\X\Y\Z \X\Y\Z +\def\xint_mul_enterw + #1\xint_mul_enterx + #2\xint_mul_entery + #3\xint_mul_enterz + \W\XINT_mul_start #4#5\W\X\Y\Z \X\Y\Z {% - \XINT@mul@M {#3#2#1}#5\Z\Z\Z\Z + \XINT_mul_M {#3#2#1}#5\Z\Z\Z\Z }% -\def\xint@mul@enterx - #1\xint@mul@entery - #2\xint@mul@enterz - \W\XINT@mul@start #3#4\W\X\Y\Z \Y\Z +\def\xint_mul_enterx + #1\xint_mul_entery + #2\xint_mul_enterz + \W\XINT_mul_start #3#4\W\X\Y\Z \Y\Z {% - \XINT@mul@M {#2#1}#4\Z\Z\Z\Z + \XINT_mul_M {#2#1}#4\Z\Z\Z\Z }% -\def\xint@mul@entery - #1\xint@mul@enterz - \W\XINT@mul@start #2#3\W\X\Y\Z \Z +\def\xint_mul_entery + #1\xint_mul_enterz + \W\XINT_mul_start #2#3\W\X\Y\Z \Z {% - \XINT@mul@M {#1}#3\Z\Z\Z\Z + \XINT_mul_M {#1}#3\Z\Z\Z\Z }% -\def\XINT@mul@start #1#2\W\X\Y\Z +\def\XINT_mul_start #1#2\W\X\Y\Z {% - \expandafter\XINT@mul@main\expandafter - {\romannumeral0\XINT@mul@Mr {#1}#2\Z\Z\Z\Z}#2\W\X\Y\Z + \expandafter\XINT_mul_main\expandafter + {\romannumeral0\XINT_mul_Mr {#1}#2\Z\Z\Z\Z}#2\W\X\Y\Z }% -\def\XINT@mul@main #1#2\W\X\Y\Z #3#4#5#6% +\def\XINT_mul_main #1#2\W\X\Y\Z #3#4#5#6% {% - \xint@w - #6\xint@mul@mainw - #5\xint@mul@mainx - #4\xint@mul@mainy - #3\xint@mul@mainz - \W\XINT@mul@compute {#1}{#3#4#5#6}#2\W\X\Y\Z + \xint_gob_til_w + #6\xint_mul_mainw + #5\xint_mul_mainx + #4\xint_mul_mainy + #3\xint_mul_mainz + \W\XINT_mul_compute {#1}{#3#4#5#6}#2\W\X\Y\Z }% -\def\XINT@mul@compute #1#2#3\W\X\Y\Z +\def\XINT_mul_compute #1#2#3\W\X\Y\Z {% - \expandafter\XINT@mul@main\expandafter + \expandafter\XINT_mul_main\expandafter {\romannumeral0\expandafter - \XINT@mul@Ar\expandafter0\expandafter{\expandafter}% - \romannumeral0\XINT@mul@Mr {#2}#3\Z\Z\Z\Z + \XINT_mul_Ar\expandafter0\expandafter{\expandafter}% + \romannumeral0\XINT_mul_Mr {#2}#3\Z\Z\Z\Z \W\X\Y\Z 0000#1\W\X\Y\Z }#3\W\X\Y\Z }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} +% \lverb|& % Ici, le deuxième nombre se termine. Fin du calcul. On utilise la variante -% \XINT@addm@A de l'addition car on sait que le deuxième terme est au moins +% \XINT_addm_A de l'addition car on sait que le deuxième terme est au moins % aussi long que le premier. Lorsque le multiplicateur avait longueur 4n, la % dernière addition a fourni le résultat à l'envers, il faut donc encore le -% renverser. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% renverser. | % \begin{macrocode} -\def\xint@mul@mainw - #1\xint@mul@mainx - #2\xint@mul@mainy - #3\xint@mul@mainz - \W\XINT@mul@compute #4#5#6\W\X\Y\Z \X\Y\Z +\def\xint_mul_mainw + #1\xint_mul_mainx + #2\xint_mul_mainy + #3\xint_mul_mainz + \W\XINT_mul_compute #4#5#6\W\X\Y\Z \X\Y\Z {% - \expandafter\XINT@addm@A \expandafter0\expandafter{\expandafter}% + \expandafter\XINT_addm_A \expandafter0\expandafter{\expandafter}% \romannumeral0% - \XINT@mul@Mr {#3#2#1}#6\Z\Z\Z\Z + \XINT_mul_Mr {#3#2#1}#6\Z\Z\Z\Z \W\X\Y\Z 000#4\W\X\Y\Z }% -\def\xint@mul@mainx - #1\xint@mul@mainy - #2\xint@mul@mainz - \W\XINT@mul@compute #3#4#5\W\X\Y\Z \Y\Z +\def\xint_mul_mainx + #1\xint_mul_mainy + #2\xint_mul_mainz + \W\XINT_mul_compute #3#4#5\W\X\Y\Z \Y\Z {% - \expandafter\XINT@addm@A\expandafter + \expandafter\XINT_addm_A\expandafter 0\expandafter{\expandafter}% - \romannumeral0\XINT@mul@Mr {#2#1}#5\Z\Z\Z\Z + \romannumeral0\XINT_mul_Mr {#2#1}#5\Z\Z\Z\Z \W\X\Y\Z 00#3\W\X\Y\Z }% -\def\xint@mul@mainy - #1\xint@mul@mainz - \W\XINT@mul@compute #2#3#4\W\X\Y\Z \Z +\def\xint_mul_mainy + #1\xint_mul_mainz + \W\XINT_mul_compute #2#3#4\W\X\Y\Z \Z {% - \expandafter\XINT@addm@A\expandafter + \expandafter\XINT_addm_A\expandafter 0\expandafter{\expandafter}% - \romannumeral0\XINT@mul@Mr {#1}#4\Z\Z\Z\Z + \romannumeral0\XINT_mul_Mr {#1}#4\Z\Z\Z\Z \W\X\Y\Z 0#2\W\X\Y\Z }% -\def\xint@mul@mainz\W\XINT@mul@compute #1#2#3\W\X\Y\Z +\def\xint_mul_mainz\W\XINT_mul_compute #1#2#3\W\X\Y\Z {% - \expandafter\xint@cleanupzeros@andstop\romannumeral0\XINT@rev{#1}% + \expandafter\xint_cleanupzeros_andstop\romannumeral0\XINT_rev{#1}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% Variante de la Multiplication -% \romannumeral0\XINT@mulr@enter \W\X\Y\Z \W\X\Y\Z +% \lverb|& +% Variante de la Multiplication$\ +% \romannumeral0\XINT_mulr_enter \W\X\Y\Z \W\X\Y\Z$\ % Ici est à l'envers sur 4n, et est à l'endroit, pas sur 4n, comme -% dans \XINT@mul@enter, mais le résultat est lui-même fourni *à l'envers*, sur -% *4n* (en faisant attention de ne pas avoir 0000 à la fin). -% Utilisé par le calcul des puissances et aussi par la division. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% dans \XINT_mul_enter, mais le résultat est lui-même fourni *à l'envers*, sur +% *4n* (en faisant attention de ne pas avoir 0000 à la fin).$\ +% Utilisé par le calcul des puissances et aussi par la division.| % \begin{macrocode} -\def\XINT@mulr@enter #1\W\X\Y\Z #2#3#4#5% +\def\XINT_mulr_enter #1\W\X\Y\Z #2#3#4#5% {% - \xint@w - #5\xint@mulr@enterw - #4\xint@mulr@enterx - #3\xint@mulr@entery - #2\xint@mulr@enterz - \W\XINT@mulr@start {#2#3#4#5}#1\W\X\Y\Z + \xint_gob_til_w + #5\xint_mulr_enterw + #4\xint_mulr_enterx + #3\xint_mulr_entery + #2\xint_mulr_enterz + \W\XINT_mulr_start {#2#3#4#5}#1\W\X\Y\Z }% -\def\xint@mulr@enterw - #1\xint@mulr@enterx - #2\xint@mulr@entery - #3\xint@mulr@enterz - \W\XINT@mulr@start #4#5\W\X\Y\Z \X\Y\Z +\def\xint_mulr_enterw + #1\xint_mulr_enterx + #2\xint_mulr_entery + #3\xint_mulr_enterz + \W\XINT_mulr_start #4#5\W\X\Y\Z \X\Y\Z {% - \XINT@mul@Mr {#3#2#1}#5\Z\Z\Z\Z + \XINT_mul_Mr {#3#2#1}#5\Z\Z\Z\Z }% -\def\xint@mulr@enterx - #1\xint@mulr@entery - #2\xint@mulr@enterz - \W\XINT@mulr@start #3#4\W\X\Y\Z \Y\Z +\def\xint_mulr_enterx + #1\xint_mulr_entery + #2\xint_mulr_enterz + \W\XINT_mulr_start #3#4\W\X\Y\Z \Y\Z {% - \XINT@mul@Mr {#2#1}#4\Z\Z\Z\Z + \XINT_mul_Mr {#2#1}#4\Z\Z\Z\Z }% -\def\xint@mulr@entery - #1\xint@mulr@enterz - \W\XINT@mulr@start #2#3\W\X\Y\Z \Z +\def\xint_mulr_entery + #1\xint_mulr_enterz + \W\XINT_mulr_start #2#3\W\X\Y\Z \Z {% - \XINT@mul@Mr {#1}#3\Z\Z\Z\Z + \XINT_mul_Mr {#1}#3\Z\Z\Z\Z }% -\def\XINT@mulr@start #1#2\W\X\Y\Z +\def\XINT_mulr_start #1#2\W\X\Y\Z {% - \expandafter\XINT@mulr@main\expandafter - {\romannumeral0\XINT@mul@Mr {#1}#2\Z\Z\Z\Z }#2\W\X\Y\Z + \expandafter\XINT_mulr_main\expandafter + {\romannumeral0\XINT_mul_Mr {#1}#2\Z\Z\Z\Z }#2\W\X\Y\Z }% -\def\XINT@mulr@main #1#2\W\X\Y\Z #3#4#5#6% +\def\XINT_mulr_main #1#2\W\X\Y\Z #3#4#5#6% {% - \xint@w - #6\xint@mulr@mainw - #5\xint@mulr@mainx - #4\xint@mulr@mainy - #3\xint@mulr@mainz - \W\XINT@mulr@compute {#1}{#3#4#5#6}#2\W\X\Y\Z + \xint_gob_til_w + #6\xint_mulr_mainw + #5\xint_mulr_mainx + #4\xint_mulr_mainy + #3\xint_mulr_mainz + \W\XINT_mulr_compute {#1}{#3#4#5#6}#2\W\X\Y\Z }% -\def\XINT@mulr@compute #1#2#3\W\X\Y\Z +\def\XINT_mulr_compute #1#2#3\W\X\Y\Z {% - \expandafter\XINT@mulr@main\expandafter + \expandafter\XINT_mulr_main\expandafter {\romannumeral0\expandafter - \XINT@mul@Ar \expandafter0\expandafter{\expandafter}% - \romannumeral0\XINT@mul@Mr {#2}#3\Z\Z\Z\Z \W\X\Y\Z 0000#1\W\X\Y\Z + \XINT_mul_Ar \expandafter0\expandafter{\expandafter}% + \romannumeral0\XINT_mul_Mr {#2}#3\Z\Z\Z\Z \W\X\Y\Z 0000#1\W\X\Y\Z }#3\W\X\Y\Z }% -\def\xint@mulr@mainw - #1\xint@mulr@mainx - #2\xint@mulr@mainy - #3\xint@mulr@mainz - \W\XINT@mulr@compute #4#5#6\W\X\Y\Z \X\Y\Z +\def\xint_mulr_mainw + #1\xint_mulr_mainx + #2\xint_mulr_mainy + #3\xint_mulr_mainz + \W\XINT_mulr_compute #4#5#6\W\X\Y\Z \X\Y\Z {% - \expandafter\XINT@addp@A + \expandafter\XINT_addp_A \expandafter0\expandafter{\expandafter}% - \romannumeral0\XINT@mul@Mr {#3#2#1}#6\Z\Z\Z\Z + \romannumeral0\XINT_mul_Mr {#3#2#1}#6\Z\Z\Z\Z \W\X\Y\Z 000#4\W\X\Y\Z }% -\def\xint@mulr@mainx - #1\xint@mulr@mainy - #2\xint@mulr@mainz - \W\XINT@mulr@compute #3#4#5\W\X\Y\Z \Y\Z +\def\xint_mulr_mainx + #1\xint_mulr_mainy + #2\xint_mulr_mainz + \W\XINT_mulr_compute #3#4#5\W\X\Y\Z \Y\Z {% - \expandafter\XINT@addp@A + \expandafter\XINT_addp_A \expandafter0\expandafter{\expandafter}% - \romannumeral0\XINT@mul@Mr {#2#1}#5\Z\Z\Z\Z + \romannumeral0\XINT_mul_Mr {#2#1}#5\Z\Z\Z\Z \W\X\Y\Z 00#3\W\X\Y\Z }% -\def\xint@mulr@mainy - #1\xint@mulr@mainz - \W\XINT@mulr@compute #2#3#4\W\X\Y\Z \Z +\def\xint_mulr_mainy + #1\xint_mulr_mainz + \W\XINT_mulr_compute #2#3#4\W\X\Y\Z \Z {% - \expandafter\XINT@addp@A + \expandafter\XINT_addp_A \expandafter0\expandafter{\expandafter}% - \romannumeral0\XINT@mul@Mr {#1}#4\Z\Z\Z\Z + \romannumeral0\XINT_mul_Mr {#1}#4\Z\Z\Z\Z \W\X\Y\Z 0#2\W\X\Y\Z }% -\def\xint@mulr@mainz\W\XINT@mulr@compute #1#2#3\W\X\Y\Z { #1}% +\def\xint_mulr_mainz\W\XINT_mulr_compute #1#2#3\W\X\Y\Z { #1}% % \end{macrocode} % \subsection{\csh{xintSqr}} % \begin{macrocode} \def\xintiSqr {\romannumeral0\xintisqr }% \def\xintisqr #1% {% - \expandafter\XINT@sqr\expandafter {\romannumeral0\xintiabs{#1}}% + \expandafter\XINT_sqr\expandafter {\romannumeral0\xintiabs{#1}}% }% \let\xintSqr\xintiSqr \let\xintsqr\xintisqr -\def\XINT@sqr #1% +\def\XINT_sqr #1% {% - \expandafter\XINT@mul@enter + \expandafter\XINT_mul_enter \romannumeral0% - \XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z + \XINT_RQ {}#1\R\R\R\R\R\R\R\R\Z \W\X\Y\Z #1\W\X\Y\Z }% % \end{macrocode} % \subsection{\csh{xintPrd}, \csh{xintPrdExpr}} -% \begin{verbatim} -% \xintPrd {{a}...{z}} -% \xintPrdExpr {a}...{z}\relax +% \lverb|& +% \xintPrd {{a}...{z}}$\ +% \xintPrdExpr {a}...{z}\relax$\ % Release 1.02 modified the product routine. The earlier version was faster in % situations where each new term is bigger than the product of all previous % terms, a situation which arises in the algorithm for computing powers. The @@ -6752,1446 +6853,1299 @@ first place. % % In 1.06a I suddenly decide that \xintProductExpr was a silly name, and as the % package is new and certainly not used, I decide I may just switch to -% \xintPrdExpr which I should have used from the beginning. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \xintPrdExpr which I should have used from the beginning.| % \begin{macrocode} \def\xintiPrd {\romannumeral0\xintiprd }% \def\xintiprd #1{\xintiprdexpr #1\relax }% \let\xintPrd\xintiPrd \let\xintprd\xintiprd \def\xintiPrdExpr {\romannumeral0\xintiprdexpr }% -\def\xintiprdexpr {\expandafter\XINT@prdexpr\romannumeral-`0}% +\def\xintiprdexpr {\expandafter\XINT_prdexpr\romannumeral-`0}% \let\xintPrdExpr\xintiPrdExpr \let\xintprdexpr\xintiprdexpr -\def\XINT@prdexpr {\XINT@prod@loop@a 1\Z }% -\def\XINT@prod@loop@a #1\Z #2% +\def\XINT_prdexpr {\XINT_prod_loop_a 1\Z }% +\def\XINT_prod_loop_a #1\Z #2% {% - \expandafter\XINT@prod@loop@b \romannumeral-`0#2\Z #1\Z \Z + \expandafter\XINT_prod_loop_b \romannumeral-`0#2\Z #1\Z \Z }% -\def\XINT@prod@loop@b #1% +\def\XINT_prod_loop_b #1% {% - \xint@relax #1\XINT@prod@finished\relax - \XINT@prod@loop@c #1% + \xint_gob_til_relax #1\XINT_prod_finished\relax + \XINT_prod_loop_c #1% }% -\def\XINT@prod@loop@c +\def\XINT_prod_loop_c {% - \expandafter\XINT@prod@loop@a\romannumeral0\XINT@mul@fork + \expandafter\XINT_prod_loop_a\romannumeral0\XINT_mul_fork }% -\def\XINT@prod@finished #1\Z #2\Z \Z { #2}% +\def\XINT_prod_finished #1\Z #2\Z \Z { #2}% % \end{macrocode} % \subsection{\csh{xintFac}} -% \begin{verbatim} -% Modified with 1.02 and again in 1.03 for greater efficiency. I am tempted, -% here and elsewhere, to use \ifcase\XINT@Geq {#1}{1000000000} rather than -% \ifnum\XINT@Length {#1}>9 but for the time being I leave things as they stand. -% With release 1.05, rather than using \XINT@Length I opt finally for direct use +% \lverb|& +% Modified with 1.02 and again in 1.03 for greater efficiency. I am +% tempted, +% here and elsewhere, to use \ifcase\XINT_Geq {#1}{1000000000} rather than +% \ifnum\XINT_Length {#1}>9 but for the time being I leave things as they stand. +% With release 1.05, rather than using \XINT_Length I opt finally for direct use % of \numexpr (which will throw a suitable number too big message), and to raise -% the \xintError:FactorialOfTooBigNumber for argument larger than 1000000 -% (rather than 1000000000). -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% the \xintError:$\ FactorialOfTooBigNumber for argument larger than 1000000 +% (rather than 1000000000). | % \begin{macrocode} \def\xintFac {\romannumeral0\xintfac }% \def\xintfac #1% {% - \expandafter\XINT@fac@fork\expandafter{\the\numexpr #1}% + \expandafter\XINT_fac_fork\expandafter{\the\numexpr #1}% }% -\def\XINT@fac@fork #1% +\def\XINT_fac_fork #1% {% - \ifcase\XINT@Sgn {#1} - \xint@afterfi{\expandafter\space\expandafter 1\xint@gobble }% + \ifcase\XINT_Sgn {#1} + \xint_afterfi{\expandafter\space\expandafter 1\xint_gobble_i }% \or - \expandafter\XINT@fac@checklength + \expandafter\XINT_fac_checklength \else - \xint@afterfi{\expandafter\xintError:FactorialOfNegativeNumber - \expandafter\space\expandafter 1\xint@gobble }% + \xint_afterfi{\expandafter\xintError:FactorialOfNegativeNumber + \expandafter\space\expandafter 1\xint_gobble_i }% \fi {#1}% }% -\def\XINT@fac@checklength #1% +\def\XINT_fac_checklength #1% {% \ifnum #1>999999 - \xint@afterfi{\expandafter\xintError:FactorialOfTooBigNumber - \expandafter\space\expandafter 1\xint@gobble }% + \xint_afterfi{\expandafter\xintError:FactorialOfTooBigNumber + \expandafter\space\expandafter 1\xint_gobble_i }% \else - \xint@afterfi{\ifnum #1>9999 - \expandafter\XINT@fac@big@loop + \xint_afterfi{\ifnum #1>9999 + \expandafter\XINT_fac_big_loop \else - \expandafter\XINT@fac@loop + \expandafter\XINT_fac_loop \fi }% \fi {#1}% }% -\def\XINT@fac@big@loop #1{\XINT@fac@big@loop@main {10000}{#1}{}}% -\def\XINT@fac@big@loop@main #1#2#3% +\def\XINT_fac_big_loop #1{\XINT_fac_big_loop_main {10000}{#1}{}}% +\def\XINT_fac_big_loop_main #1#2#3% {% \ifnum #1<#2 \expandafter - \XINT@fac@big@loop@main + \XINT_fac_big_loop_main \expandafter {\the\numexpr #1+1\expandafter }% \else - \expandafter\XINT@fac@big@docomputation + \expandafter\XINT_fac_big_docomputation \fi {#2}{#3{#1}}% }% -\def\XINT@fac@big@docomputation #1#2% +\def\XINT_fac_big_docomputation #1#2% {% - \expandafter \XINT@fac@bigcompute@loop \expandafter - {\romannumeral0\XINT@fac@loop {9999}}#2\relax + \expandafter \XINT_fac_bigcompute_loop \expandafter + {\romannumeral0\XINT_fac_loop {9999}}#2\relax }% -\def\XINT@fac@bigcompute@loop #1#2% +\def\XINT_fac_bigcompute_loop #1#2% {% - \xint@relax #2\XINT@fac@bigcompute@end\relax - \expandafter\XINT@fac@bigcompute@loop\expandafter - {\expandafter\XINT@mul@enter - \romannumeral0\XINT@RQ {}#2\R\R\R\R\R\R\R\R\Z + \xint_gob_til_relax #2\XINT_fac_bigcompute_end\relax + \expandafter\XINT_fac_bigcompute_loop\expandafter + {\expandafter\XINT_mul_enter + \romannumeral0\XINT_RQ {}#2\R\R\R\R\R\R\R\R\Z \W\X\Y\Z #1\W\X\Y\Z }% }% -\def\XINT@fac@bigcompute@end #1#2#3#4#5% +\def\XINT_fac_bigcompute_end #1#2#3#4#5% {% - \XINT@fac@bigcompute@end@ #5% + \XINT_fac_bigcompute_end_ #5% }% -\def\XINT@fac@bigcompute@end@ #1\R #2\Z \W\X\Y\Z #3\W\X\Y\Z { #3}% -\def\XINT@fac@loop #1{\XINT@fac@loop@main 1{1000}{#1}}% -\def\XINT@fac@loop@main #1#2#3% +\def\XINT_fac_bigcompute_end_ #1\R #2\Z \W\X\Y\Z #3\W\X\Y\Z { #3}% +\def\XINT_fac_loop #1{\XINT_fac_loop_main 1{1000}{#1}}% +\def\XINT_fac_loop_main #1#2#3% {% \ifnum #3>#1 \else - \expandafter\XINT@fac@loop@exit + \expandafter\XINT_fac_loop_exit \fi - \expandafter\XINT@fac@loop@main\expandafter + \expandafter\XINT_fac_loop_main\expandafter {\the\numexpr #1+1\expandafter }\expandafter - {\romannumeral0\XINT@mul@Mr {#1}#2\Z\Z\Z\Z }% + {\romannumeral0\XINT_mul_Mr {#1}#2\Z\Z\Z\Z }% {#3}% }% -\def\XINT@fac@loop@exit #1#2#3#4#5#6#7% +\def\XINT_fac_loop_exit #1#2#3#4#5#6#7% {% - \XINT@fac@loop@exit@ #6% + \XINT_fac_loop_exit_ #6% }% -\def\XINT@fac@loop@exit@ #1#2#3% +\def\XINT_fac_loop_exit_ #1#2#3% {% - \XINT@mul@M + \XINT_mul_M }% % \end{macrocode} % \subsection{\csh{xintPow}} -% \begin{verbatim} -% 1.02 modified the \XINT@posprod routine, and this meant that the original -% version was moved here and renamed to \XINT@pow@posprod, as it was well +% \lverb|& +% 1.02 modified the \XINT_posprod routine, and this meant that the +% original +% version was moved here and renamed to \XINT_pow_posprod, as it was well % adapted for computing powers. Then I moved in 1.03 the special variants of % multiplication (hence of addition) which were needed to earlier in this file. % Modified in 1.06, the exponent is given to a \numexpr rather than twice -% expanded. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% expanded. | % \begin{macrocode} \def\xintiPow {\romannumeral0\xintipow }% \def\xintipow #1% {% - \expandafter\xint@pow\romannumeral-`0#1\Z% + \expandafter\xint_pow\romannumeral-`0#1\Z% }% \let\xintPow\xintiPow \let\xintpow\xintipow -\def\xint@pow #1#2\Z +\def\xint_pow #1#2\Z {% - \xint@UDsignfork - #1\dummy \XINT@pow@Aneg - -\dummy \XINT@pow@Anonneg - \xint@UDkrof + \xint_UDsignfork + #1\dummy \XINT_pow_Aneg + -\dummy \XINT_pow_Anonneg + \krof #1{#2}% }% -\def\XINT@pow@Aneg #1#2#3% +\def\XINT_pow_Aneg #1#2#3% {% - \expandafter\XINT@pow@Aneg@\expandafter{\the\numexpr #3}{#2}% + \expandafter\XINT_pow_Aneg_\expandafter{\the\numexpr #3}{#2}% }% -\def\XINT@pow@Aneg@ #1% +\def\XINT_pow_Aneg_ #1% {% \ifodd #1 - \expandafter\XINT@pow@Aneg@Bodd + \expandafter\XINT_pow_Aneg_Bodd \fi - \XINT@pow@Anonneg@ {#1}% + \XINT_pow_Anonneg_ {#1}% }% -\def\XINT@pow@Aneg@Bodd #1% +\def\XINT_pow_Aneg_Bodd #1% {% - \expandafter\XINT@opp\romannumeral0\XINT@pow@Anonneg@ + \expandafter\XINT_opp\romannumeral0\XINT_pow_Anonneg_ }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% B = #3, faire le xpxp. Modified with 1.06: use of \numexpr. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% B = #3, faire le xpxp. Modified with 1.06: use of \numexpr.| % \begin{macrocode} -\def\XINT@pow@Anonneg #1#2#3% +\def\XINT_pow_Anonneg #1#2#3% {% - \expandafter\XINT@pow@Anonneg@\expandafter {\the\numexpr #3}{#1#2}% + \expandafter\XINT_pow_Anonneg_\expandafter {\the\numexpr #3}{#1#2}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% #1 = B, #2 = |A| -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb+#1 = B, #2 = |A|+ % \begin{macrocode} -\def\XINT@pow@Anonneg@ #1#2% +\def\XINT_pow_Anonneg_ #1#2% {% - \ifcase\XINT@Cmp {#2}{1} - \expandafter\XINT@pow@AisOne + \ifcase\XINT_Cmp {#2}{1} + \expandafter\XINT_pow_AisOne \or - \expandafter\XINT@pow@AatleastTwo + \expandafter\XINT_pow_AatleastTwo \else - \expandafter\XINT@pow@AisZero + \expandafter\XINT_pow_AisZero \fi {#1}{#2}% }% -\def\XINT@pow@AisOne #1#2{ 1}% +\def\XINT_pow_AisOne #1#2{ 1}% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% #1 = B -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% #1 = B| % \begin{macrocode} -\def\XINT@pow@AisZero #1#2% +\def\XINT_pow_AisZero #1#2% {% - \ifcase\XINT@Sgn {#1} - \xint@afterfi { 1}% + \ifcase\XINT_Sgn {#1} + \xint_afterfi { 1}% \or - \xint@afterfi { 0}% + \xint_afterfi { 0}% \else - \xint@afterfi {\xintError:DivisionByZero\space 0}% + \xint_afterfi {\xintError:DivisionByZero\space 0}% \fi }% -\def\XINT@pow@AatleastTwo #1% +\def\XINT_pow_AatleastTwo #1% {% - \ifcase\XINT@Sgn {#1} - \expandafter\XINT@pow@BisZero + \ifcase\XINT_Sgn {#1} + \expandafter\XINT_pow_BisZero \or - \expandafter\XINT@pow@checkBlength + \expandafter\XINT_pow_checkBlength \else - \expandafter\XINT@pow@BisNegative + \expandafter\XINT_pow_BisNegative \fi {#1}% }% -\def\XINT@pow@BisNegative #1#2{\xintError:FractionRoundedToZero\space 0}% -\def\XINT@pow@BisZero #1#2{ 1}% +\def\XINT_pow_BisNegative #1#2{\xintError:FractionRoundedToZero\space 0}% +\def\XINT_pow_BisZero #1#2{ 1}% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% B = #1 > 0, A = #2 > 1. With 1.05, I replace \xintiLen{#1}>9 by direct use +% \lverb|& +% B = #1 > 0, A = #2 > 1. With 1.05, I replace \xintiLen{#1}>9 by direct +% use % of \numexpr [to generate an error message if the exponent is too large] -% 1.06: \numexpr was already used above. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% 1.06: \numexpr was already used above.| % \begin{macrocode} -\def\XINT@pow@checkBlength #1#2% +\def\XINT_pow_checkBlength #1#2% {% \ifnum #1>999999999 - \expandafter\XINT@pow@BtooBig + \expandafter\XINT_pow_BtooBig \else - \expandafter\XINT@pow@loop + \expandafter\XINT_pow_loop \fi - {#1}{#2}\XINT@pow@posprod - \xint@UNDEF - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@UNDEF + {#1}{#2}\XINT_pow_posprod + \xint_relax + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_relax }% -\def\XINT@pow@BtooBig #1\xint@UNDEF #2\xint@UNDEF +\def\XINT_pow_BtooBig #1\xint_relax #2\xint_relax {\xintError:ExponentTooBig\space 0}% -\def\XINT@pow@loop #1#2% +\def\XINT_pow_loop #1#2% {% \ifnum #1 = 1 - \expandafter\XINT@pow@loop@end + \expandafter\XINT_pow_loop_end \else - \xint@afterfi{\expandafter\XINT@pow@loop@a + \xint_afterfi{\expandafter\XINT_pow_loop_a \expandafter{\the\numexpr 2*(#1/2)-#1\expandafter }% b mod 2 \expandafter{\the\numexpr #1-#1/2\expandafter }% [b/2] \expandafter{\romannumeral0\xintisqr{#2}}}% \fi {{#2}}% }% -\def\XINT@pow@loop@end {\romannumeral0\XINT@rord@main {}\relax }% -\def\XINT@pow@loop@a #1% +\def\XINT_pow_loop_end {\romannumeral0\XINT_rord_main {}\relax }% +\def\XINT_pow_loop_a #1% {% \ifnum #1 = 1 - \expandafter\XINT@pow@loop + \expandafter\XINT_pow_loop \else - \expandafter\XINT@pow@loop@throwaway + \expandafter\XINT_pow_loop_throwaway \fi }% -\def\XINT@pow@loop@throwaway #1#2#3% +\def\XINT_pow_loop_throwaway #1#2#3% {% - \XINT@pow@loop {#1}{#2}% + \XINT_pow_loop {#1}{#2}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% Routine de produit servant pour le calcul des puissances. Chaque nouveau +% \lverb|& +% Routine de produit servant pour le calcul des puissances. Chaque +% nouveau % terme est plus grand que ce qui a déjà été calculé. Par conséquent on a % intérêt à le conserver en second dans la routine de multiplication, donc le % précédent calcul a intérêt à avoir été donné sur 4n, à l'envers. Il faut % donc modifier la multiplication pour qu'elle fasse cela. Ce qui oblige à -% utiliser une version spéciale de l'addition également. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% utiliser une version spéciale de l'addition également.| % \begin{macrocode} -\def\XINT@pow@posprod #1% +\def\XINT_pow_posprod #1% {% - \XINT@pow@pprod@checkifempty #1\Z + \XINT_pow_pprod_checkifempty #1\Z }% -\def\XINT@pow@pprod@checkifempty #1% +\def\XINT_pow_pprod_checkifempty #1% {% - \xint@relax #1\XINT@pow@pprod@emptyproduct\relax - \XINT@pow@pprod@RQfirst #1% + \xint_gob_til_relax #1\XINT_pow_pprod_emptyproduct\relax + \XINT_pow_pprod_RQfirst #1% }% -\def\XINT@pow@pprod@emptyproduct #1\Z { 1}% -\def\XINT@pow@pprod@RQfirst #1\Z +\def\XINT_pow_pprod_emptyproduct #1\Z { 1}% +\def\XINT_pow_pprod_RQfirst #1\Z {% - \expandafter\XINT@pow@pprod@getnext\expandafter - {\romannumeral0\XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z}% + \expandafter\XINT_pow_pprod_getnext\expandafter + {\romannumeral0\XINT_RQ {}#1\R\R\R\R\R\R\R\R\Z}% }% -\def\XINT@pow@pprod@getnext #1#2% +\def\XINT_pow_pprod_getnext #1#2% {% - \XINT@pow@pprod@checkiffinished #2\Z {#1}% + \XINT_pow_pprod_checkiffinished #2\Z {#1}% }% -\def\XINT@pow@pprod@checkiffinished #1% +\def\XINT_pow_pprod_checkiffinished #1% {% - \xint@relax #1\XINT@pow@pprod@end\relax - \XINT@pow@pprod@compute #1% + \xint_gob_til_relax #1\XINT_pow_pprod_end\relax + \XINT_pow_pprod_compute #1% }% -\def\XINT@pow@pprod@compute #1\Z #2% +\def\XINT_pow_pprod_compute #1\Z #2% {% - \expandafter\XINT@pow@pprod@getnext\expandafter - {\romannumeral0\XINT@mulr@enter #2\W\X\Y\Z #1\W\X\Y\Z}% + \expandafter\XINT_pow_pprod_getnext\expandafter + {\romannumeral0\XINT_mulr_enter #2\W\X\Y\Z #1\W\X\Y\Z}% }% -\def\XINT@pow@pprod@end\relax\XINT@pow@pprod@compute #1\Z #2% +\def\XINT_pow_pprod_end\relax\XINT_pow_pprod_compute #1\Z #2% {% - \expandafter\xint@cleanupzeros@andstop - \romannumeral0\XINT@rev {#2}% + \expandafter\xint_cleanupzeros_andstop + \romannumeral0\XINT_rev {#2}% }% % \end{macrocode} % \subsection{\csh{xintDivision}, \csh{xintQuo}, \csh{xintRem}} % \begin{macrocode} \def\xintiQuo {\romannumeral0\xintiquo }% \def\xintiRem {\romannumeral0\xintirem }% -\def\xintiquo {\expandafter\xint@firstoftwo@andstop +\def\xintiquo {\expandafter\xint_firstoftwo_andstop \romannumeral0\xintidivision }% -\def\xintirem {\expandafter\xint@secondoftwo@andstop +\def\xintirem {\expandafter\xint_secondoftwo_andstop \romannumeral0\xintidivision }% \let\xintQuo\xintiQuo \let\xintquo\xintiquo \let\xintRem\xintiRem \let\xintrem\xintirem % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% #1 = A, #2 = B. On calcule le quotient de A par B -% 1.03 adds the detection of 1 for B. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% #1 = A, #2 = B. On calcule le quotient de A par B.$\ +% 1.03 adds the detection of 1 for B.| % \begin{macrocode} \def\xintiDivision {\romannumeral0\xintidivision }% \def\xintidivision #1% {% - \expandafter\xint@division\expandafter {\romannumeral-`0#1}% + \expandafter\xint_division\expandafter {\romannumeral-`0#1}% }% \let\xintDivision\xintiDivision \let\xintdivision\xintidivision -\def\xint@division #1#2% +\def\xint_division #1#2% {% - \expandafter\XINT@div@fork \romannumeral-`0#2\Z #1\Z + \expandafter\XINT_div_fork \romannumeral-`0#2\Z #1\Z }% -\def\XINT@Division #1#2{\romannumeral0\XINT@div@fork #2\Z #1\Z }% +\def\XINT_Division #1#2{\romannumeral0\XINT_div_fork #2\Z #1\Z }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% #1#2 = 2e input = diviseur = B -% #3#4 = 1er input = divisé = A -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% #1#2 = 2e input = diviseur = B. +% #3#4 = 1er input = divisé = A| % \begin{macrocode} -\def\XINT@div@fork #1#2\Z #3#4\Z +\def\XINT_div_fork #1#2\Z #3#4\Z {% - \xint@UDzerofork - #1\dummy \XINT@div@BisZero - #3\dummy \XINT@div@AisZero + \xint_UDzerofork + #1\dummy \XINT_div_BisZero + #3\dummy \XINT_div_AisZero 0\dummy - {\xint@UDsignfork - #1\dummy \XINT@div@BisNegative % B < 0 - #3\dummy \XINT@div@AisNegative % A < 0, B > 0 - -\dummy \XINT@div@plusplus % B > 0, A > 0 - \xint@UDkrof }% - \xint@UDkrof + {\xint_UDsignfork + #1\dummy \XINT_div_BisNegative % B < 0 + #3\dummy \XINT_div_AisNegative % A < 0, B > 0 + -\dummy \XINT_div_plusplus % B > 0, A > 0 + \krof }% + \krof {#2}{#4}#1#3% #1#2=B, #3#4=A }% -\def\XINT@div@BisZero #1#2#3#4{\xintError:DivisionByZero\space {0}{0}}% -\def\XINT@div@AisZero #1#2#3#4{ {0}{0}}% +\def\XINT_div_BisZero #1#2#3#4{\xintError:DivisionByZero\space {0}{0}}% +\def\XINT_div_AisZero #1#2#3#4{ {0}{0}}% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% jusqu'à présent c'est facile. -% minusplus signifie B < 0, A > 0 -% plusminus signifie B > 0, A < 0 -% Ici #3#1 correspond au diviseur B et #4#2 au divisé A +% \lverb|& +% jusqu'à présent c'est facile.$\ +% minusplus signifie B < 0, A > 0$\ +% plusminus signifie B > 0, A < 0$\ +% Ici #3#1 correspond au diviseur B et #4#2 au divisé A. +% % Cases with B<0 or especially A<0 are treated sub-optimally in terms of % post-processing, things get reversed which could have been produced directly -% in the wanted order, but A,B>0 is given priority for optimization. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% in the wanted order, but A,B>0 is given priority for optimization. | % \begin{macrocode} -\def\XINT@div@plusplus #1#2#3#4% +\def\XINT_div_plusplus #1#2#3#4% {% - \XINT@div@prepare {#3#1}{#4#2}% + \XINT_div_prepare {#3#1}{#4#2}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% B = #3#1 < 0, A non nul positif ou négatif -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% B = #3#1 < 0, A non nul positif ou négatif| % \begin{macrocode} -\def\XINT@div@BisNegative #1#2#3#4% +\def\XINT_div_BisNegative #1#2#3#4% {% - \expandafter\XINT@div@BisNegative@post - \romannumeral0\XINT@div@fork #1\Z #4#2\Z + \expandafter\XINT_div_BisNegative_post + \romannumeral0\XINT_div_fork #1\Z #4#2\Z }% -\def\XINT@div@BisNegative@post #1% +\def\XINT_div_BisNegative_post #1% {% - \expandafter\space\expandafter {\romannumeral0\XINT@opp #1}% + \expandafter\space\expandafter {\romannumeral0\XINT_opp #1}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% B = #3#1 > 0, A =-#2< 0 -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% B = #3#1 > 0, A =-#2< 0| % \begin{macrocode} -\def\XINT@div@AisNegative #1#2#3#4% +\def\XINT_div_AisNegative #1#2#3#4% {% - \expandafter\XINT@div@AisNegative@post - \romannumeral0\XINT@div@prepare {#3#1}{#2}{#3#1}% + \expandafter\XINT_div_AisNegative_post + \romannumeral0\XINT_div_prepare {#3#1}{#2}{#3#1}% }% -\def\XINT@div@AisNegative@post #1#2% +\def\XINT_div_AisNegative_post #1#2% {% - \ifcase\XINT@Sgn {#2} - \expandafter \XINT@div@AisNegative@zerorem + \ifcase\XINT_Sgn {#2} + \expandafter \XINT_div_AisNegative_zerorem \or - \expandafter \XINT@div@AisNegative@posrem + \expandafter \XINT_div_AisNegative_posrem \fi {#1}{#2}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% en #3 on a une copie de B (à l'endroit) -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% en #3 on a une copie de B (à l'endroit)| % \begin{macrocode} -\def\XINT@div@AisNegative@zerorem #1#2#3% +\def\XINT_div_AisNegative_zerorem #1#2#3% {% - \expandafter\space\expandafter {\romannumeral0\XINT@opp #1}{0}% + \expandafter\space\expandafter {\romannumeral0\XINT_opp #1}{0}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% #1 = quotient, #2 = reste, #3 = diviseur initial (à l'endroit) +% \lverb!#1 = quotient, #2 = reste, #3 = diviseur initial (à l'endroit) % remplace Reste par B - Reste, après avoir remplacé Q par -(Q+1) -% de sorte que la formule a = qb + r, 0<= r < |b| est valable -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% de sorte que la formule a = qb + r, 0<= r < |b| est valable! % \begin{macrocode} -\def\XINT@div@AisNegative@posrem #1% +\def\XINT_div_AisNegative_posrem #1% {% - \expandafter \XINT@div@AisNegative@posrem@b \expandafter + \expandafter \XINT_div_AisNegative_posrem_b \expandafter {\romannumeral0\xintiopp{\xintiAdd {#1}{1}}}% }% -\def\XINT@div@AisNegative@posrem@b #1#2#3% +\def\XINT_div_AisNegative_posrem_b #1#2#3% {% - \expandafter \xint@exchangetwo@keepbraces@andstop \expandafter - {\romannumeral0\XINT@sub {#3}{#2}}{#1}% + \expandafter \xint_exchangetwo_keepbraces_andstop \expandafter + {\romannumeral0\XINT_sub {#3}{#2}}{#1}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} +% \lverb|& % par la suite A et B sont > 0. % #1 = B. Pour le moment à l'endroit. -% Calcul du plus petit K = 4n >= longueur de B -% 1.03 adds the interception of B=1 -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% Calcul du plus petit K = 4n >= longueur de B$\ +% 1.03 adds the interception of B=1| % \begin{macrocode} -\def\XINT@div@prepare #1% +\def\XINT_div_prepare #1% {% - \expandafter \XINT@div@prepareB@aa \expandafter - {\romannumeral0\XINT@length {#1}}{#1}% B > 0 ici + \expandafter \XINT_div_prepareB_aa \expandafter + {\romannumeral0\XINT_length {#1}}{#1}% B > 0 ici }% -\def\XINT@div@prepareB@aa #1% +\def\XINT_div_prepareB_aa #1% {% \ifnum #1=1 - \expandafter\XINT@div@prepareB@ab + \expandafter\XINT_div_prepareB_ab \else - \expandafter\XINT@div@prepareB@a + \expandafter\XINT_div_prepareB_a \fi {#1}% }% -\def\XINT@div@prepareB@ab #1#2% +\def\XINT_div_prepareB_ab #1#2% {% \ifnum #2=1 - \expandafter\XINT@div@prepareB@BisOne + \expandafter\XINT_div_prepareB_BisOne \else - \expandafter\XINT@div@prepareB@e + \expandafter\XINT_div_prepareB_e \fi {000}{3}{4}{#2}% }% -\def\XINT@div@prepareB@BisOne #1#2#3#4#5{ {#5}{0}}% -\def\XINT@div@prepareB@a #1% +\def\XINT_div_prepareB_BisOne #1#2#3#4#5{ {#5}{0}}% +\def\XINT_div_prepareB_a #1% {% - \expandafter\XINT@div@prepareB@c\expandafter{\the\numexpr 4*((#1+1)/4)}{#1}% + \expandafter\XINT_div_prepareB_c\expandafter{\the\numexpr 4*((#1+1)/4)}{#1}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% #1 = K -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% #1 = K| % \begin{macrocode} -\def\XINT@div@prepareB@c #1#2% +\def\XINT_div_prepareB_c #1#2% {% \ifcase \numexpr #1-#2\relax - \expandafter\XINT@div@prepareB@d + \expandafter\XINT_div_prepareB_d \or - \expandafter\XINT@div@prepareB@di + \expandafter\XINT_div_prepareB_di \or - \expandafter\XINT@div@prepareB@dii + \expandafter\XINT_div_prepareB_dii \or - \expandafter\XINT@div@prepareB@diii + \expandafter\XINT_div_prepareB_diii \fi {#1}% }% -\def\XINT@div@prepareB@d {\XINT@div@prepareB@e {}{0}}% -\def\XINT@div@prepareB@di {\XINT@div@prepareB@e {0}{1}}% -\def\XINT@div@prepareB@dii {\XINT@div@prepareB@e {00}{2}}% -\def\XINT@div@prepareB@diii {\XINT@div@prepareB@e {000}{3}}% +\def\XINT_div_prepareB_d {\XINT_div_prepareB_e {}{0}}% +\def\XINT_div_prepareB_di {\XINT_div_prepareB_e {0}{1}}% +\def\XINT_div_prepareB_dii {\XINT_div_prepareB_e {00}{2}}% +\def\XINT_div_prepareB_diii {\XINT_div_prepareB_e {000}{3}}% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% #1 = zéros à rajouter à B, #2=c, #3=K, #4 = B -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% #1 = zéros à rajouter à B, #2=c, #3=K, #4 = B| % \begin{macrocode} -\def\XINT@div@prepareB@e #1#2#3#4% +\def\XINT_div_prepareB_e #1#2#3#4% {% - \XINT@div@prepareB@f #4#1\Z {#3}{#2}{#1}% + \XINT_div_prepareB_f #4#1\Z {#3}{#2}{#1}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} +% \lverb|& % x = #1#2#3#4 = 4 premiers chiffres de B. #1 est non nul. -% Ensuite on renverse B pour calculs plus rapides par la suite. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% Ensuite on renverse B pour calculs plus rapides par la suite.| % \begin{macrocode} -\def\XINT@div@prepareB@f #1#2#3#4#5\Z +\def\XINT_div_prepareB_f #1#2#3#4#5\Z {% - \expandafter \XINT@div@prepareB@g \expandafter - {\romannumeral0\XINT@rev {#1#2#3#4#5}}{#1#2#3#4}% + \expandafter \XINT_div_prepareB_g \expandafter + {\romannumeral0\XINT_rev {#1#2#3#4#5}}{#1#2#3#4}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} +% \lverb|& % #3= K, #4 = c, #5= {} ou {0} ou {00} ou {000}, #6 = A initial % #1 = B préparé et renversé, #2 = x = quatre premiers chiffres -% On multiplie aussi A par 10^c. -% B, x, K, c, {} ou {0} ou {00} ou {000}, A initial -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% On multiplie aussi A par 10^c.$\ +% B, x, K, c, {} ou {0} ou {00} ou {000}, A initial| % \begin{macrocode} -\def\XINT@div@prepareB@g #1#2#3#4#5#6% +\def\XINT_div_prepareB_g #1#2#3#4#5#6% {% - \XINT@div@prepareA@a {#6#5}{#2}{#3}{#1}{#4}% + \XINT_div_prepareA_a {#6#5}{#2}{#3}{#1}{#4}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% A, x, K, B, c, -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% A, x, K, B, c, | % \begin{macrocode} -\def\XINT@div@prepareA@a #1% +\def\XINT_div_prepareA_a #1% {% - \expandafter \XINT@div@prepareA@b \expandafter - {\romannumeral0\XINT@length {#1}}{#1}% A >0 ici + \expandafter \XINT_div_prepareA_b \expandafter + {\romannumeral0\XINT_length {#1}}{#1}% A >0 ici }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% L0, A, x, K, B, ... -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% L0, A, x, K, B, ...| % \begin{macrocode} -\def\XINT@div@prepareA@b #1% +\def\XINT_div_prepareA_b #1% {% - \expandafter\XINT@div@prepareA@c\expandafter{\the\numexpr 4*((#1+1)/4)}{#1}% + \expandafter\XINT_div_prepareA_c\expandafter{\the\numexpr 4*((#1+1)/4)}{#1}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% L, L0, A, x, K, B,... -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% L, L0, A, x, K, B,...| % \begin{macrocode} -\def\XINT@div@prepareA@c #1#2% +\def\XINT_div_prepareA_c #1#2% {% \ifcase \numexpr #1-#2\relax - \expandafter\XINT@div@prepareA@d + \expandafter\XINT_div_prepareA_d \or - \expandafter\XINT@div@prepareA@di + \expandafter\XINT_div_prepareA_di \or - \expandafter\XINT@div@prepareA@dii + \expandafter\XINT_div_prepareA_dii \or - \expandafter\XINT@div@prepareA@diii + \expandafter\XINT_div_prepareA_diii \fi {#1}% }% -\def\XINT@div@prepareA@d {\XINT@div@prepareA@e {}}% -\def\XINT@div@prepareA@di {\XINT@div@prepareA@e {0}}% -\def\XINT@div@prepareA@dii {\XINT@div@prepareA@e {00}}% -\def\XINT@div@prepareA@diii {\XINT@div@prepareA@e {000}}% +\def\XINT_div_prepareA_d {\XINT_div_prepareA_e {}}% +\def\XINT_div_prepareA_di {\XINT_div_prepareA_e {0}}% +\def\XINT_div_prepareA_dii {\XINT_div_prepareA_e {00}}% +\def\XINT_div_prepareA_diii {\XINT_div_prepareA_e {000}}% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% #1#3 = A préparé, #2 = longueur de ce A préparé, -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% #1#3 = A préparé, #2 = longueur de ce A préparé, | % \begin{macrocode} -\def\XINT@div@prepareA@e #1#2#3% +\def\XINT_div_prepareA_e #1#2#3% {% - \XINT@div@startswitch {#1#3}{#2}% + \XINT_div_startswitch {#1#3}{#2}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% A, L, x, K, B, c -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% A, L, x, K, B, c| % \begin{macrocode} -\def\XINT@div@startswitch #1#2#3#4% +\def\XINT_div_startswitch #1#2#3#4% {% \ifnum #2 > #4 - \expandafter\XINT@div@body@a + \expandafter\XINT_div_body_a \else \ifnum #2 = #4 - \expandafter\expandafter\expandafter\XINT@div@final@a + \expandafter\expandafter\expandafter\XINT_div_final_a \else - \expandafter\expandafter\expandafter\XINT@div@finished@a + \expandafter\expandafter\expandafter\XINT_div_finished_a \fi\fi {#1}{#4}{#3}{0000}{#2}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% A, K, x, Q, L, B, c -% ---- "Finished" -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% ---- "Finished": A, K, x, Q, L, B, c| % \begin{macrocode} -\def\XINT@div@finished@a #1#2#3% +\def\XINT_div_finished_a #1#2#3% {% - \expandafter\XINT@div@finished@b\expandafter {\romannumeral0\XINT@cuz {#1}}% + \expandafter\XINT_div_finished_b\expandafter {\romannumeral0\XINT_cuz {#1}}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} +% \lverb|& % A, Q, L, B, c -% no leading zeros in A at this stage -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% no leading zeros in A at this stage| % \begin{macrocode} -\def\XINT@div@finished@b #1#2#3#4#5% +\def\XINT_div_finished_b #1#2#3#4#5% {% - \ifcase \XINT@Sgn {#1} - \xint@afterfi {\XINT@div@finished@c {0}}% + \ifcase \XINT_Sgn {#1} + \xint_afterfi {\XINT_div_finished_c {0}}% \or - \xint@afterfi {\expandafter\XINT@div@finished@c\expandafter - {\romannumeral0\XINT@dsh@checksignx #5\Z {#1}}% + \xint_afterfi {\expandafter\XINT_div_finished_c\expandafter + {\romannumeral0\XINT_dsh_checksignx #5\Z {#1}}% }% \fi {#2}% }% -\def\XINT@div@finished@c #1#2% +\def\XINT_div_finished_c #1#2% {% - \expandafter\space\expandafter {\romannumeral0\XINT@rev@andcuz {#2}}{#1}% + \expandafter\space\expandafter {\romannumeral0\XINT_rev_andcuz {#2}}{#1}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% ---- "Final" -% A, K, x, Q, L, B, c -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% ---- "Final": A, K, x, Q, L, B, c| % \begin{macrocode} -\def\XINT@div@final@a #1% +\def\XINT_div_final_a #1% {% - \XINT@div@final@b #1\Z + \XINT_div_final_b #1\Z }% -\def\XINT@div@final@b #1#2#3#4#5\Z +\def\XINT_div_final_b #1#2#3#4#5\Z {% - \xint@quatrezeros #1#2#3#4\xint@div@final@c0000% - \XINT@div@final@c {#1#2#3#4}{#1#2#3#4#5}% + \xint_gob_til_zeros_iv #1#2#3#4\xint_div_final_c0000% + \XINT_div_final_c {#1#2#3#4}{#1#2#3#4#5}% }% -\def\xint@div@final@c0000\XINT@div@final@c #1{\XINT@div@finished@a }% +\def\xint_div_final_c0000\XINT_div_final_c #1{\XINT_div_finished_a }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} +% \lverb|& % a, A, K, x, Q, L, B ,c % 1.01: code ré-écrit pour optimisations diverses. -% 1.04: again, code rewritten for tiny speed increase (hopefully). -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% 1.04: again, code rewritten for tiny speed increase (hopefully).| % \begin{macrocode} -\def\XINT@div@final@c #1#2#3#4% +\def\XINT_div_final_c #1#2#3#4% {% - \expandafter \XINT@div@final@da \expandafter + \expandafter \XINT_div_final_da \expandafter {\the\numexpr #1-(#1/#4)*#4\expandafter }\expandafter {\the\numexpr #1/#4\expandafter }\expandafter - {\romannumeral0\xint@cleanupzeros@andstop #2}% + {\romannumeral0\xint_cleanupzeros_andstop #2}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% r, q, A sans leading zéros, Q, L, B à l'envers sur 4n, c -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% r, q, A sans leading zéros, Q, L, B à l'envers sur 4n, c| % \begin{macrocode} -\def\XINT@div@final@da #1% +\def\XINT_div_final_da #1% {% \ifnum #1>9 - \expandafter\XINT@div@final@dP + \expandafter\XINT_div_final_dP \else - \xint@afterfi + \xint_afterfi {\ifnum #1<0 - \expandafter\XINT@div@final@dN + \expandafter\XINT_div_final_dN \else - \expandafter\XINT@div@final@db + \expandafter\XINT_div_final_db \fi }% \fi }% -\def\XINT@div@final@dN #1% +\def\XINT_div_final_dN #1% {% - \expandafter\XINT@div@final@dP\the\numexpr #1-1\relax + \expandafter\XINT_div_final_dP\the\numexpr #1-1\relax }% -\def\XINT@div@final@dP #1#2#3#4#5% q,A,Q,L,B (puis c) +\def\XINT_div_final_dP #1#2#3#4#5% q,A,Q,L,B (puis c) {% - \expandafter \XINT@div@final@f \expandafter + \expandafter \XINT_div_final_f \expandafter {\romannumeral0\xintisub {#2}% - {\romannumeral0\XINT@mul@M {#1}#5\Z\Z\Z\Z }}% - {\romannumeral0\XINT@add@A 0{}#1000\W\X\Y\Z #3\W\X\Y\Z }% + {\romannumeral0\XINT_mul_M {#1}#5\Z\Z\Z\Z }}% + {\romannumeral0\XINT_add_A 0{}#1000\W\X\Y\Z #3\W\X\Y\Z }% }% -\def\XINT@div@final@db #1#2#3#4#5% q,A,Q,L,B (puis c) +\def\XINT_div_final_db #1#2#3#4#5% q,A,Q,L,B (puis c) {% - \expandafter\XINT@div@final@dc\expandafter + \expandafter\XINT_div_final_dc\expandafter {\romannumeral0\xintisub {#2}% - {\romannumeral0\XINT@mul@M {#1}#5\Z\Z\Z\Z }}% + {\romannumeral0\XINT_mul_M {#1}#5\Z\Z\Z\Z }}% {#1}{#2}{#3}{#4}{#5}% }% -\def\XINT@div@final@dc #1#2% +\def\XINT_div_final_dc #1#2% {% - \ifnum\XINT@Sgn{#1}<0 - \xint@afterfi {\expandafter\XINT@div@final@dP\the\numexpr #2-1\relax}% - \else \xint@afterfi {\XINT@div@final@e {#1}#2}% + \ifnum\XINT_Sgn{#1}<0 + \xint_afterfi {\expandafter\XINT_div_final_dP\the\numexpr #2-1\relax}% + \else \xint_afterfi {\XINT_div_final_e {#1}#2}% \fi }% -\def\XINT@div@final@e #1#2#3#4#5#6% A final, q, trash, Q, L, B +\def\XINT_div_final_e #1#2#3#4#5#6% A final, q, trash, Q, L, B {% - \XINT@div@final@f {#1}% - {\romannumeral0\XINT@add@A 0{}#2000\W\X\Y\Z #4\W\X\Y\Z }% + \XINT_div_final_f {#1}% + {\romannumeral0\XINT_add_A 0{}#2000\W\X\Y\Z #4\W\X\Y\Z }% }% -\def\XINT@div@final@f #1#2#3% R,Q \`a d\'evelopper,c +\def\XINT_div_final_f #1#2#3% R,Q \`a d\'evelopper,c {% - \ifcase \XINT@Sgn {#1} - \xint@afterfi {\XINT@div@final@end {0}}% + \ifcase \XINT_Sgn {#1} + \xint_afterfi {\XINT_div_final_end {0}}% \or - \xint@afterfi {\expandafter\XINT@div@final@end\expandafter - {\romannumeral0\XINT@dsh@checksignx #3\Z {#1}}% + \xint_afterfi {\expandafter\XINT_div_final_end\expandafter + {\romannumeral0\XINT_dsh_checksignx #3\Z {#1}}% }% \fi {#2}% }% -\def\XINT@div@final@end #1#2% +\def\XINT_div_final_end #1#2% {% \expandafter\space\expandafter {#2}{#1}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% Boucle Principale (on reviendra en div@body@b pas div@body@a) -% A, K, x, Q, L, B, c -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% Boucle Principale (on reviendra en div_body_b pas div_body_a)$\ +% A, K, x, Q, L, B, c| % \begin{macrocode} -\def\XINT@div@body@a #1% +\def\XINT_div_body_a #1% {% - \XINT@div@body@b #1\Z {#1}% + \XINT_div_body_b #1\Z {#1}% }% -\def\XINT@div@body@b #1#2#3#4#5#6#7#8#9\Z +\def\XINT_div_body_b #1#2#3#4#5#6#7#8#9\Z {% - \XINT@div@body@c {#1#2#3#4#5#6#7#8}% + \XINT_div_body_c {#1#2#3#4#5#6#7#8}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% a, A, K, x, Q, L, B, c -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% a, A, K, x, Q, L, B, c| % \begin{macrocode} -\def\XINT@div@body@c #1#2#3% +\def\XINT_div_body_c #1#2#3% {% - \XINT@div@body@d {#3}{}#2\Z {#1}{#3}% + \XINT_div_body_d {#3}{}#2\Z {#1}{#3}% }% -\def\XINT@div@body@d #1#2#3#4#5#6% +\def\XINT_div_body_d #1#2#3#4#5#6% {% \ifnum #1 > 0 - \expandafter\XINT@div@body@d + \expandafter\XINT_div_body_d \expandafter{\the\numexpr #1-4\expandafter }% \else - \expandafter\XINT@div@body@e + \expandafter\XINT_div_body_e \fi {#6#5#4#3#2}% }% -\def\XINT@div@body@e #1#2\Z #3% +\def\XINT_div_body_e #1#2\Z #3% {% - \XINT@div@body@f {#3}{#1}{#2}% + \XINT_div_body_f {#3}{#1}{#2}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% a, alpha (à l'envers), alpha' (à l'endroit), K, x, Q, L, B (à l'envers), c -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% a, alpha (à l'envers), alpha' (à l'endroit), K, x, Q, L, B (à l'envers), c| % \begin{macrocode} -\def\XINT@div@body@f #1#2#3#4#5#6#7#8% +\def\XINT_div_body_f #1#2#3#4#5#6#7#8% {% - \expandafter\XINT@div@body@gg + \expandafter\XINT_div_body_gg \the\numexpr (#1+(#5+1)/2)/(#5+1)+99999\relax {#8}{#2}{#8}{#4}{#5}{#3}{#6}{#7}{#8}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% q1 sur six chiffres (il en a 5 au max), B, alpha, B, K, x, alpha', Q, L, B, c -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% q1 sur six chiffres (il en a 5 au max), B, alpha, B, K, x, alpha', Q, L, B, c| % \begin{macrocode} -\def\XINT@div@body@gg #1#2#3#4#5#6% +\def\XINT_div_body_gg #1#2#3#4#5#6% {% - \xint@UDzerofork - #2\dummy \XINT@div@body@gk - 0\dummy {\XINT@div@body@ggk #2}% - \xint@UDkrof + \xint_UDzerofork + #2\dummy \XINT_div_body_gk + 0\dummy {\XINT_div_body_ggk #2}% + \krof {#3#4#5#6}% }% -\def\XINT@div@body@gk #1#2#3% +\def\XINT_div_body_gk #1#2#3% {% - \expandafter\XINT@div@body@h - \romannumeral0\XINT@div@sub@xpxp - {\romannumeral0\XINT@mul@Mr {#1}#2\Z\Z\Z\Z }{#3}\Z {#1}% + \expandafter\XINT_div_body_h + \romannumeral0\XINT_div_sub_xpxp + {\romannumeral0\XINT_mul_Mr {#1}#2\Z\Z\Z\Z }{#3}\Z {#1}% }% -\def\XINT@div@body@ggk #1#2#3% +\def\XINT_div_body_ggk #1#2#3% {% - \expandafter \XINT@div@body@gggk \expandafter - {\romannumeral0\XINT@mul@Mr {#1}0000#3\Z\Z\Z\Z }% - {\romannumeral0\XINT@mul@Mr {#2}#3\Z\Z\Z\Z }% + \expandafter \XINT_div_body_gggk \expandafter + {\romannumeral0\XINT_mul_Mr {#1}0000#3\Z\Z\Z\Z }% + {\romannumeral0\XINT_mul_Mr {#2}#3\Z\Z\Z\Z }% {#1#2}% }% -\def\XINT@div@body@gggk #1#2#3#4% +\def\XINT_div_body_gggk #1#2#3#4% {% - \expandafter\XINT@div@body@h - \romannumeral0\XINT@div@sub@xpxp - {\romannumeral0\expandafter\XINT@mul@Ar + \expandafter\XINT_div_body_h + \romannumeral0\XINT_div_sub_xpxp + {\romannumeral0\expandafter\XINT_mul_Ar \expandafter0\expandafter{\expandafter}#2\W\X\Y\Z #1\W\X\Y\Z }% {#4}\Z {#3}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% alpha1 = alpha-q1 B, \Z, q1, B, K, x, alpha', Q, L, B, c -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% alpha1 = alpha-q1 B, \Z, q1, B, K, x, alpha', Q, L, B, c| % \begin{macrocode} -\def\XINT@div@body@h #1#2#3#4#5#6#7#8#9\Z +\def\XINT_div_body_h #1#2#3#4#5#6#7#8#9\Z {% \ifnum #1#2#3#4>0 - \xint@afterfi{\XINT@div@body@i {#1#2#3#4#5#6#7#8}}% + \xint_afterfi{\XINT_div_body_i {#1#2#3#4#5#6#7#8}}% \else - \expandafter\XINT@div@body@k + \expandafter\XINT_div_body_k \fi {#1#2#3#4#5#6#7#8#9}% }% -\def\XINT@div@body@k #1#2#3% +\def\XINT_div_body_k #1#2#3% {% - \XINT@div@body@l {#1}{#2}% + \XINT_div_body_l {#1}{#2}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% a1, alpha1 (à l'endroit), q1, B, K, x, alpha', Q, L, B, c -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% a1, alpha1 (à l'endroit), q1, B, K, x, alpha', Q, L, B, c| % \begin{macrocode} -\def\XINT@div@body@i #1#2#3#4#5#6% +\def\XINT_div_body_i #1#2#3#4#5#6% {% - \expandafter\XINT@div@body@j + \expandafter\XINT_div_body_j \expandafter{\the\numexpr (#1+(#6+1)/2)/(#6+1)-1}% {#2}{#3}{#4}{#5}{#6}% }% -\def\XINT@div@body@j #1#2#3#4% +\def\XINT_div_body_j #1#2#3#4% {% - \expandafter \XINT@div@body@l \expandafter - {\romannumeral0\XINT@div@sub@xpxp - {\romannumeral0\XINT@mul@Mr {#1}#4\Z\Z\Z\Z }{\XINT@Rev{#2}}}% + \expandafter \XINT_div_body_l \expandafter + {\romannumeral0\XINT_div_sub_xpxp + {\romannumeral0\XINT_mul_Mr {#1}#4\Z\Z\Z\Z }{\XINT_Rev{#2}}}% {#3+#1}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% alpha2 (à l'endroit, ou alpha1), q1+q2 (ou q1), K, x, alpha', Q, L, B, c -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% alpha2 (à l'endroit, ou alpha1), q1+q2 (ou q1), K, x, alpha', Q, L, B, c| % \begin{macrocode} -\def\XINT@div@body@l #1#2#3#4#5#6#7% +\def\XINT_div_body_l #1#2#3#4#5#6#7% {% - \expandafter\XINT@div@body@m + \expandafter\XINT_div_body_m \the\numexpr 100000000+#2\relax {#6}{#3}{#7}{#1#5}{#4}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% chiffres de q, Q, K, L, A'=nouveau A, x, B, c -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% chiffres de q, Q, K, L, A'=nouveau A, x, B, c| % \begin{macrocode} -\def\XINT@div@body@m #1#2#3#4#5#6#7#8#9% +\def\XINT_div_body_m #1#2#3#4#5#6#7#8#9% {% \ifnum #2#3#4#5>0 - \xint@afterfi {\XINT@div@body@n {#9#8#7#6#5#4#3#2}}% + \xint_afterfi {\XINT_div_body_n {#9#8#7#6#5#4#3#2}}% \else - \xint@afterfi {\XINT@div@body@n {#9#8#7#6}}% + \xint_afterfi {\XINT_div_body_n {#9#8#7#6}}% \fi }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% q renversé, Q, K, L, A', x, B, c -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% q renversé, Q, K, L, A', x, B, c| % \begin{macrocode} -\def\XINT@div@body@n #1#2% +\def\XINT_div_body_n #1#2% {% - \expandafter\XINT@div@body@o\expandafter - {\romannumeral0\XINT@addr@A 0{}#1\W\X\Y\Z #2\W\X\Y\Z }% + \expandafter\XINT_div_body_o\expandafter + {\romannumeral0\XINT_addr_A 0{}#1\W\X\Y\Z #2\W\X\Y\Z }% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% q+Q, K, L, A', x, B, c -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% q+Q, K, L, A', x, B, c| % \begin{macrocode} -\def\XINT@div@body@o #1#2#3#4% +\def\XINT_div_body_o #1#2#3#4% {% - \XINT@div@body@p {#3}{#2}{}#4\Z {#1}% + \XINT_div_body_p {#3}{#2}{}#4\Z {#1}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% L, K, {}, A'\Z, q+Q, x, B, c -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% L, K, {}, A'\Z, q+Q, x, B, c | % \begin{macrocode} -\def\XINT@div@body@p #1#2#3#4#5#6#7% +\def\XINT_div_body_p #1#2#3#4#5#6#7% {% \ifnum #1 > #2 - \xint@afterfi + \xint_afterfi {\ifnum #4#5#6#7 > 0 - \expandafter\XINT@div@body@q + \expandafter\XINT_div_body_q \else - \expandafter\XINT@div@body@repeatp + \expandafter\XINT_div_body_repeatp \fi }% \else - \expandafter\XINT@div@gotofinal@a + \expandafter\XINT_div_gotofinal_a \fi {#1}{#2}{#3}#4#5#6#7% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% L, K, zeros, A' avec moins de zéros\Z, q+Q, x, B, c -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% L, K, zeros, A' avec moins de zéros\Z, q+Q, x, B, c| % \begin{macrocode} -\def\XINT@div@body@repeatp #1#2#3#4#5#6#7% +\def\XINT_div_body_repeatp #1#2#3#4#5#6#7% {% - \expandafter\XINT@div@body@p\expandafter{\the\numexpr #1-4}{#2}{0000#3}% + \expandafter\XINT_div_body_p\expandafter{\the\numexpr #1-4}{#2}{0000#3}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} +% \lverb|& % L -> L-4, zeros->zeros+0000, répéter jusqu'à ce que soit L=K -% soit on ne trouve plus 0000 -% nouveau L, K, zeros, nouveau A=#4, \Z, Q+q (à l'envers), x, B, c -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% soit on ne trouve plus 0000$\ +% nouveau L, K, zeros, nouveau A=#4, \Z, Q+q (à l'envers), x, B, c| % \begin{macrocode} -\def\XINT@div@body@q #1#2#3#4\Z #5#6% +\def\XINT_div_body_q #1#2#3#4\Z #5#6% {% - \XINT@div@body@b #4\Z {#4}{#2}{#6}{#3#5}{#1}% + \XINT_div_body_b #4\Z {#4}{#2}{#6}{#3#5}{#1}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% A, K, x, Q, L, B, c --> iterate -% ---- -% Boucle Principale achevée -% ATTENTION IL FAUT AJOUTER 4 ZEROS DE MOINS QUE CEUX -% QUI ONT ÉTÉ PRÉPARÉS DANS #3!! -% L, K (L=K), zeros, A\Z, Q, x, B, c -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% A, K, x, Q, L, B, c --> iterate$\ +% Boucle Principale achevée. ATTENTION IL FAUT AJOUTER 4 ZEROS DE MOINS QUE CEUX +% QUI ONT ÉTÉ PRÉPARÉS DANS #3!!$\ +% L, K (L=K), zeros, A\Z, Q, x, B, c| % \begin{macrocode} -\def\XINT@div@gotofinal@a #1#2#3#4\Z % +\def\XINT_div_gotofinal_a #1#2#3#4\Z % {% - \XINT@div@gotofinal@b #3\Z {#4}{#1}% + \XINT_div_gotofinal_b #3\Z {#4}{#1}% }% -\def\XINT@div@gotofinal@b 0000#1\Z #2#3#4#5% +\def\XINT_div_gotofinal_b 0000#1\Z #2#3#4#5% {% - \XINT@div@final@a {#2}{#3}{#5}{#1#4}{#3}% + \XINT_div_final_a {#2}{#3}{#5}{#1#4}{#3}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% La soustraction spéciale. +% \lverb|& +% La soustraction spéciale. +% % Elle fait l'expansion (une fois pour le premier, deux fois pour le second) de % ses arguments. Ceux-ci doivent être à l'envers sur 4n. De plus on sait a % priori que le second est > le premier. Et le résultat de la différence est % renvoyé **avec la même longueur que le second** (donc avec des leading zéros -% éventuels), et *à l'endroit*. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% éventuels), et *à l'endroit*.| % \begin{macrocode} -\def\XINT@div@sub@xpxp #1% +\def\XINT_div_sub_xpxp #1% {% - \expandafter \XINT@div@sub@xpxp@ \expandafter{#1}% + \expandafter \XINT_div_sub_xpxp_ \expandafter{#1}% }% -\def\XINT@div@sub@xpxp@ #1#2% +\def\XINT_div_sub_xpxp_ #1#2% {% - \expandafter\expandafter\expandafter\XINT@div@sub@xpxp@@ + \expandafter\expandafter\expandafter\XINT_div_sub_xpxp__ #2\W\X\Y\Z #1\W\X\Y\Z }% -\def\XINT@div@sub@xpxp@@ +\def\XINT_div_sub_xpxp__ {% - \XINT@div@sub@A 1{}% + \XINT_div_sub_A 1{}% }% -\def\XINT@div@sub@A #1#2#3#4#5#6% +\def\XINT_div_sub_A #1#2#3#4#5#6% {% - \xint@w #3\xint@div@sub@az\W - \XINT@div@sub@B #1{#3#4#5#6}{#2}% + \xint_gob_til_w #3\xint_div_sub_az\W + \XINT_div_sub_B #1{#3#4#5#6}{#2}% }% -\def\XINT@div@sub@B #1#2#3#4\W\X\Y\Z #5#6#7#8% +\def\XINT_div_sub_B #1#2#3#4\W\X\Y\Z #5#6#7#8% {% - \xint@w #5\xint@div@sub@bz\W - \XINT@div@sub@onestep #1#2{#8#7#6#5}{#3}#4\W\X\Y\Z + \xint_gob_til_w #5\xint_div_sub_bz\W + \XINT_div_sub_onestep #1#2{#8#7#6#5}{#3}#4\W\X\Y\Z }% -\def\XINT@div@sub@onestep #1#2#3#4#5#6% +\def\XINT_div_sub_onestep #1#2#3#4#5#6% {% - \expandafter\XINT@div@sub@backtoA\the\numexpr 11#5#4#3#2-#6+#1-1\relax.% + \expandafter\XINT_div_sub_backtoA\the\numexpr 11#5#4#3#2-#6+#1-1\relax.% }% -\def\XINT@div@sub@backtoA #1#2#3.#4% +\def\XINT_div_sub_backtoA #1#2#3.#4% {% - \XINT@div@sub@A #2{#3#4}% + \XINT_div_sub_A #2{#3#4}% }% -\def\xint@div@sub@bz\W\XINT@div@sub@onestep #1#2#3#4#5#6#7% +\def\xint_div_sub_bz\W\XINT_div_sub_onestep #1#2#3#4#5#6#7% {% - \xint@UDzerofork - #1\dummy \XINT@div@sub@C % - 0\dummy \XINT@div@sub@D % pas de retenue - \xint@UDkrof + \xint_UDzerofork + #1\dummy \XINT_div_sub_C % + 0\dummy \XINT_div_sub_D % pas de retenue + \krof {#7}#2#3#4#5% }% -\def\XINT@div@sub@D #1#2\W\X\Y\Z +\def\XINT_div_sub_D #1#2\W\X\Y\Z {% \expandafter\space \romannumeral0% - \XINT@rord@main {}#2% - \xint@UNDEF - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@UNDEF + \XINT_rord_main {}#2% + \xint_relax + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_relax #1% }% -\def\XINT@div@sub@C #1#2#3#4#5% +\def\XINT_div_sub_C #1#2#3#4#5% {% - \xint@w #2\xint@div@sub@cz\W - \XINT@div@sub@AC@onestep {#5#4#3#2}{#1}% + \xint_gob_til_w #2\xint_div_sub_cz\W + \XINT_div_sub_AC_onestep {#5#4#3#2}{#1}% }% -\def\XINT@div@sub@AC@onestep #1% +\def\XINT_div_sub_AC_onestep #1% {% - \expandafter\XINT@div@sub@backtoC\the\numexpr 11#1-1\relax.% + \expandafter\XINT_div_sub_backtoC\the\numexpr 11#1-1\relax.% }% -\def\XINT@div@sub@backtoC #1#2#3.#4% +\def\XINT_div_sub_backtoC #1#2#3.#4% {% - \XINT@div@sub@AC@checkcarry #2{#3#4}% la retenue va \^etre examin\'ee + \XINT_div_sub_AC_checkcarry #2{#3#4}% la retenue va \^etre examin\'ee }% -\def\XINT@div@sub@AC@checkcarry #1% +\def\XINT_div_sub_AC_checkcarry #1% {% - \xint@one #1\xint@div@sub@AC@nocarry 1\XINT@div@sub@C + \xint_gob_til_one #1\xint_div_sub_AC_nocarry 1\XINT_div_sub_C }% -\def\xint@div@sub@AC@nocarry 1\XINT@div@sub@C #1#2\W\X\Y\Z +\def\xint_div_sub_AC_nocarry 1\XINT_div_sub_C #1#2\W\X\Y\Z {% \expandafter\space \romannumeral0% - \XINT@rord@main {}#2% - \xint@UNDEF - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@UNDEF + \XINT_rord_main {}#2% + \xint_relax + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_relax #1% }% -\def\xint@div@sub@cz\W\XINT@div@sub@AC@onestep #1#2{ #2}% -\def\xint@div@sub@az\W\XINT@div@sub@B #1#2#3#4\Z { #3}% +\def\xint_div_sub_cz\W\XINT_div_sub_AC_onestep #1#2{ #2}% +\def\xint_div_sub_az\W\XINT_div_sub_B #1#2#3#4\Z { #3}% % \end{macrocode} -% \begin{verbatim} -%----------------------------------------------------------------- -%----------------------------------------------------------------- +% \lverb|& +% & +% -----------------------------------------------------------------$\ +% -----------------------------------------------------------------$\ % DECIMAL OPERATIONS: FIRST DIGIT, LASTDIGIT, ODDNESS, % MULTIPLICATION BY TEN, QUOTIENT BY TEN, QUOTIENT OR -% MULTIPLICATION BY POWER OF TEN, SPLIT OPERATION. -% \end{verbatim} -% \vspace*{-2\baselineskip} +% MULTIPLICATION BY POWER OF TEN, SPLIT OPERATION.| % \subsection{\csh{xintFDg}} -% \begin{verbatim} -% FIRST DIGIT. Code simplified in 1.05. And prepared for redefinition by -% xintfrac to parse through \xintNum -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% FIRST DIGIT. Code simplified in 1.05. +% And prepared for redefinition by xintfrac to parse through \xintNum| % \begin{macrocode} \def\xintiFDg {\romannumeral0\xintifdg }% \def\xintifdg #1% {% - \expandafter\XINT@fdg \romannumeral-`0#1\W\Z + \expandafter\XINT_fdg \romannumeral-`0#1\W\Z }% \let\xintFDg\xintiFDg \let\xintfdg\xintifdg -\def\XINT@FDg #1{\romannumeral0\XINT@fdg #1\W\Z }% -\def\XINT@fdg #1#2#3\Z +\def\XINT_FDg #1{\romannumeral0\XINT_fdg #1\W\Z }% +\def\XINT_fdg #1#2#3\Z {% - \xint@UDzerominusfork + \xint_UDzerominusfork #1-\dummy { 0}% zero 0#1\dummy { #2}% negative 0-\dummy { #1}% positive - \xint@UDkrof + \krof }% % \end{macrocode} % \subsection{\csh{xintLDg}} -% \begin{verbatim} -% LAST DIGIT. Simplified in 1.05. And prepared for extension by xintfrac -% to parse through \xintNum -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% LAST DIGIT. Simplified in 1.05. And prepared for extension by xintfrac +% to parse through \xintNum| % \begin{macrocode} \def\xintiLDg {\romannumeral0\xintildg }% \def\xintildg #1% {% - \expandafter\XINT@ldg\expandafter {\romannumeral-`0#1}% + \expandafter\XINT_ldg\expandafter {\romannumeral-`0#1}% }% \let\xintLDg\xintiLDg \let\xintldg\xintildg -\def\XINT@LDg #1{\romannumeral0\XINT@ldg {#1}}% -\def\XINT@ldg #1% +\def\XINT_LDg #1{\romannumeral0\XINT_ldg {#1}}% +\def\XINT_ldg #1% {% - \expandafter\XINT@ldg@\romannumeral0\XINT@rev {#1}\Z + \expandafter\XINT_ldg_\romannumeral0\XINT_rev {#1}\Z }% -\def\XINT@ldg@ #1#2\Z{ #1}% +\def\XINT_ldg_ #1#2\Z{ #1}% % \end{macrocode} % \subsection{\csh{xintMON}} -% \begin{verbatim} -% MINUS ONE TO THE POWER N -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% MINUS ONE TO THE POWER N| % \begin{macrocode} \def\xintiMON {\romannumeral0\xintimon }% \def\xintimon #1% {% \ifodd\xintiLDg {#1} - \xint@afterfi{ -1}% + \xint_afterfi{ -1}% \else - \xint@afterfi{ 1}% + \xint_afterfi{ 1}% \fi }% \def\xintiMMON {\romannumeral0\xintimmon }% \def\xintimmon #1% {% \ifodd\xintiLDg {#1} - \xint@afterfi{ 1}% + \xint_afterfi{ 1}% \else - \xint@afterfi{ -1}% + \xint_afterfi{ -1}% \fi }% \let\xintMON\xintiMON \let\xintmon\xintimon \let\xintMMON\xintiMMON \let\xintmmon\xintimmon % \end{macrocode} % \subsection{\csh{xintOdd}} -% \begin{verbatim} -% ODDNESS. 1.05 defines \xintiOdd, so \xintOdd can be modified by xintfrac -% to parse through \xintNum. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% ODDNESS. 1.05 defines \xintiOdd, so \xintOdd can be modified by +% xintfrac +% to parse through \xintNum.| % \begin{macrocode} \def\xintiOdd {\romannumeral0\xintiodd }% \def\xintiodd #1% {% \ifodd\xintiLDg{#1} - \xint@afterfi{ 1}% + \xint_afterfi{ 1}% \else - \xint@afterfi{ 0}% + \xint_afterfi{ 0}% \fi }% -\def\XINT@Odd #1% +\def\XINT_Odd #1% {\romannumeral0% - \ifodd\XINT@LDg{#1} - \xint@afterfi{ 1}% + \ifodd\XINT_LDg{#1} + \xint_afterfi{ 1}% \else - \xint@afterfi{ 0}% + \xint_afterfi{ 0}% \fi }% \let\xintOdd\xintiOdd \let\xintodd\xintiodd % \end{macrocode} % \subsection{\csh{xintDSL}} -% \begin{verbatim} -% DECIMAL SHIFT LEFT (=MULTIPLICATION PAR 10) -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% DECIMAL SHIFT LEFT (=MULTIPLICATION PAR 10)| % \begin{macrocode} \def\xintDSL {\romannumeral0\xintdsl }% \def\xintdsl #1% {% - \expandafter\XINT@dsl \romannumeral-`0#1\Z + \expandafter\XINT_dsl \romannumeral-`0#1\Z }% -\def\XINT@DSL #1{\romannumeral0\XINT@dsl #1\Z }% -\def\XINT@dsl #1% +\def\XINT_DSL #1{\romannumeral0\XINT_dsl #1\Z }% +\def\XINT_dsl #1% {% - \xint@zero #1\xint@dsl@zero 0\XINT@dsl@ #1% + \xint_gob_til_zero #1\xint_dsl_zero 0\XINT_dsl_ #1% }% -\def\xint@dsl@zero 0\XINT@dsl@ 0#1\Z { 0}% -\def\XINT@dsl@ #1\Z { #10}% +\def\xint_dsl_zero 0\XINT_dsl_ 0#1\Z { 0}% +\def\XINT_dsl_ #1\Z { #10}% % \end{macrocode} % \subsection{\csh{xintDSR}} -% \begin{verbatim} -% DECIMAL SHIFT RIGHT (=DIVISION PAR 10) -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% DECIMAL SHIFT RIGHT (=DIVISION PAR 10)| % \begin{macrocode} \def\xintDSR {\romannumeral0\xintdsr }% \def\xintdsr #1% {% - \expandafter\XINT@dsr@a\expandafter {\romannumeral-`0#1}\W\Z + \expandafter\XINT_dsr_a\expandafter {\romannumeral-`0#1}\W\Z }% -\def\XINT@DSR #1{\romannumeral0\XINT@dsr@a {#1}\W\Z }% -\def\XINT@dsr@a +\def\XINT_DSR #1{\romannumeral0\XINT_dsr_a {#1}\W\Z }% +\def\XINT_dsr_a {% - \expandafter\XINT@dsr@b\romannumeral0\XINT@rev + \expandafter\XINT_dsr_b\romannumeral0\XINT_rev }% -\def\XINT@dsr@b #1#2#3\Z +\def\XINT_dsr_b #1#2#3\Z {% - \xint@w #2\xint@dsr@onedigit\W - \xint@minus #2\xint@dsr@onedigit-% - \expandafter\XINT@dsr@removew - \romannumeral0\XINT@rev {#2#3}% + \xint_gob_til_w #2\xint_dsr_onedigit\W + \xint_minus #2\xint_dsr_onedigit-% + \expandafter\XINT_dsr_removew + \romannumeral0\XINT_rev {#2#3}% }% -\def\xint@dsr@onedigit #1\XINT@rev #2{ 0}% -\def\XINT@dsr@removew #1\W { }% +\def\xint_dsr_onedigit #1\XINT_rev #2{ 0}% +\def\XINT_dsr_removew #1\W { }% % \end{macrocode} % \subsection{\csh{xintDSH}, \csh{xintDSHr}} -% \begin{verbatim} -% DECIMAL SHIFTS -% \xintDSH {x}{A} -% si x <= 0, fait A -> A.10^(|x|). v1.03 corrige l'oversight pour A=0. -% si x > 0, et A >=0, fait A -> quo(A,10^(x)) -% si x > 0, et A < 0, fait A -> -quo(-A,10^(x)) -% (donc pour x > 0 c'est comme DSR itéré x fois) +% \lverb+DECIMAL SHIFTS \xintDSH {x}{A}$\ +% si x <= 0, fait A -> A.10^(|x|). v1.03 corrige l'oversight pour A=0.n +% si x > 0, et A >=0, fait A -> quo(A,10^(x))$\ +% si x > 0, et A < 0, fait A -> -quo(-A,10^(x))$\ +% (donc pour x > 0 c'est comme DSR itéré x fois)$\ % \xintDSHr donne le `reste' (si x<=0 donne zéro). +% % Release 1.06 now feeds x to a \numexpr first. I will revise the legacy code on -% another occasion. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% another occasion.+ % \begin{macrocode} \def\xintDSHr {\romannumeral0\xintdshr }% \def\xintdshr #1% {% - \expandafter\XINT@dshr@checkxpositive \the\numexpr #1\relax\Z + \expandafter\XINT_dshr_checkxpositive \the\numexpr #1\relax\Z }% -\def\XINT@dshr@checkxpositive #1% +\def\XINT_dshr_checkxpositive #1% {% - \xint@UDzerominusfork - 0#1\dummy \XINT@dshr@xzeroorneg - #1-\dummy \XINT@dshr@xzeroorneg - 0-\dummy \XINT@dshr@xpositive - \xint@UDkrof #1% + \xint_UDzerominusfork + 0#1\dummy \XINT_dshr_xzeroorneg + #1-\dummy \XINT_dshr_xzeroorneg + 0-\dummy \XINT_dshr_xpositive + \krof #1% }% -\def\XINT@dshr@xzeroorneg #1\Z #2{ 0}% -\def\XINT@dshr@xpositive #1\Z +\def\XINT_dshr_xzeroorneg #1\Z #2{ 0}% +\def\XINT_dshr_xpositive #1\Z {% - \expandafter\xint@secondoftwo@andstop\romannumeral0\xintdsx {#1}% + \expandafter\xint_secondoftwo_andstop\romannumeral0\xintdsx {#1}% }% \def\xintDSH {\romannumeral0\xintdsh }% \def\xintdsh #1#2% {% - \expandafter\xint@dsh\expandafter {\romannumeral-`0#2}{#1}% + \expandafter\xint_dsh\expandafter {\romannumeral-`0#2}{#1}% }% -\def\xint@dsh #1#2% +\def\xint_dsh #1#2% {% - \expandafter\XINT@dsh@checksignx \the\numexpr #2\relax\Z {#1}% + \expandafter\XINT_dsh_checksignx \the\numexpr #2\relax\Z {#1}% }% -\def\XINT@dsh@checksignx #1% +\def\XINT_dsh_checksignx #1% {% - \xint@UDzerominusfork - #1-\dummy \XINT@dsh@xiszero - 0#1\dummy \XINT@dsx@xisNeg@checkA % on passe direct dans DSx - 0-\dummy {\XINT@dsh@xisPos #1}% - \xint@UDkrof + \xint_UDzerominusfork + #1-\dummy \XINT_dsh_xiszero + 0#1\dummy \XINT_dsx_xisNeg_checkA % on passe direct dans DSx + 0-\dummy {\XINT_dsh_xisPos #1}% + \krof }% -\def\XINT@dsh@xiszero #1\Z #2{ #2}% -\def\XINT@dsh@xisPos #1\Z #2% +\def\XINT_dsh_xiszero #1\Z #2{ #2}% +\def\XINT_dsh_xisPos #1\Z #2% {% - \expandafter\xint@firstoftwo@andstop - \romannumeral0\XINT@dsx@checksignA #2\Z {#1}% via DSx + \expandafter\xint_firstoftwo_andstop + \romannumeral0\XINT_dsx_checksignA #2\Z {#1}% via DSx }% % \end{macrocode} % \subsection{\csh{xintDSx}} -% \begin{verbatim} -% Je fais cette routine pour la version 1.01, après modification de +% \lverb+Je fais cette routine pour la version 1.01, après modification de % \xintDecSplit. Dorénavant \xintDSx fera appel à \xintDecSplit et de même % \xintDSH fera appel à \xintDSx. J'ai donc supprimé entièrement l'ancien code % de \xintDSH et re-écrit entièrement celui de \xintDecSplit pour x positif. -% --> Attention le cas x=0 est traité dans la même catégorie que x > 0 <-- -% si x < 0, fait A -> A.10^(|x|) -% si x >= 0, et A >=0, fait A -> {quo(A,10^(x))}{rem(A,10^(x))} -% si x >= 0, et A < 0, d'abord on calcule {quo(-A,10^(x))}{rem(-A,10^(x))} -% puis, si le premier n'est pas nul on lui donne le signe - +% +% --> Attention le cas x=0 est traité dans la même catégorie que x > 0 <--$\ +% si x < 0, fait A -> A.10^(|x|)$\ +% si x >= 0, et A >=0, fait A -> {quo(A,10^(x))}{rem(A,10^(x))}$\ +% si x >= 0, et A < 0, d'abord on calcule {quo(-A,10^(x))}{rem(-A,10^(x))}$\ +% puis, si le premier n'est pas nul on lui donne le signe -$\ % si le premier est nul on donne le signe - au second. +% % On peut donc toujours reconstituer l'original A par 10^x Q \pm R % où il faut prendre le signe plus si Q est positif ou nul et le signe moins si % Q est strictement négatif. -% Release 1.06 has a faster and more compactly coded \XINT@dsx@zeroloop. +% +% Release 1.06 has a faster and more compactly coded \XINT_dsx_zeroloop. % Also, x is now given to a \numexpr. The earlier code should be then -% simplified, but I leave as is for the time being. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% simplified, but I leave as is for the time being.+ % \begin{macrocode} \def\xintDSx {\romannumeral0\xintdsx }% \def\xintdsx #1#2% {% - \expandafter\xint@dsx\expandafter {\romannumeral-`0#2}{#1}% + \expandafter\xint_dsx\expandafter {\romannumeral-`0#2}{#1}% }% -\def\xint@dsx #1#2% +\def\xint_dsx #1#2% {% - \expandafter\XINT@dsx@checksignx \the\numexpr #2\relax\Z {#1}% + \expandafter\XINT_dsx_checksignx \the\numexpr #2\relax\Z {#1}% }% -\def\XINT@DSx #1#2{\romannumeral0\XINT@dsx@checksignx #1\Z {#2}}% -\def\XINT@dsx #1#2{\XINT@dsx@checksignx #1\Z {#2}}% -\def\XINT@dsx@checksignx #1% +\def\XINT_DSx #1#2{\romannumeral0\XINT_dsx_checksignx #1\Z {#2}}% +\def\XINT_dsx #1#2{\XINT_dsx_checksignx #1\Z {#2}}% +\def\XINT_dsx_checksignx #1% {% - \xint@UDzerominusfork - #1-\dummy \XINT@dsx@xisZero - 0#1\dummy \XINT@dsx@xisNeg@checkA - 0-\dummy {\XINT@dsx@xisPos #1}% - \xint@UDkrof + \xint_UDzerominusfork + #1-\dummy \XINT_dsx_xisZero + 0#1\dummy \XINT_dsx_xisNeg_checkA + 0-\dummy {\XINT_dsx_xisPos #1}% + \krof }% -\def\XINT@dsx@xisZero #1\Z #2{ {#2}{0}}% attention comme x > 0 -\def\XINT@dsx@xisNeg@checkA #1\Z #2% +\def\XINT_dsx_xisZero #1\Z #2{ {#2}{0}}% attention comme x > 0 +\def\XINT_dsx_xisNeg_checkA #1\Z #2% {% - \XINT@dsx@xisNeg@checkA@ #2\Z {#1}% + \XINT_dsx_xisNeg_checkA_ #2\Z {#1}% }% -\def\XINT@dsx@xisNeg@checkA@ #1#2\Z #3% +\def\XINT_dsx_xisNeg_checkA_ #1#2\Z #3% {% - \xint@zero #1\XINT@dsx@xisNeg@Azero 0% - \XINT@dsx@xisNeg@checkx {#3}{#3}\Z {#1#2}% + \xint_gob_til_zero #1\XINT_dsx_xisNeg_Azero 0% + \XINT_dsx_xisNeg_checkx {#3}{#3}\Z {#1#2}% }% -\def\XINT@dsx@xisNeg@Azero #1\Z #2{ 0}% -\def\XINT@dsx@xisNeg@checkx #1% +\def\XINT_dsx_xisNeg_Azero #1\Z #2{ 0}% +\def\XINT_dsx_xisNeg_checkx #1% {% - \ifnum #1> 999999999 - \xint@afterfi + \ifnum #1>999999999 + \xint_afterfi {\xintError:TooBigDecimalShift - \expandafter\space\expandafter 0\xint@gobble@iii }% + \expandafter\space\expandafter 0\xint_gobble_iii }% \else - \expandafter \XINT@dsx@zeroloop + \expandafter \XINT_dsx_zeroloop \fi }% -\def\XINT@dsx@zeroloop #1% +\def\XINT_dsx_zeroloop #1% {% - \ifnum #1<9 \XINT@dsx@exita\fi - \expandafter\XINT@dsx@zeroloop\expandafter + \ifnum #1<9 \XINT_dsx_exita\fi + \expandafter\XINT_dsx_zeroloop\expandafter {\the\numexpr #1-8}00000000% }% -\def\XINT@dsx@exita\fi\expandafter\XINT@dsx@zeroloop +\def\XINT_dsx_exita\fi\expandafter\XINT_dsx_zeroloop {% - \fi\expandafter\XINT@dsx@exitb + \fi\expandafter\XINT_dsx_exitb }% -\def\XINT@dsx@exitb #1% +\def\XINT_dsx_exitb #1% {% \expandafter\expandafter\expandafter - \XINT@dsx@addzeros\csname xint@gobble@\romannumeral -#1\endcsname + \XINT_dsx_addzeros\csname xint_gobble_\romannumeral -#1\endcsname }% -\def\XINT@dsx@addzeros #1\Z #2{ #2#1}% -\def\XINT@dsx@xisPos #1\Z #2% +\def\XINT_dsx_addzeros #1\Z #2{ #2#1}% +\def\XINT_dsx_xisPos #1\Z #2% {% - \XINT@dsx@checksignA #2\Z {#1}% + \XINT_dsx_checksignA #2\Z {#1}% }% -\def\XINT@dsx@checksignA #1% +\def\XINT_dsx_checksignA #1% {% - \xint@UDzerominusfork - #1-\dummy \XINT@dsx@AisZero - 0#1\dummy \XINT@dsx@AisNeg - 0-\dummy {\XINT@dsx@AisPos #1}% - \xint@UDkrof + \xint_UDzerominusfork + #1-\dummy \XINT_dsx_AisZero + 0#1\dummy \XINT_dsx_AisNeg + 0-\dummy {\XINT_dsx_AisPos #1}% + \krof }% -\def\XINT@dsx@AisZero #1\Z #2{ {0}{0}}% -\def\XINT@dsx@AisNeg #1\Z #2% +\def\XINT_dsx_AisZero #1\Z #2{ {0}{0}}% +\def\XINT_dsx_AisNeg #1\Z #2% {% - \expandafter\XINT@dsx@AisNeg@dosplit@andcheckfirst - \romannumeral0\XINT@split@checksizex {#2}{#1}% + \expandafter\XINT_dsx_AisNeg_dosplit_andcheckfirst + \romannumeral0\XINT_split_checksizex {#2}{#1}% }% -\def\XINT@dsx@AisNeg@dosplit@andcheckfirst #1% +\def\XINT_dsx_AisNeg_dosplit_andcheckfirst #1% {% - \XINT@dsx@AisNeg@checkiffirstempty #1\Z + \XINT_dsx_AisNeg_checkiffirstempty #1\Z }% -\def\XINT@dsx@AisNeg@checkiffirstempty #1% +\def\XINT_dsx_AisNeg_checkiffirstempty #1% {% - \xint@z #1\XINT@dsx@AisNeg@finish@zero\Z - \XINT@dsx@AisNeg@finish@notzero #1% + \xint_gob_til_z #1\XINT_dsx_AisNeg_finish_zero\Z + \XINT_dsx_AisNeg_finish_notzero #1% }% -\def\XINT@dsx@AisNeg@finish@zero\Z - \XINT@dsx@AisNeg@finish@notzero\Z #1% +\def\XINT_dsx_AisNeg_finish_zero\Z + \XINT_dsx_AisNeg_finish_notzero\Z #1% {% - \expandafter\XINT@dsx@end - \expandafter {\romannumeral0\XINT@num {-#1}}{0}% + \expandafter\XINT_dsx_end + \expandafter {\romannumeral0\XINT_num {-#1}}{0}% }% -\def\XINT@dsx@AisNeg@finish@notzero #1\Z #2% +\def\XINT_dsx_AisNeg_finish_notzero #1\Z #2% {% - \expandafter\XINT@dsx@end - \expandafter {\romannumeral0\XINT@num {#2}}{-#1}% + \expandafter\XINT_dsx_end + \expandafter {\romannumeral0\XINT_num {#2}}{-#1}% }% -\def\XINT@dsx@AisPos #1\Z #2% +\def\XINT_dsx_AisPos #1\Z #2% {% - \expandafter\XINT@dsx@AisPos@finish - \romannumeral0\XINT@split@checksizex {#2}{#1}% + \expandafter\XINT_dsx_AisPos_finish + \romannumeral0\XINT_split_checksizex {#2}{#1}% }% -\def\XINT@dsx@AisPos@finish #1#2% +\def\XINT_dsx_AisPos_finish #1#2% {% - \expandafter\XINT@dsx@end - \expandafter {\romannumeral0\XINT@num {#2}}% - {\romannumeral0\XINT@num {#1}}% + \expandafter\XINT_dsx_end + \expandafter {\romannumeral0\XINT_num {#2}}% + {\romannumeral0\XINT_num {#1}}% }% -\def\XINT@dsx@end #1#2% +\def\XINT_dsx_end #1#2% {% \expandafter\space\expandafter{#2}{#1}% }% % \end{macrocode} % \subsection{\csh{xintDecSplit},~\csh{xintDecSplitL},~\csh{xintDecSplitR}} -% \begin{verbatim} -% DECIMAL SPLIT +% \lverb!DECIMAL SPLIT +% % The macro \xintDecSplit {x}{A} first replaces A with |A| (*) % This macro cuts the number into two pieces L and R. The concatenation LR % always reproduces |A|, and R may be empty or have leading zeros. The @@ -8200,172 +8154,175 @@ first place. % number. If x becomes equal to or larger than the length of the number then L % becomes empty. If x is negative the location of the cut is |x| slots to the % right of the left end of the number. +% % (*) warning: this may change in a future version. Only the behavior % for A non-negative is guaranteed to remain the same. -% v1.05a: \XINT@split@checksizex does not compute the length anymore, rather the +% +% v1.05a: \XINT_split_checksizex does not compute the length anymore, rather the % error will be from a \numexpr; but the limit of 999999999 does not make much % sense. -% v1.06: Improvements in \XINT@split@fromleft@loop, \XINT@split@fromright@loop +% +% v1.06: Improvements in \XINT_split_fromleft_loop, \XINT_split_fromright_loop % and related macros. More readable coding, speed gains. -% Also, I now feed immediately a \numexpr with x. Some simplifications may then -% be perhaps made to the code, it is kept as is for the time being. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% Also, I now feed immediately a \numexpr with x. Some simplifications should +% probably be made to the code, which is kept as is for the time being.! % \begin{macrocode} \def\xintDecSplitL {\romannumeral0\xintdecsplitl }% \def\xintDecSplitR {\romannumeral0\xintdecsplitr }% \def\xintdecsplitl {% - \expandafter\xint@firstoftwo@andstop + \expandafter\xint_firstoftwo_andstop \romannumeral0\xintdecsplit }% \def\xintdecsplitr {% - \expandafter\xint@secondoftwo@andstop + \expandafter\xint_secondoftwo_andstop \romannumeral0\xintdecsplit }% \def\xintDecSplit {\romannumeral0\xintdecsplit }% \def\xintdecsplit #1#2% {% - \expandafter \xint@split \expandafter + \expandafter \xint_split \expandafter {\romannumeral0\xintiabs {#2}}{#1}% fait expansion de A }% -\def\xint@split #1#2% +\def\xint_split #1#2% {% - \expandafter\XINT@split@checksizex\expandafter{\the\numexpr #2}{#1}% + \expandafter\XINT_split_checksizex\expandafter{\the\numexpr #2}{#1}% }% -\def\XINT@split@checksizex #1% 999999999 is anyhow very big, could be reduced +\def\XINT_split_checksizex #1% 999999999 is anyhow very big, could be reduced {% - \ifnum\numexpr\XINT@Abs{#1}\relax > 999999999 - \xint@afterfi {\xintError:TooBigDecimalSplit\XINT@split@bigx }% + \ifnum\numexpr\XINT_Abs{#1}>999999999 + \xint_afterfi {\xintError:TooBigDecimalSplit\XINT_split_bigx }% \else - \expandafter\XINT@split@xfork + \expandafter\XINT_split_xfork \fi #1\Z }% -\def\XINT@split@bigx #1\Z #2% +\def\XINT_split_bigx #1\Z #2% {% - \ifcase\XINT@Sgn {#1} - \or \xint@afterfi { {}{#2}}% positive big x + \ifcase\XINT_Sgn {#1} + \or \xint_afterfi { {}{#2}}% positive big x \else - \xint@afterfi { {#2}{}}% negative big x + \xint_afterfi { {#2}{}}% negative big x \fi }% -\def\XINT@split@xfork #1% +\def\XINT_split_xfork #1% {% - \xint@UDzerominusfork - #1-\dummy \XINT@split@zerosplit - 0#1\dummy \XINT@split@fromleft - 0-\dummy {\XINT@split@fromright #1}% - \xint@UDkrof + \xint_UDzerominusfork + #1-\dummy \XINT_split_zerosplit + 0#1\dummy \XINT_split_fromleft + 0-\dummy {\XINT_split_fromright #1}% + \krof }% -\def\XINT@split@zerosplit #1\Z #2{ {#2}{}}% -\def\XINT@split@fromleft #1\Z #2% +\def\XINT_split_zerosplit #1\Z #2{ {#2}{}}% +\def\XINT_split_fromleft #1\Z #2% {% - \XINT@split@fromleft@loop {#1}{}#2\W\W\W\W\W\W\W\W\Z + \XINT_split_fromleft_loop {#1}{}#2\W\W\W\W\W\W\W\W\Z }% -\def\XINT@split@fromleft@loop #1% +\def\XINT_split_fromleft_loop #1% {% - \ifnum #1<8 \XINT@split@fromleft@exita\fi - \expandafter\XINT@split@fromleft@loop@perhaps\expandafter - {\the\numexpr #1-8\expandafter}\XINT@split@fromleft@eight + \ifnum #1<8 \XINT_split_fromleft_exita\fi + \expandafter\XINT_split_fromleft_loop_perhaps\expandafter + {\the\numexpr #1-8\expandafter}\XINT_split_fromleft_eight }% -\def\XINT@split@fromleft@eight #1#2#3#4#5#6#7#8#9{#9{#1#2#3#4#5#6#7#8#9}}% -\def\XINT@split@fromleft@loop@perhaps #1#2% +\def\XINT_split_fromleft_eight #1#2#3#4#5#6#7#8#9{#9{#1#2#3#4#5#6#7#8#9}}% +\def\XINT_split_fromleft_loop_perhaps #1#2% {% - \xint@w #2\XINT@split@fromleft@toofar\W\XINT@split@fromleft@loop {#1}% + \xint_gob_til_w #2\XINT_split_fromleft_toofar\W + \XINT_split_fromleft_loop {#1}% }% -\def\XINT@split@fromleft@toofar\W\XINT@split@fromleft@loop #1#2#3\Z +\def\XINT_split_fromleft_toofar\W\XINT_split_fromleft_loop #1#2#3\Z {% - \XINT@split@fromleft@toofar@b #2\Z + \XINT_split_fromleft_toofar_b #2\Z }% -\def\XINT@split@fromleft@toofar@b #1\W #2\Z { {#1}{}}% -\def\XINT@split@fromleft@exita\fi - \expandafter\XINT@split@fromleft@loop@perhaps\expandafter #1#2% - {\fi \XINT@split@fromleft@exitb #1}% -\def\XINT@split@fromleft@exitb\the\numexpr #1-8\expandafter +\def\XINT_split_fromleft_toofar_b #1\W #2\Z { {#1}{}}% +\def\XINT_split_fromleft_exita\fi + \expandafter\XINT_split_fromleft_loop_perhaps\expandafter #1#2% + {\fi \XINT_split_fromleft_exitb #1}% +\def\XINT_split_fromleft_exitb\the\numexpr #1-8\expandafter {% - \csname XINT@split@fromleft@endsplit@\romannumeral #1\endcsname + \csname XINT_split_fromleft_endsplit_\romannumeral #1\endcsname }% -\def\XINT@split@fromleft@endsplit@ #1#2\W #3\Z { {#1}{#2}}% -\def\XINT@split@fromleft@endsplit@i #1#2% - {\XINT@split@fromleft@checkiftoofar #2{#1#2}}% -\def\XINT@split@fromleft@endsplit@ii #1#2#3% - {\XINT@split@fromleft@checkiftoofar #3{#1#2#3}}% -\def\XINT@split@fromleft@endsplit@iii #1#2#3#4% - {\XINT@split@fromleft@checkiftoofar #4{#1#2#3#4}}% -\def\XINT@split@fromleft@endsplit@iv #1#2#3#4#5% - {\XINT@split@fromleft@checkiftoofar #5{#1#2#3#4#5}}% -\def\XINT@split@fromleft@endsplit@v #1#2#3#4#5#6% - {\XINT@split@fromleft@checkiftoofar #6{#1#2#3#4#5#6}}% -\def\XINT@split@fromleft@endsplit@vi #1#2#3#4#5#6#7% - {\XINT@split@fromleft@checkiftoofar #7{#1#2#3#4#5#6#7}}% -\def\XINT@split@fromleft@endsplit@vii #1#2#3#4#5#6#7#8% - {\XINT@split@fromleft@checkiftoofar #8{#1#2#3#4#5#6#7#8}}% -\def\XINT@split@fromleft@checkiftoofar #1#2#3\W #4\Z +\def\XINT_split_fromleft_endsplit_ #1#2\W #3\Z { {#1}{#2}}% +\def\XINT_split_fromleft_endsplit_i #1#2% + {\XINT_split_fromleft_checkiftoofar #2{#1#2}}% +\def\XINT_split_fromleft_endsplit_ii #1#2#3% + {\XINT_split_fromleft_checkiftoofar #3{#1#2#3}}% +\def\XINT_split_fromleft_endsplit_iii #1#2#3#4% + {\XINT_split_fromleft_checkiftoofar #4{#1#2#3#4}}% +\def\XINT_split_fromleft_endsplit_iv #1#2#3#4#5% + {\XINT_split_fromleft_checkiftoofar #5{#1#2#3#4#5}}% +\def\XINT_split_fromleft_endsplit_v #1#2#3#4#5#6% + {\XINT_split_fromleft_checkiftoofar #6{#1#2#3#4#5#6}}% +\def\XINT_split_fromleft_endsplit_vi #1#2#3#4#5#6#7% + {\XINT_split_fromleft_checkiftoofar #7{#1#2#3#4#5#6#7}}% +\def\XINT_split_fromleft_endsplit_vii #1#2#3#4#5#6#7#8% + {\XINT_split_fromleft_checkiftoofar #8{#1#2#3#4#5#6#7#8}}% +\def\XINT_split_fromleft_checkiftoofar #1#2#3\W #4\Z {% - \xint@w #1\XINT@split@fromleft@wenttoofar\W\space {#2}{#3}% + \xint_gob_til_w #1\XINT_split_fromleft_wenttoofar\W + \space {#2}{#3}% }% -\def\XINT@split@fromleft@wenttoofar\W\space #1% +\def\XINT_split_fromleft_wenttoofar\W\space #1% {% - \XINT@split@fromleft@wenttoofar@b #1\Z + \XINT_split_fromleft_wenttoofar_b #1\Z }% -\def\XINT@split@fromleft@wenttoofar@b #1\W #2\Z { {#1}}% -\def\XINT@split@fromright #1\Z #2% +\def\XINT_split_fromleft_wenttoofar_b #1\W #2\Z { {#1}}% +\def\XINT_split_fromright #1\Z #2% {% - \expandafter \XINT@split@fromright@a \expandafter - {\romannumeral0\XINT@rev {#2}}{#1}{#2}% + \expandafter \XINT_split_fromright_a \expandafter + {\romannumeral0\XINT_rev {#2}}{#1}{#2}% }% -\def\XINT@split@fromright@a #1#2% +\def\XINT_split_fromright_a #1#2% {% - \XINT@split@fromright@loop {#2}{}#1\W\W\W\W\W\W\W\W\Z + \XINT_split_fromright_loop {#2}{}#1\W\W\W\W\W\W\W\W\Z }% -\def\XINT@split@fromright@loop #1% +\def\XINT_split_fromright_loop #1% {% - \ifnum #1<8 \XINT@split@fromright@exita\fi - \expandafter\XINT@split@fromright@loop@perhaps\expandafter - {\the\numexpr #1-8\expandafter }\XINT@split@fromright@eight + \ifnum #1<8 \XINT_split_fromright_exita\fi + \expandafter\XINT_split_fromright_loop_perhaps\expandafter + {\the\numexpr #1-8\expandafter }\XINT_split_fromright_eight }% -\def\XINT@split@fromright@eight #1#2#3#4#5#6#7#8#9{#9{#9#8#7#6#5#4#3#2#1}}% -\def\XINT@split@fromright@loop@perhaps #1#2% +\def\XINT_split_fromright_eight #1#2#3#4#5#6#7#8#9{#9{#9#8#7#6#5#4#3#2#1}}% +\def\XINT_split_fromright_loop_perhaps #1#2% {% - \xint@w #2\XINT@split@fromright@toofar\W - \XINT@split@fromright@loop {#1}% + \xint_gob_til_w #2\XINT_split_fromright_toofar\W + \XINT_split_fromright_loop {#1}% }% -\def\XINT@split@fromright@toofar\W\XINT@split@fromright@loop #1#2#3\Z { {}}% -\def\XINT@split@fromright@exita\fi - \expandafter\XINT@split@fromright@loop@perhaps\expandafter #1#2% - {\fi \XINT@split@fromright@exitb #1}% -\def\XINT@split@fromright@exitb\the\numexpr #1-8\expandafter +\def\XINT_split_fromright_toofar\W\XINT_split_fromright_loop #1#2#3\Z { {}}% +\def\XINT_split_fromright_exita\fi + \expandafter\XINT_split_fromright_loop_perhaps\expandafter #1#2% + {\fi \XINT_split_fromright_exitb #1}% +\def\XINT_split_fromright_exitb\the\numexpr #1-8\expandafter {% - \csname XINT@split@fromright@endsplit@\romannumeral #1\endcsname + \csname XINT_split_fromright_endsplit_\romannumeral #1\endcsname }% -\def\XINT@split@fromright@endsplit@ #1#2\W #3\Z #4% +\def\XINT_split_fromright_endsplit_ #1#2\W #3\Z #4% {% - \expandafter\space\expandafter {\romannumeral0\XINT@rev{#2}}{#1}% + \expandafter\space\expandafter {\romannumeral0\XINT_rev{#2}}{#1}% }% -\def\XINT@split@fromright@endsplit@i #1#2% - {\XINT@split@fromright@checkiftoofar #2{#2#1}}% -\def\XINT@split@fromright@endsplit@ii #1#2#3% - {\XINT@split@fromright@checkiftoofar #3{#3#2#1}}% -\def\XINT@split@fromright@endsplit@iii #1#2#3#4% - {\XINT@split@fromright@checkiftoofar #4{#4#3#2#1}}% -\def\XINT@split@fromright@endsplit@iv #1#2#3#4#5% - {\XINT@split@fromright@checkiftoofar #5{#5#4#3#2#1}}% -\def\XINT@split@fromright@endsplit@v #1#2#3#4#5#6% - {\XINT@split@fromright@checkiftoofar #6{#6#5#4#3#2#1}}% -\def\XINT@split@fromright@endsplit@vi #1#2#3#4#5#6#7% - {\XINT@split@fromright@checkiftoofar #7{#7#6#5#4#3#2#1}}% -\def\XINT@split@fromright@endsplit@vii #1#2#3#4#5#6#7#8% - {\XINT@split@fromright@checkiftoofar #8{#8#7#6#5#4#3#2#1}}% -\def\XINT@split@fromright@checkiftoofar #1% +\def\XINT_split_fromright_endsplit_i #1#2% + {\XINT_split_fromright_checkiftoofar #2{#2#1}}% +\def\XINT_split_fromright_endsplit_ii #1#2#3% + {\XINT_split_fromright_checkiftoofar #3{#3#2#1}}% +\def\XINT_split_fromright_endsplit_iii #1#2#3#4% + {\XINT_split_fromright_checkiftoofar #4{#4#3#2#1}}% +\def\XINT_split_fromright_endsplit_iv #1#2#3#4#5% + {\XINT_split_fromright_checkiftoofar #5{#5#4#3#2#1}}% +\def\XINT_split_fromright_endsplit_v #1#2#3#4#5#6% + {\XINT_split_fromright_checkiftoofar #6{#6#5#4#3#2#1}}% +\def\XINT_split_fromright_endsplit_vi #1#2#3#4#5#6#7% + {\XINT_split_fromright_checkiftoofar #7{#7#6#5#4#3#2#1}}% +\def\XINT_split_fromright_endsplit_vii #1#2#3#4#5#6#7#8% + {\XINT_split_fromright_checkiftoofar #8{#8#7#6#5#4#3#2#1}}% +\def\XINT_split_fromright_checkiftoofar #1% {% - \xint@w #1\XINT@split@fromright@wenttoofar\W - \XINT@split@fromright@endsplit@ + \xint_gob_til_w #1\XINT_split_fromright_wenttoofar\W + \XINT_split_fromright_endsplit_ }% -\def\XINT@split@fromright@wenttoofar\W\XINT@split@fromright@endsplit@ #1\Z #2% +\def\XINT_split_fromright_wenttoofar\W\XINT_split_fromright_endsplit_ #1\Z #2% { {}{#2}}% -\XINT@restorecatcodes@endinput% +\XINT_restorecatcodes_endinput% % \end{macrocode} %\catcode`\<=0 \catcode`\>=11 \catcode`\*=11 \catcode`\/=11 %\let\relax @@ -8471,8 +8428,8 @@ first place. % % Perhaps catcodes have changed after the loading of \xintname % and prior to the current loading of \xintgcdname, so we can not employ -% the |\XINT@restorecatcodes@endinput| in this style file. But -% there is no problem using |\XINT@setcatcodes|. +% the |\XINT_restorecatcodes_endinput| in this style file. But +% there is no problem using |\XINT_setcatcodes|. % % \begin{macrocode} \begingroup\catcode61\catcode48\catcode32=10\relax% @@ -8480,11 +8437,11 @@ first place. \endlinechar=13 % \catcode123=1 % { \catcode125=2 % } - \catcode64=11 % @ + \catcode95=11 % _ \def\x {% \endgroup - \edef\XINT@gcd@restorecatcodes@endinput + \edef\XINT_gcd_restorecatcodes_endinput {% \catcode36=\the\catcode36 % $ \catcode96=\the\catcode96 % ` @@ -8500,7 +8457,7 @@ first place. \catcode45=\the\catcode45 % - \catcode44=\the\catcode44 % , \catcode35=\the\catcode35 % # - \catcode64=\the\catcode64 % @ + \catcode95=\the\catcode95 % _ \catcode125=\the\catcode125 % } \catcode123=\the\catcode123 % { \endlinechar=\the\endlinechar @@ -8509,7 +8466,7 @@ first place. \catcode61=\the\catcode61\relax % = \noexpand\endinput }% - \XINT@setcatcodes + \XINT_setcatcodes \catcode36=3 % $ }% \x @@ -8517,6 +8474,7 @@ first place. % \subsection{Package identification} % \begin{macrocode} \begingroup + \catcode64=11 % @ \catcode91=12 % [ \catcode93=12 % ] \catcode58=12 % : @@ -8538,55 +8496,48 @@ first place. \fi \expandafter\x\csname ver@xintgcd.sty\endcsname \ProvidesPackage{xintgcd}% - [2013/05/09 v1.06a Euclide algorithm with xint package (jfB)]% + [2013/05/14 v1.06b Euclide algorithm with xint package (jfB)]% % \end{macrocode} % \subsection{\csh{xintGCD}} % \begin{macrocode} \def\xintGCD {\romannumeral0\xintgcd }% \def\xintgcd #1% {% - \expandafter\XINT@gcd\expandafter{\romannumeral0\xintiabs {#1}}% + \expandafter\XINT_gcd\expandafter{\romannumeral0\xintiabs {#1}}% }% -\def\XINT@gcd #1#2% +\def\XINT_gcd #1#2% {% - \expandafter\XINT@gcd@fork\romannumeral0\xintiabs {#2}\Z #1\Z + \expandafter\XINT_gcd_fork\romannumeral0\xintiabs {#2}\Z #1\Z }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% Ici #3#4=A, #1#2=B -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% Ici #3#4=A, #1#2=B| % \begin{macrocode} -\def\XINT@gcd@fork #1#2\Z #3#4\Z +\def\XINT_gcd_fork #1#2\Z #3#4\Z {% - \xint@UDzerofork - #1\dummy \XINT@gcd@BisZero - #3\dummy \XINT@gcd@AisZero - 0\dummy \XINT@gcd@loop - \xint@UDkrof + \xint_UDzerofork + #1\dummy \XINT_gcd_BisZero + #3\dummy \XINT_gcd_AisZero + 0\dummy \XINT_gcd_loop + \krof {#1#2}{#3#4}% }% -\def\XINT@gcd@AisZero #1#2{ #1}% -\def\XINT@gcd@BisZero #1#2{ #2}% -\def\XINT@gcd@CheckRem #1#2\Z +\def\XINT_gcd_AisZero #1#2{ #1}% +\def\XINT_gcd_BisZero #1#2{ #2}% +\def\XINT_gcd_CheckRem #1#2\Z {% - \xint@zero #1\xint@gcd@end0\XINT@gcd@loop {#1#2}% + \xint_gob_til_zero #1\xint_gcd_end0\XINT_gcd_loop {#1#2}% }% -\def\xint@gcd@end0\XINT@gcd@loop #1#2{ #2}% +\def\xint_gcd_end0\XINT_gcd_loop #1#2{ #2}% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% #1=B, #2=A -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|#1=B, #2=A| % \begin{macrocode} -\def\XINT@gcd@loop #1#2% +\def\XINT_gcd_loop #1#2% {% \expandafter\expandafter\expandafter - \XINT@gcd@CheckRem - \expandafter\xint@secondoftwo - \romannumeral0\XINT@div@prepare {#1}{#2}\Z + \XINT_gcd_CheckRem + \expandafter\xint_secondoftwo + \romannumeral0\XINT_div_prepare {#1}{#2}\Z {#1}% }% % \end{macrocode} @@ -8595,526 +8546,416 @@ first place. \def\xintBezout {\romannumeral0\xintbezout }% \def\xintbezout #1% {% - \expandafter\xint@bezout\expandafter {\romannumeral-`0#1}% + \expandafter\xint_bezout\expandafter {\romannumeral-`0#1}% }% -\def\xint@bezout #1#2% +\def\xint_bezout #1#2% {% - \expandafter\XINT@bezout@fork \romannumeral-`0#2\Z #1\Z + \expandafter\XINT_bezout_fork \romannumeral-`0#2\Z #1\Z }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% #3#4 = A, #1#2=B -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|#3#4 = A, #1#2=B| % \begin{macrocode} -\def\XINT@bezout@fork #1#2\Z #3#4\Z +\def\XINT_bezout_fork #1#2\Z #3#4\Z {% - \xint@UDzerosfork - #1#3\dummy \XINT@bezout@botharezero - #10\dummy \XINT@bezout@secondiszero - #30\dummy \XINT@bezout@firstiszero + \xint_UDzerosfork + #1#3\dummy \XINT_bezout_botharezero + #10\dummy \XINT_bezout_secondiszero + #30\dummy \XINT_bezout_firstiszero 00\dummy - {\xint@UDsignsfork - #1#3\dummy \XINT@bezout@minusminus % A < 0, B < 0 - #1-\dummy \XINT@bezout@minusplus % A > 0, B < 0 - #3-\dummy \XINT@bezout@plusminus % A < 0, B > 0 - --\dummy \XINT@bezout@plusplus % A > 0, B > 0 - \xint@UDkrof }% - \xint@UDkrof + {\xint_UDsignsfork + #1#3\dummy \XINT_bezout_minusminus % A < 0, B < 0 + #1-\dummy \XINT_bezout_minusplus % A > 0, B < 0 + #3-\dummy \XINT_bezout_plusminus % A < 0, B > 0 + --\dummy \XINT_bezout_plusplus % A > 0, B > 0 + \krof }% + \krof {#2}{#4}#1#3{#3#4}{#1#2}% #1#2=B, #3#4=A }% -\def\XINT@bezout@botharezero #1#2#3#4#5#6% +\def\XINT_bezout_botharezero #1#2#3#4#5#6% {% \xintError:NoBezoutForZeros \space {0}{0}{0}{0}{0}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% attention première entrée doit être ici (-1)^n donc 1 -% #4#2=0 = A, B = #3#1 -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% attention première entrée doit être ici (-1)^n donc 1$\ +% #4#2 = 0 = A, B = #3#1| % \begin{macrocode} -\def\XINT@bezout@firstiszero #1#2#3#4#5#6% +\def\XINT_bezout_firstiszero #1#2#3#4#5#6% {% - \xint@UDsignfork + \xint_UDsignfork #3\dummy { {0}{#3#1}{0}{1}{#1}}% -\dummy { {0}{#3#1}{0}{-1}{#1}}% - \xint@UDkrof + \krof }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% #4#2= A, B = #3#1 = 0 -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|#4#2 = A, B = #3#1 = 0| % \begin{macrocode} -\def\XINT@bezout@secondiszero #1#2#3#4#5#6% +\def\XINT_bezout_secondiszero #1#2#3#4#5#6% {% - \xint@UDsignfork + \xint_UDsignfork #4\dummy{ {#4#2}{0}{-1}{0}{#2}}% -\dummy{ {#4#2}{0}{1}{0}{#2}}% - \xint@UDkrof + \krof }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% #4#2= A < 0, #3#1 = B < 0 -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|#4#2= A < 0, #3#1 = B < 0| % \begin{macrocode} -\def\XINT@bezout@minusminus #1#2#3#4% +\def\XINT_bezout_minusminus #1#2#3#4% {% - \expandafter\XINT@bezout@mm@post - \romannumeral0\XINT@bezout@loop@a 1{#1}{#2}1001% + \expandafter\XINT_bezout_mm_post + \romannumeral0\XINT_bezout_loop_a 1{#1}{#2}1001% }% -\def\XINT@bezout@mm@post #1#2% +\def\XINT_bezout_mm_post #1#2% {% - \expandafter\XINT@bezout@mm@postb\expandafter + \expandafter\XINT_bezout_mm_postb\expandafter {\romannumeral0\xintiopp{#2}}{\romannumeral0\xintiopp{#1}}% }% -\def\XINT@bezout@mm@postb #1#2% +\def\XINT_bezout_mm_postb #1#2% {% - \expandafter\XINT@bezout@mm@postc\expandafter {#2}{#1}% + \expandafter\XINT_bezout_mm_postc\expandafter {#2}{#1}% }% -\def\XINT@bezout@mm@postc #1#2#3#4#5% +\def\XINT_bezout_mm_postc #1#2#3#4#5% {% \space {#4}{#5}{#1}{#2}{#3}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% minusplus #4#2= A > 0, B < 0 -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|minusplus #4#2= A > 0, B < 0| % \begin{macrocode} -\def\XINT@bezout@minusplus #1#2#3#4% +\def\XINT_bezout_minusplus #1#2#3#4% {% - \expandafter\XINT@bezout@mp@post - \romannumeral0\XINT@bezout@loop@a 1{#1}{#4#2}1001% + \expandafter\XINT_bezout_mp_post + \romannumeral0\XINT_bezout_loop_a 1{#1}{#4#2}1001% }% -\def\XINT@bezout@mp@post #1#2% +\def\XINT_bezout_mp_post #1#2% {% - \expandafter\XINT@bezout@mp@postb\expandafter + \expandafter\XINT_bezout_mp_postb\expandafter {\romannumeral0\xintiopp {#2}}{#1}% }% -\def\XINT@bezout@mp@postb #1#2#3#4#5% +\def\XINT_bezout_mp_postb #1#2#3#4#5% {% \space {#4}{#5}{#2}{#1}{#3}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% plusminus A < 0, B > 0 -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|plusminus A < 0, B > 0| % \begin{macrocode} -\def\XINT@bezout@plusminus #1#2#3#4% +\def\XINT_bezout_plusminus #1#2#3#4% {% - \expandafter\XINT@bezout@pm@post - \romannumeral0\XINT@bezout@loop@a 1{#3#1}{#2}1001% + \expandafter\XINT_bezout_pm_post + \romannumeral0\XINT_bezout_loop_a 1{#3#1}{#2}1001% }% -\def\XINT@bezout@pm@post #1% +\def\XINT_bezout_pm_post #1% {% - \expandafter \XINT@bezout@pm@postb \expandafter + \expandafter \XINT_bezout_pm_postb \expandafter {\romannumeral0\xintiopp{#1}}% }% -\def\XINT@bezout@pm@postb #1#2#3#4#5% +\def\XINT_bezout_pm_postb #1#2#3#4#5% {% \space {#4}{#5}{#1}{#2}{#3}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% plusplus -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|plusplus| % \begin{macrocode} -\def\XINT@bezout@plusplus #1#2#3#4% +\def\XINT_bezout_plusplus #1#2#3#4% {% - \expandafter\XINT@bezout@pp@post - \romannumeral0\XINT@bezout@loop@a 1{#3#1}{#4#2}1001% + \expandafter\XINT_bezout_pp_post + \romannumeral0\XINT_bezout_loop_a 1{#3#1}{#4#2}1001% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% la parité (-1)^N est en #1, et on la jette ici. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|la parité (-1)^N est en #1, et on la jette ici.| % \begin{macrocode} -\def\XINT@bezout@pp@post #1#2#3#4#5% +\def\XINT_bezout_pp_post #1#2#3#4#5% {% \space {#4}{#5}{#1}{#2}{#3}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% n = 0: 1BAalpha(0)beta(0)alpha(-1)beta(-1) +% \lverb|& +% n = 0: 1BAalpha(0)beta(0)alpha(-1)beta(-1)$\ % n général: -% {(-1)^n}{r(n-1)}{r(n-2)}{alpha(n-1)}{beta(n-1)}{alpha(n-2)}{beta(n-2)} -% #2 = B, #3 = A -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% {(-1)^n}{r(n-1)}{r(n-2)}{alpha(n-1)}{beta(n-1)}{alpha(n-2)}{beta(n-2)}$\ +% #2 = B, #3 = A| % \begin{macrocode} -\def\XINT@bezout@loop@a #1#2#3% +\def\XINT_bezout_loop_a #1#2#3% {% - \expandafter\XINT@bezout@loop@b + \expandafter\XINT_bezout_loop_b \expandafter{\the\numexpr -#1\expandafter }% - \romannumeral0\XINT@div@prepare {#2}{#3}{#2}% + \romannumeral0\XINT_div_prepare {#2}{#3}{#2}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} +% \lverb|& % Le q(n) a ici une existence éphémère, dans le version Bezout Algorithm % il faudra le conserver. On voudra à la fin -% {{q(n)}{r(n)}{alpha(n)}{beta(n)}} -% De plus ce n'est plus (-1)^n que l'on veut mais n. (ou dans un autre ordre) -% {-(-1)^n}{q(n)}{r(n)}{r(n-1)}{alpha(n-1)}{beta(n-1)}{alpha(n-2)}{beta(n-2)} -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% {{q(n)}{r(n)}{alpha(n)}{beta(n)}}. +% De plus ce n'est plus (-1)^n que l'on veut mais n. (ou dans un autre ordre)$\ +% {-(-1)^n}{q(n)}{r(n)}{r(n-1)}{alpha(n-1)}{beta(n-1)}{alpha(n-2)}{beta(n-2)}| % \begin{macrocode} -\def\XINT@bezout@loop@b #1#2#3#4#5#6#7#8% +\def\XINT_bezout_loop_b #1#2#3#4#5#6#7#8% {% - \expandafter \XINT@bezout@loop@c \expandafter - {\romannumeral0\xintiadd{\XINT@Mul{#5}{#2}}{#7}}% - {\romannumeral0\xintiadd{\XINT@Mul{#6}{#2}}{#8}}% + \expandafter \XINT_bezout_loop_c \expandafter + {\romannumeral0\xintiadd{\XINT_Mul{#5}{#2}}{#7}}% + {\romannumeral0\xintiadd{\XINT_Mul{#6}{#2}}{#8}}% {#1}{#3}{#4}{#5}{#6}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% {alpha(n)}{->beta(n)}{-(-1)^n}{r(n)}{r(n-1)}{alpha(n-1)}{beta(n-1)} -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|{alpha(n)}{->beta(n)}{-(-1)^n}{r(n)}{r(n-1)}{alpha(n-1)}{beta(n-1)}| % \begin{macrocode} -\def\XINT@bezout@loop@c #1#2% +\def\XINT_bezout_loop_c #1#2% {% - \expandafter \XINT@bezout@loop@d \expandafter + \expandafter \XINT_bezout_loop_d \expandafter {#2}{#1}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% {beta(n)}{alpha(n)}{(-1)^(n+1)}{r(n)}{r(n-1)}{alpha(n-1)}{beta(n-1)} -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|{beta(n)}{alpha(n)}{(-1)^(n+1)}{r(n)}{r(n-1)}{alpha(n-1)}{beta(n-1)}| % \begin{macrocode} -\def\XINT@bezout@loop@d #1#2#3#4#5% +\def\XINT_bezout_loop_d #1#2#3#4#5% {% - \XINT@bezout@loop@e #4\Z {#3}{#5}{#2}{#1}% + \XINT_bezout_loop_e #4\Z {#3}{#5}{#2}{#1}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% r(n)\Z {(-1)^(n+1)}{r(n-1)}{alpha(n)}{beta(n)}{alpha(n-1)}{beta(n-1)} -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|r(n)\Z {(-1)^(n+1)}{r(n-1)}{alpha(n)}{beta(n)}{alpha(n-1)}{beta(n-1)}| % \begin{macrocode} -\def\XINT@bezout@loop@e #1#2\Z +\def\XINT_bezout_loop_e #1#2\Z {% - \xint@zero #1\xint@bezout@loop@exit0\XINT@bezout@loop@f + \xint_gob_til_zero #1\xint_bezout_loop_exit0\XINT_bezout_loop_f {#1#2}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% {r(n)}{(-1)^(n+1)}{r(n-1)}{alpha(n)}{beta(n)}{alpha(n-1)}{beta(n-1)} -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|{r(n)}{(-1)^(n+1)}{r(n-1)}{alpha(n)}{beta(n)}{alpha(n-1)}{beta(n-1)}| % \begin{macrocode} -\def\XINT@bezout@loop@f #1#2% +\def\XINT_bezout_loop_f #1#2% {% - \XINT@bezout@loop@a {#2}{#1}% + \XINT_bezout_loop_a {#2}{#1}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% {(-1)^(n+1)}{r(n)}{r(n-1)}{alpha(n)}{beta(n)}{alpha(n-1)}{beta(n-1)} -% et itération -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|{(-1)^(n+1)}{r(n)}{r(n-1)}{alpha(n)}{beta(n)}{alpha(n-1)}{beta(n-1)} +% et itération| % \begin{macrocode} -\def\xint@bezout@loop@exit0\XINT@bezout@loop@f #1#2% +\def\xint_bezout_loop_exit0\XINT_bezout_loop_f #1#2% {% \ifcase #2 - \or \expandafter\XINT@bezout@exiteven - \else\expandafter\XINT@bezout@exitodd + \or \expandafter\XINT_bezout_exiteven + \else\expandafter\XINT_bezout_exitodd \fi }% -\def\XINT@bezout@exiteven #1#2#3#4#5% +\def\XINT_bezout_exiteven #1#2#3#4#5% {% \space {#5}{#4}{#1}% }% -\def\XINT@bezout@exitodd #1#2#3#4#5% +\def\XINT_bezout_exitodd #1#2#3#4#5% {% \space {-#5}{-#4}{#1}% }% % \end{macrocode} % \subsection{\csh{xintEuclideAlgorithm}} -% \begin{verbatim} +% \lverb|& % Pour Euclide: -% {N}{A}{D=r(n)}{B}{q1}{r1}{q2}{r2}{q3}{r3}....{qN}{rN=0} -% u<2n> = u<2n+3>u<2n+2> + u<2n+4> à la n ième étape -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% {N}{A}{D=r(n)}{B}{q1}{r1}{q2}{r2}{q3}{r3}....{qN}{rN=0}$\ +% u<2n> = u<2n+3>u<2n+2> + u<2n+4> à la n ième étape| % \begin{macrocode} \def\xintEuclideAlgorithm {\romannumeral0\xinteuclidealgorithm }% \def\xinteuclidealgorithm #1% {% - \expandafter \XINT@euc \expandafter{\romannumeral0\xintiabs {#1}}% + \expandafter \XINT_euc \expandafter{\romannumeral0\xintiabs {#1}}% }% -\def\XINT@euc #1#2% +\def\XINT_euc #1#2% {% - \expandafter\XINT@euc@fork \romannumeral0\xintiabs {#2}\Z #1\Z + \expandafter\XINT_euc_fork \romannumeral0\xintiabs {#2}\Z #1\Z }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% Ici #3#4=A, #1#2=B -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|Ici #3#4=A, #1#2=B| % \begin{macrocode} -\def\XINT@euc@fork #1#2\Z #3#4\Z +\def\XINT_euc_fork #1#2\Z #3#4\Z {% - \xint@UDzerofork - #1\dummy \XINT@euc@BisZero - #3\dummy \XINT@euc@AisZero - 0\dummy \XINT@euc@a - \xint@UDkrof + \xint_UDzerofork + #1\dummy \XINT_euc_BisZero + #3\dummy \XINT_euc_AisZero + 0\dummy \XINT_euc_a + \krof {0}{#1#2}{#3#4}{{#3#4}{#1#2}}{}\Z }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% Le {} pour protéger {{A}{B}} si on s'arrête après une étape (B divise A) -% On va renvoyer: -% {N}{A}{D=r(n)}{B}{q1}{r1}{q2}{r2}{q3}{r3}....{qN}{rN=0} -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% Le {} pour protéger {{A}{B}} si on s'arrête après une étape (B divise +% A). +% On va renvoyer:$\ +% {N}{A}{D=r(n)}{B}{q1}{r1}{q2}{r2}{q3}{r3}....{qN}{rN=0}| % \begin{macrocode} -\def\XINT@euc@AisZero #1#2#3#4#5#6{ {1}{0}{#2}{#2}{0}{0}}% -\def\XINT@euc@BisZero #1#2#3#4#5#6{ {1}{0}{#3}{#3}{0}{0}}% +\def\XINT_euc_AisZero #1#2#3#4#5#6{ {1}{0}{#2}{#2}{0}{0}}% +\def\XINT_euc_BisZero #1#2#3#4#5#6{ {1}{0}{#3}{#3}{0}{0}}% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% {n}{rn}{an}{{qn}{rn}}...{{A}{B}}{}\Z -% an = r(n-1) -% Pour n=0 on a juste {0}{B}{A}{{A}{B}}{}\Z -% \XINT@div@prepare {u}{v} divise v par u -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% {n}{rn}{an}{{qn}{rn}}...{{A}{B}}{}\Z$\ +% a(n) = r(n-1). Pour n=0 on a juste {0}{B}{A}{{A}{B}}{}\Z$\ +% \XINT_div_prepare {u}{v} divise v par u| % \begin{macrocode} -\def\XINT@euc@a #1#2#3% +\def\XINT_euc_a #1#2#3% {% - \expandafter\XINT@euc@b + \expandafter\XINT_euc_b \expandafter {\the\numexpr #1+1\expandafter }% - \romannumeral0\XINT@div@prepare {#2}{#3}{#2}% + \romannumeral0\XINT_div_prepare {#2}{#3}{#2}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% {n+1}{q(n+1)}{r(n+1)}{rn}{{qn}{rn}}... -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|{n+1}{q(n+1)}{r(n+1)}{rn}{{qn}{rn}}...| % \begin{macrocode} -\def\XINT@euc@b #1#2#3#4% +\def\XINT_euc_b #1#2#3#4% {% - \XINT@euc@c #3\Z {#1}{#3}{#4}{{#2}{#3}}% + \XINT_euc_c #3\Z {#1}{#3}{#4}{{#2}{#3}}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% r(n+1)\Z {n+1}{r(n+1)}{r(n)}{{q(n+1)}{r(n+1)}}{{qn}{rn}}... -% Test si r(n+1) est nul. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|r(n+1)\Z {n+1}{r(n+1)}{r(n)}{{q(n+1)}{r(n+1)}}{{qn}{rn}}...$\ +% Test si r(n+1) est nul.| % \begin{macrocode} -\def\XINT@euc@c #1#2\Z +\def\XINT_euc_c #1#2\Z {% - \xint@zero #1\xint@euc@end0\XINT@euc@a + \xint_gob_til_zero #1\xint_euc_end0\XINT_euc_a }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} +% \lverb|& % {n+1}{r(n+1)}{r(n)}{{q(n+1)}{r(n+1)}}...{}\Z -% Ici r(n+1) = 0. On arrête on se prépare à inverser. -% {n+1}{0}{r(n)}{{q(n+1)}{r(n+1)}}.....{{q1}{r1}}{{A}{B}}{}\Z -% On veut renvoyer: -% {N=n+1}{A}{D=r(n)}{B}{q1}{r1}{q2}{r2}{q3}{r3}....{qN}{rN=0} -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% Ici r(n+1) = 0. On arrête on se prépare à inverser +% {n+1}{0}{r(n)}{{q(n+1)}{r(n+1)}}.....{{q1}{r1}}{{A}{B}}{}\Z$\ +% On veut renvoyer: {N=n+1}{A}{D=r(n)}{B}{q1}{r1}{q2}{r2}{q3}{r3}....{qN}{rN=0}| % \begin{macrocode} -\def\xint@euc@end0\XINT@euc@a #1#2#3#4\Z% +\def\xint_euc_end0\XINT_euc_a #1#2#3#4\Z% {% - \expandafter\xint@euc@end@ + \expandafter\xint_euc_end_ \romannumeral0% - \XINT@rord@main {}#4{{#1}{#3}}% - \xint@UNDEF - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@UNDEF + \XINT_rord_main {}#4{{#1}{#3}}% + \xint_relax + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_relax }% -\def\xint@euc@end@ #1#2#3% +\def\xint_euc_end_ #1#2#3% {% \space {#1}{#3}{#2}% }% % \end{macrocode} % \subsection{\csh{xintBezoutAlgorithm}} -% \begin{verbatim} -% Pour Bezout: objectif, renvoyer -% alpha0=1, beta0=0 -% alpha(-1)=0, beta(-1)=1 -% {N}{A}{0}{1}{D=r(n)}{B}{1}{0}{q1}{r1}{alpha1=q1}{beta1=1} -% {q2}{r2}{alpha2}{beta2}....{qN}{rN=0}{alphaN=A/D}{betaN=B/D} -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% Pour Bezout: objectif, renvoyer$\ +% {N}{A}{0}{1}{D=r(n)}{B}{1}{0}{q1}{r1}{alpha1=q1}{beta1=1}$\ +% {q2}{r2}{alpha2}{beta2}....{qN}{rN=0}{alphaN=A/D}{betaN=B/D}$\ +% alpha0=1, beta0=0, alpha(-1)=0, beta(-1)=1| % \begin{macrocode} \def\xintBezoutAlgorithm {\romannumeral0\xintbezoutalgorithm }% \def\xintbezoutalgorithm #1% {% - \expandafter \XINT@bezalg \expandafter{\romannumeral0\xintiabs {#1}}% + \expandafter \XINT_bezalg \expandafter{\romannumeral0\xintiabs {#1}}% }% -\def\XINT@bezalg #1#2% +\def\XINT_bezalg #1#2% {% - \expandafter\XINT@bezalg@fork \romannumeral0\xintiabs {#2}\Z #1\Z + \expandafter\XINT_bezalg_fork \romannumeral0\xintiabs {#2}\Z #1\Z }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% Ici #3#4=A, #1#2=B -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|Ici #3#4=A, #1#2=B| % \begin{macrocode} -\def\XINT@bezalg@fork #1#2\Z #3#4\Z +\def\XINT_bezalg_fork #1#2\Z #3#4\Z {% - \xint@UDzerofork - #1\dummy \XINT@bezalg@BisZero - #3\dummy \XINT@bezalg@AisZero - 0\dummy \XINT@bezalg@a - \xint@UDkrof + \xint_UDzerofork + #1\dummy \XINT_bezalg_BisZero + #3\dummy \XINT_bezalg_AisZero + 0\dummy \XINT_bezalg_a + \krof 0{#1#2}{#3#4}1001{{#3#4}{#1#2}}{}\Z }% -\def\XINT@bezalg@AisZero #1#2#3\Z{ {1}{0}{0}{1}{#2}{#2}{1}{0}{0}{0}{0}{1}}% -\def\XINT@bezalg@BisZero #1#2#3#4\Z{ {1}{0}{0}{1}{#3}{#3}{1}{0}{0}{0}{0}{1}}% +\def\XINT_bezalg_AisZero #1#2#3\Z{ {1}{0}{0}{1}{#2}{#2}{1}{0}{0}{0}{0}{1}}% +\def\XINT_bezalg_BisZero #1#2#3#4\Z{ {1}{0}{0}{1}{#3}{#3}{1}{0}{0}{0}{0}{1}}% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} +% \lverb|& % pour préparer l'étape n+1 il faut -% {n}{r(n)}{r(n-1)}{alpha(n)}{beta(n)}{alpha(n-1)}{beta(n-1)} +% {n}{r(n)}{r(n-1)}{alpha(n)}{beta(n)}{alpha(n-1)}{beta(n-1)}& % {{q(n)}{r(n)}{alpha(n)}{beta(n)}}... -% division de #3 par #2 -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% division de #3 par #2| % \begin{macrocode} -\def\XINT@bezalg@a #1#2#3% +\def\XINT_bezalg_a #1#2#3% {% - \expandafter\XINT@bezalg@b + \expandafter\XINT_bezalg_b \expandafter {\the\numexpr #1+1\expandafter }% - \romannumeral0\XINT@div@prepare {#2}{#3}{#2}% + \romannumeral0\XINT_div_prepare {#2}{#3}{#2}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% {n+1}{q(n+1)}{r(n+1)}{r(n)}{alpha(n)}{beta(n)}{alpha(n-1)}{beta(n-1)}... -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% {n+1}{q(n+1)}{r(n+1)}{r(n)}{alpha(n)}{beta(n)}{alpha(n-1)}{beta(n-1)}...| % \begin{macrocode} -\def\XINT@bezalg@b #1#2#3#4#5#6#7#8% +\def\XINT_bezalg_b #1#2#3#4#5#6#7#8% {% - \expandafter\XINT@bezalg@c\expandafter + \expandafter\XINT_bezalg_c\expandafter {\romannumeral0\xintiadd {\xintiMul {#6}{#2}}{#8}}% {\romannumeral0\xintiadd {\xintiMul {#5}{#2}}{#7}}% {#1}{#2}{#3}{#4}{#5}{#6}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% {beta(n+1)}{alpha(n+1)}{n+1}{q(n+1)}{r(n+1)}{r(n)}{alpha(n)}{beta(n}}% -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% {beta(n+1)}{alpha(n+1)}{n+1}{q(n+1)}{r(n+1)}{r(n)}{alpha(n)}{beta(n}}| % \begin{macrocode} -\def\XINT@bezalg@c #1#2#3#4#5#6% +\def\XINT_bezalg_c #1#2#3#4#5#6% {% - \expandafter\XINT@bezalg@d\expandafter {#2}{#3}{#4}{#5}{#6}{#1}% + \expandafter\XINT_bezalg_d\expandafter {#2}{#3}{#4}{#5}{#6}{#1}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% {alpha(n+1)}{n+1}{q(n+1)}{r(n+1)}{r(n)}{beta(n+1)} -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|{alpha(n+1)}{n+1}{q(n+1)}{r(n+1)}{r(n)}{beta(n+1)}| % \begin{macrocode} -\def\XINT@bezalg@d #1#2#3#4#5#6#7#8% +\def\XINT_bezalg_d #1#2#3#4#5#6#7#8% {% - \XINT@bezalg@e #4\Z {#2}{#4}{#5}{#1}{#6}{#7}{#8}{{#3}{#4}{#1}{#6}}% + \XINT_bezalg_e #4\Z {#2}{#4}{#5}{#1}{#6}{#7}{#8}{{#3}{#4}{#1}{#6}}% }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% r(n+1)\Z {n+1}{r(n+1)}{r(n)}{alpha(n+1)}{beta(n+1)} -% {alpha(n)}{beta(n)}{q,r,alpha,beta(n+1)} -% Test si r(n+1) est nul. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|r(n+1)\Z {n+1}{r(n+1)}{r(n)}{alpha(n+1)}{beta(n+1)}$\ +% {alpha(n)}{beta(n)}{q,r,alpha,beta(n+1)}$\ +% Test si r(n+1) est nul.| % \begin{macrocode} -\def\XINT@bezalg@e #1#2\Z +\def\XINT_bezalg_e #1#2\Z {% - \xint@zero #1\xint@bezalg@end0\XINT@bezalg@a + \xint_gob_til_zero #1\xint_bezalg_end0\XINT_bezalg_a }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% Ici r(n+1) = 0. On arrête on se prépare à inverser. -% {n+1}{r(n+1)}{r(n)}{alpha(n+1)}{beta(n+1)}% -% {alpha(n)}{beta(n)}% -% {q,r,alpha,beta(n+1)}...{{A}{B}}{}\Z -% On veut renvoyer -% {N}{A}{0}{1}{D=r(n)}{B}{1}{0}{q1}{r1}{alpha1=q1}{beta1=1} -% {q2}{r2}{alpha2}{beta2}....{qN}{rN=0}{alphaN=A/D}{betaN=B/D} -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% Ici r(n+1) = 0. On arrête on se prépare à inverser.$\ +% {n+1}{r(n+1)}{r(n)}{alpha(n+1)}{beta(n+1)}{alpha(n)}{beta(n)}$\ +% {q,r,alpha,beta(n+1)}...{{A}{B}}{}\Z$\ +% On veut renvoyer$\ +% {N}{A}{0}{1}{D=r(n)}{B}{1}{0}{q1}{r1}{alpha1=q1}{beta1=1}$\ +% {q2}{r2}{alpha2}{beta2}....{qN}{rN=0}{alphaN=A/D}{betaN=B/D}| % \begin{macrocode} -\def\xint@bezalg@end0\XINT@bezalg@a #1#2#3#4#5#6#7#8\Z +\def\xint_bezalg_end0\XINT_bezalg_a #1#2#3#4#5#6#7#8\Z {% - \expandafter\xint@bezalg@end@ + \expandafter\xint_bezalg_end_ \romannumeral0% - \XINT@rord@main {}#8{{#1}{#3}}% - \xint@UNDEF - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@UNDEF + \XINT_rord_main {}#8{{#1}{#3}}% + \xint_relax + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_relax }% % \end{macrocode} -% \vspace*{-.5\baselineskip} -% \begin{verbatim} -% {N}{D}{A}{B}{q1}{r1}{alpha1=q1}{beta1=1}{q2}{r2}{alpha2}{beta2} -% ....{qN}{rN=0}{alphaN=A/D}{betaN=B/D} -% On veut renvoyer -% {N}{A}{0}{1}{D=r(n)}{B}{1}{0}{q1}{r1}{alpha1=q1}{beta1=1} -% {q2}{r2}{alpha2}{beta2}....{qN}{rN=0}{alphaN=A/D}{betaN=B/D} -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% {N}{D}{A}{B}{q1}{r1}{alpha1=q1}{beta1=1}{q2}{r2}{alpha2}{beta2}$\ +% ....{qN}{rN=0}{alphaN=A/D}{betaN=B/D}$\ +% On veut renvoyer$\ +% {N}{A}{0}{1}{D=r(n)}{B}{1}{0}{q1}{r1}{alpha1=q1}{beta1=1}$\ +% {q2}{r2}{alpha2}{beta2}....{qN}{rN=0}{alphaN=A/D}{betaN=B/D}| % \begin{macrocode} -\def\xint@bezalg@end@ #1#2#3#4% +\def\xint_bezalg_end_ #1#2#3#4% {% \space {#1}{#3}{0}{1}{#2}{#4}{1}{0}% }% % \end{macrocode} % \subsection{\csh{xintTypesetEuclideAlgorithm}} -% \begin{verbatim} +% \lverb|& % TYPESETTING +% % Organisation: -% {N}{A}{D}{B}{q1}{r1}{q2}{r2}{q3}{r3}....{qN}{rN=0} +% +% {N}{A}{D}{B}{q1}{r1}{q2}{r2}{q3}{r3}....{qN}{rN=0}$\ % \U1 = N = nombre d'étapes, \U3 = PGCD, \U2 = A, \U4=B % q1 = \U5, q2 = \U7 --> qn = \U<2n+3>, rn = \U<2n+4> % bn = rn. B = r0. A=r(-1) -% r(n-2) = q(n)r(n-1)+r(n) (n e étape) (n au moins 1) +% +% r(n-2) = q(n)r(n-1)+r(n) (n e étape) +% % \U{2n} = \U{2n+3} \times \U{2n+2} + \U{2n+4}, n e étape. -% avec n entre 1 et N. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% (avec n entre 1 et N)| % \begin{macrocode} \def\xintTypesetEuclideAlgorithm #1#2% {% l'algo remplace #1 et #2 par |#1| et |#2| @@ -9139,18 +8980,15 @@ first place. }% % \end{macrocode} % \subsection{\csh{xintTypesetBezoutAlgorithm}} -% \begin{verbatim} +% \lverb|& % Pour Bezout on a: -% {N}{A}{0}{1}{D=r(n)}{B}{1}{0}{q1}{r1}{alpha1=q1}{beta1=1} +% {N}{A}{0}{1}{D=r(n)}{B}{1}{0}{q1}{r1}{alpha1=q1}{beta1=1}$\ % {q2}{r2}{alpha2}{beta2}....{qN}{rN=0}{alphaN=A/D}{betaN=B/D}% -% Donc 4N+8 termes -% U1 = N, U2= A, U5=D, U6=B, -% q1 = U9, qn = U{4n+5}, n au moins 1 -% rn = U{4n+6} , n au moins -1 -% alpha(n) = U{4n+7}, n au moins -1 -% beta(n) = U{4n+8}, n au moins -1 -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% Donc 4N+8 termes: +% U1 = N, U2= A, U5=D, U6=B, q1 = U9, qn = U{4n+5}, n au moins 1$\ +% rn = U{4n+6}, n au moins -1$\ +% alpha(n) = U{4n+7}, n au moins -1$\ +% beta(n) = U{4n+8}, n au moins -1| % \begin{macrocode} \def\xintTypesetBezoutAlgorithm #1#2% {% @@ -9191,7 +9029,7 @@ first place. \par \endgroup }% -\XINT@gcd@restorecatcodes@endinput% +\XINT_gcd_restorecatcodes_endinput% % \end{macrocode} %\catcode`\<=0 \catcode`\>=11 \catcode`\*=11 \catcode`\/=11 %\let\relax @@ -9297,8 +9135,8 @@ first place. % % Perhaps catcodes have changed after the loading of \xintname % and prior to the current loading of \xintfracname, so we can not employ -% the |\XINT@restorecatcodes@endinput| in this style file. But -% there is no problem using |\XINT@setcatcodes|. +% the |\XINT_restorecatcodes_endinput| in this style file. But +% there is no problem using |\XINT_setcatcodes|. % % \begin{macrocode} \begingroup\catcode61\catcode48\catcode32=10\relax% @@ -9306,11 +9144,11 @@ first place. \endlinechar=13 % \catcode123=1 % { \catcode125=2 % } - \catcode64=11 % @ + \catcode95=11 % _ \def\x {% \endgroup - \edef\XINT@frac@restorecatcodes@endinput + \edef\XINT_frac_restorecatcodes_endinput {% \catcode94=\the\catcode94 % ^ \catcode93=\the\catcode93 % ] @@ -9328,7 +9166,7 @@ first place. \catcode45=\the\catcode45 % - \catcode44=\the\catcode44 % , \catcode35=\the\catcode35 % # - \catcode64=\the\catcode64 % @ + \catcode95=\the\catcode95 % _ \catcode125=\the\catcode125 % } \catcode123=\the\catcode123 % { \endlinechar=\the\endlinechar @@ -9337,7 +9175,7 @@ first place. \catcode61=\the\catcode61\relax % = \noexpand\endinput }% - \XINT@setcatcodes + \XINT_setcatcodes \catcode91=12 % [ \catcode93=12 % ] \catcode94=7 % ^ @@ -9347,6 +9185,7 @@ first place. % \subsection{Package identification} % \begin{macrocode} \begingroup + \catcode64=11 % @ \catcode58=12 % : \expandafter\ifx\csname ProvidesPackage\endcsname\relax \def\x#1#2#3[#4]{\endgroup @@ -9366,259 +9205,261 @@ first place. \fi \expandafter\x\csname ver@xintfrac.sty\endcsname \ProvidesPackage{xintfrac}% - [2013/05/09 v1.06a Expandable operations on fractions (jfB)]% + [2013/05/14 v1.06b Expandable operations on fractions (jfB)]% % \end{macrocode} % \subsection{\csh{xintLen}} % \begin{macrocode} \def\xintLen {\romannumeral0\xintlen }% \def\xintlen #1% {% - \expandafter\XINT@flen\romannumeral0\XINT@infrac {#1}% + \expandafter\XINT_flen\romannumeral0\XINT_infrac {#1}% }% -\def\XINT@flen #1#2#3% +\def\XINT_flen #1#2#3% {% \expandafter\space - \the\numexpr -1+\XINT@Abs {#1}+\XINT@Len {#2}+\XINT@Len {#3}\relax + \the\numexpr -1+\XINT_Abs {#1}+\XINT_Len {#2}+\XINT_Len {#3}\relax }% % \end{macrocode} -% \subsection{\csh{XINT@outfrac}} -% \begin{verbatim} +% \subsection{\csh{XINT\_outfrac}} +% \lverb|& % 1.06a version now outputs 0/1[0] and not 0[0] in case of zero. More generally % all macros have been checked in xintfrac, xintseries, xintcfrac, to make sure % the output format for fractions was always a/b[n]. (except of course \xintIrr, -% \xintJrr, \xintRaw) -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \xintJrr, \xintRaw)| % \begin{macrocode} -\def\XINT@outfrac #1#2#3% +\def\XINT_outfrac #1#2#3% {% - \ifcase\XINT@Sgn{#3} - \expandafter \XINT@outfrac@divisionbyzero + \ifcase\XINT_Sgn{#3} + \expandafter \XINT_outfrac_divisionbyzero \or - \expandafter \XINT@outfrac@P + \expandafter \XINT_outfrac_P \else - \expandafter \XINT@outfrac@N + \expandafter \XINT_outfrac_N \fi {#2}{#3}[#1]% }% -\def\XINT@outfrac@divisionbyzero #1#2{\xintError:DivisionByZero\space #1/0}% -\def\XINT@outfrac@P #1#2% +\def\XINT_outfrac_divisionbyzero #1#2{\xintError:DivisionByZero\space #1/0}% +\def\XINT_outfrac_P #1#2% {% - \ifcase\XINT@Sgn{#1} - \expandafter\XINT@outfrac@Zero + \ifcase\XINT_Sgn{#1} + \expandafter\XINT_outfrac_Zero \fi \space #1/#2% }% -\def\XINT@outfrac@Zero #1[#2]{ 0/1[0]}% -\def\XINT@outfrac@N #1#2% +\def\XINT_outfrac_Zero #1[#2]{ 0/1[0]}% +\def\XINT_outfrac_N #1#2% {% - \expandafter\XINT@outfrac@N@a\expandafter - {\romannumeral0\XINT@opp #2}{\romannumeral0\XINT@opp #1}% + \expandafter\XINT_outfrac_N_a\expandafter + {\romannumeral0\XINT_opp #2}{\romannumeral0\XINT_opp #1}% }% -\def\XINT@outfrac@N@a #1#2% +\def\XINT_outfrac_N_a #1#2% {% - \expandafter\XINT@outfrac@P\expandafter {#2}{#1}% + \expandafter\XINT_outfrac_P\expandafter {#2}{#1}% }% % \end{macrocode} -% \subsection{\csh{XINT@inFrac}} +% \subsection{\csh{XINT\_inFrac}} % \begin{macrocode} -\def\XINT@inFrac {\romannumeral0\XINT@infrac }% -\def\XINT@infrac #1% +\def\XINT_inFrac {\romannumeral0\XINT_infrac }% +\def\XINT_infrac #1% {% - \expandafter\XINT@infrac@ \romannumeral-`0#1[\W]\Z\T + \expandafter\XINT_infrac_ \romannumeral-`0#1[\W]\Z\T }% -\def\XINT@infrac@ #1[#2#3]#4\Z +\def\XINT_infrac_ #1[#2#3]#4\Z {% - \xint@UDwfork - #2\dummy \XINT@infrac@A - \W\dummy \XINT@infrac@B - \xint@UDkrof + \xint_UDwfork + #2\dummy \XINT_infrac_A + \W\dummy \XINT_infrac_B + \krof #1[#2#3]#4% }% -\def\XINT@infrac@A #1[\W]\T +\def\XINT_infrac_A #1[\W]\T {% - \XINT@frac #1/\W\Z + \XINT_frac #1/\W\Z }% -\def\XINT@infrac@B #1% +\def\XINT_infrac_B #1% {% - \xint@zero #1\XINT@infrac@Zero0\XINT@infrac@BB #1% + \xint_gob_til_zero #1\XINT_infrac_Zero0\XINT_infrac_BB #1% }% -\def\XINT@infrac@BB #1[\W]\T {\XINT@infrac@BC #1/\W\Z }% -\def\XINT@infrac@BC #1/#2#3\Z +\def\XINT_infrac_BB #1[\W]\T {\XINT_infrac_BC #1/\W\Z }% +\def\XINT_infrac_BC #1/#2#3\Z {% - \xint@UDwfork - #2\dummy \XINT@infrac@BCa - \W\dummy {\expandafter\XINT@infrac@BCb \romannumeral-`0#2}% - \xint@UDkrof + \xint_UDwfork + #2\dummy \XINT_infrac_BCa + \W\dummy {\expandafter\XINT_infrac_BCb \romannumeral-`0#2}% + \krof #3\Z #1\Z }% -\def\XINT@infrac@BCa \Z #1[#2]#3\Z { {#2}{#1}{1}}% -\def\XINT@infrac@BCb #1[#2]/\W\Z #3\Z { {#2}{#3}{#1}}% -\def\XINT@infrac@Zero #1\T { {0}{0}{1}}% +\def\XINT_infrac_BCa \Z #1[#2]#3\Z { {#2}{#1}{1}}% +\def\XINT_infrac_BCb #1[#2]/\W\Z #3\Z { {#2}{#3}{#1}}% +\def\XINT_infrac_Zero #1\T { {0}{0}{1}}% % \end{macrocode} -% \subsection{\csh{XINT@frac}} +% \subsection{\csh{XINT\_frac}} % \begin{macrocode} -\def\XINT@frac #1/#2#3\Z +\def\XINT_frac #1/#2#3\Z {% - \xint@UDwfork - #2\dummy \XINT@frac@A - \W\dummy {\expandafter\XINT@frac@B \romannumeral-`0#2}% - \xint@UDkrof + \xint_UDwfork + #2\dummy \XINT_frac_A + \W\dummy {\expandafter\XINT_frac_B \romannumeral-`0#2}% + \krof #3.\W\Z #1.\W\Z }% -\def\XINT@frac@B #1.#2#3\Z +\def\XINT_frac_B #1.#2#3\Z {% - \xint@UDwfork - #2\dummy \XINT@frac@Ba - \W\dummy {\XINT@frac@Bb #2}% - \xint@UDkrof + \xint_UDwfork + #2\dummy \XINT_frac_Ba + \W\dummy {\XINT_frac_Bb #2}% + \krof #3\Z #1\Z }% -\def\XINT@frac@Bb #1/\W.\W\Z #2\Z +\def\XINT_frac_Bb #1/\W.\W\Z #2\Z {% - \expandafter \XINT@frac@C \expandafter - {\romannumeral0\XINT@length {#1}}{#2#1}% + \expandafter \XINT_frac_C \expandafter + {\romannumeral0\XINT_length {#1}}{#2#1}% }% -\def\XINT@frac@Ba \Z #1/\W\Z {\XINT@frac@C {0}{#1}}% -\def\XINT@frac@A .\W\Z {\XINT@frac@C {0}{1}}% -\def\XINT@frac@C #1#2#3.#4#5\Z +\def\XINT_frac_Ba \Z #1/\W\Z {\XINT_frac_C {0}{#1}}% +\def\XINT_frac_A .\W\Z {\XINT_frac_C {0}{1}}% +\def\XINT_frac_C #1#2#3.#4#5\Z {% - \xint@UDwfork - #4\dummy \XINT@frac@Ca - \W\dummy {\XINT@frac@Cb #4}% - \xint@UDkrof + \xint_UDwfork + #4\dummy \XINT_frac_Ca + \W\dummy {\XINT_frac_Cb #4}% + \krof #5\Z #3\Z {#1}{#2}% }% -\def\XINT@frac@Ca \Z #1\Z {\XINT@frac@D {0}{#1}}% -\def\XINT@frac@Cb #1.\W\Z #2\Z +\def\XINT_frac_Ca \Z #1\Z {\XINT_frac_D {0}{#1}}% +\def\XINT_frac_Cb #1.\W\Z #2\Z {% - \expandafter\XINT@frac@D\expandafter - {\romannumeral0\XINT@length {#1}}{#2#1}% + \expandafter\XINT_frac_D\expandafter + {\romannumeral0\XINT_length {#1}}{#2#1}% }% -\def\XINT@frac@D #1#2#3#4% +\def\XINT_frac_D #1#2#3#4% {% - \expandafter \XINT@frac@E \expandafter + \expandafter \XINT_frac_E \expandafter {\the\numexpr -#1+#3\expandafter}\expandafter - {\romannumeral0\XINT@num@loop #2\R\R\R\R\R\R\R\R\Z }% - {\romannumeral0\XINT@num@loop #4\R\R\R\R\R\R\R\R\Z }% + {\romannumeral0\XINT_num_loop #2% + \xint_relax\xint_relax\xint_relax\xint_relax + \xint_relax\xint_relax\xint_relax\xint_relax\Z }% + {\romannumeral0\XINT_num_loop #4% + \xint_relax\xint_relax\xint_relax\xint_relax + \xint_relax\xint_relax\xint_relax\xint_relax\Z }% }% -\def\XINT@frac@E #1#2#3% +\def\XINT_frac_E #1#2#3% {% - \expandafter \XINT@frac@F #3\Z {#2}{#1}% + \expandafter \XINT_frac_F #3\Z {#2}{#1}% }% -\def\XINT@frac@F #1% +\def\XINT_frac_F #1% {% - \xint@UDzerominusfork - #1-\dummy \XINT@frac@Gdivisionbyzero - 0#1\dummy \XINT@frac@Gneg - 0-\dummy {\XINT@frac@Gpos #1}% - \xint@UDkrof + \xint_UDzerominusfork + #1-\dummy \XINT_frac_Gdivisionbyzero + 0#1\dummy \XINT_frac_Gneg + 0-\dummy {\XINT_frac_Gpos #1}% + \krof }% -\def\XINT@frac@Gdivisionbyzero #1\Z #2#3% +\def\XINT_frac_Gdivisionbyzero #1\Z #2#3% {% \xintError:DivisionByZero\space {0}{#2}{0}% }% -\def\XINT@frac@Gneg #1\Z #2#3% +\def\XINT_frac_Gneg #1\Z #2#3% {% - \expandafter\XINT@frac@H \expandafter{\romannumeral0\XINT@opp #2}{#3}{#1}% + \expandafter\XINT_frac_H \expandafter{\romannumeral0\XINT_opp #2}{#3}{#1}% }% -\def\XINT@frac@H #1#2{ {#2}{#1}}% -\def\XINT@frac@Gpos #1\Z #2#3{ {#3}{#2}{#1}}% +\def\XINT_frac_H #1#2{ {#2}{#1}}% +\def\XINT_frac_Gpos #1\Z #2#3{ {#3}{#2}{#1}}% % \end{macrocode} -% \subsection{\csh{XINT@factortens},~\csh{XINT@cuz@cnt}} +% \subsection{\csh{XINT\_factortens},~\csh{XINT\_cuz\_cnt}} % \begin{macrocode} -\def\XINT@factortens #1% +\def\XINT_factortens #1% {% - \expandafter\XINT@cuz@cnt@loop\expandafter - {\expandafter}\romannumeral0\XINT@rord@main {}#1% - \xint@UNDEF - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@UNDEF + \expandafter\XINT_cuz_cnt_loop\expandafter + {\expandafter}\romannumeral0\XINT_rord_main {}#1% + \xint_relax + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_relax \R\R\R\R\R\R\R\R\Z }% -\def\XINT@cuz@cnt #1% +\def\XINT_cuz_cnt #1% {% - \XINT@cuz@cnt@loop {}#1\R\R\R\R\R\R\R\R\Z + \XINT_cuz_cnt_loop {}#1\R\R\R\R\R\R\R\R\Z }% -\def\XINT@cuz@cnt@loop #1#2#3#4#5#6#7#8#9% +\def\XINT_cuz_cnt_loop #1#2#3#4#5#6#7#8#9% {% - \xint@r #9\XINT@cuz@cnt@toofara \R - \expandafter\XINT@cuz@cnt@checka\expandafter + \xint_gob_til_r #9\XINT_cuz_cnt_toofara \R + \expandafter\XINT_cuz_cnt_checka\expandafter {\the\numexpr #1+8\relax}{#2#3#4#5#6#7#8#9}% }% -\def\XINT@cuz@cnt@toofara\R - \expandafter\XINT@cuz@cnt@checka\expandafter #1#2% +\def\XINT_cuz_cnt_toofara\R + \expandafter\XINT_cuz_cnt_checka\expandafter #1#2% {% - \XINT@cuz@cnt@toofarb {#1}#2% + \XINT_cuz_cnt_toofarb {#1}#2% }% -\def\XINT@cuz@cnt@toofarb #1#2\Z {\XINT@cuz@cnt@toofarc #2\Z {#1}}% -\def\XINT@cuz@cnt@toofarc #1#2#3#4#5#6#7#8% +\def\XINT_cuz_cnt_toofarb #1#2\Z {\XINT_cuz_cnt_toofarc #2\Z {#1}}% +\def\XINT_cuz_cnt_toofarc #1#2#3#4#5#6#7#8% {% - \xint@r #2\XINT@cuz@cnt@toofard 7% - #3\XINT@cuz@cnt@toofard 6% - #4\XINT@cuz@cnt@toofard 5% - #5\XINT@cuz@cnt@toofard 4% - #6\XINT@cuz@cnt@toofard 3% - #7\XINT@cuz@cnt@toofard 2% - #8\XINT@cuz@cnt@toofard 1% + \xint_gob_til_r #2\XINT_cuz_cnt_toofard 7% + #3\XINT_cuz_cnt_toofard 6% + #4\XINT_cuz_cnt_toofard 5% + #5\XINT_cuz_cnt_toofard 4% + #6\XINT_cuz_cnt_toofard 3% + #7\XINT_cuz_cnt_toofard 2% + #8\XINT_cuz_cnt_toofard 1% \Z #1#2#3#4#5#6#7#8% }% -\def\XINT@cuz@cnt@toofard #1#2\Z #3\R #4\Z #5% +\def\XINT_cuz_cnt_toofard #1#2\Z #3\R #4\Z #5% {% - \expandafter\XINT@cuz@cnt@toofare + \expandafter\XINT_cuz_cnt_toofare \the\numexpr #3\relax \R\R\R\R\R\R\R\R\Z {\the\numexpr #5-#1\relax}\R\Z }% -\def\XINT@cuz@cnt@toofare #1#2#3#4#5#6#7#8% +\def\XINT_cuz_cnt_toofare #1#2#3#4#5#6#7#8% {% - \xint@r #2\XINT@cuz@cnt@stopc 1% - #3\XINT@cuz@cnt@stopc 2% - #4\XINT@cuz@cnt@stopc 3% - #5\XINT@cuz@cnt@stopc 4% - #6\XINT@cuz@cnt@stopc 5% - #7\XINT@cuz@cnt@stopc 6% - #8\XINT@cuz@cnt@stopc 7% + \xint_gob_til_r #2\XINT_cuz_cnt_stopc 1% + #3\XINT_cuz_cnt_stopc 2% + #4\XINT_cuz_cnt_stopc 3% + #5\XINT_cuz_cnt_stopc 4% + #6\XINT_cuz_cnt_stopc 5% + #7\XINT_cuz_cnt_stopc 6% + #8\XINT_cuz_cnt_stopc 7% \Z #1#2#3#4#5#6#7#8% }% -\def\XINT@cuz@cnt@checka #1#2% +\def\XINT_cuz_cnt_checka #1#2% {% - \expandafter\XINT@cuz@cnt@checkb\the\numexpr #2\relax \Z {#1}% + \expandafter\XINT_cuz_cnt_checkb\the\numexpr #2\relax \Z {#1}% }% -\def\XINT@cuz@cnt@checkb #1% +\def\XINT_cuz_cnt_checkb #1% {% - \xint@zero #1\expandafter\XINT@cuz@cnt@loop\xint@z - 0\XINT@cuz@cnt@stopa #1% + \xint_gob_til_zero #1\expandafter\XINT_cuz_cnt_loop\xint_gob_til_z + 0\XINT_cuz_cnt_stopa #1% }% -\def\XINT@cuz@cnt@stopa #1\Z +\def\XINT_cuz_cnt_stopa #1\Z {% - \XINT@cuz@cnt@stopb #1\R\R\R\R\R\R\R\R\Z % + \XINT_cuz_cnt_stopb #1\R\R\R\R\R\R\R\R\Z % }% -\def\XINT@cuz@cnt@stopb #1#2#3#4#5#6#7#8#9% +\def\XINT_cuz_cnt_stopb #1#2#3#4#5#6#7#8#9% {% - \xint@r #2\XINT@cuz@cnt@stopc 1% - #3\XINT@cuz@cnt@stopc 2% - #4\XINT@cuz@cnt@stopc 3% - #5\XINT@cuz@cnt@stopc 4% - #6\XINT@cuz@cnt@stopc 5% - #7\XINT@cuz@cnt@stopc 6% - #8\XINT@cuz@cnt@stopc 7% - #9\XINT@cuz@cnt@stopc 8% + \xint_gob_til_r #2\XINT_cuz_cnt_stopc 1% + #3\XINT_cuz_cnt_stopc 2% + #4\XINT_cuz_cnt_stopc 3% + #5\XINT_cuz_cnt_stopc 4% + #6\XINT_cuz_cnt_stopc 5% + #7\XINT_cuz_cnt_stopc 6% + #8\XINT_cuz_cnt_stopc 7% + #9\XINT_cuz_cnt_stopc 8% \Z #1#2#3#4#5#6#7#8#9% }% -\def\XINT@cuz@cnt@stopc #1#2\Z #3\R #4\Z #5% +\def\XINT_cuz_cnt_stopc #1#2\Z #3\R #4\Z #5% {% - \expandafter\XINT@cuz@cnt@stopd\expandafter + \expandafter\XINT_cuz_cnt_stopd\expandafter {\the\numexpr #5-#1}#3% }% -\def\XINT@cuz@cnt@stopd #1#2\R #3\Z +\def\XINT_cuz_cnt_stopd #1#2\R #3\Z {% \expandafter\space\expandafter - {\romannumeral0\XINT@rord@main {}#2% - \xint@UNDEF - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@UNDEF }{#1}% + {\romannumeral0\XINT_rord_main {}#2% + \xint_relax + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_relax }{#1}% }% % \end{macrocode} % \subsection{\csh{xintRaw}} @@ -9626,121 +9467,121 @@ first place. \def\xintRaw {\romannumeral0\xintraw }% \def\xintraw {% - \expandafter\XINT@raw\romannumeral0\XINT@infrac + \expandafter\XINT_raw\romannumeral0\XINT_infrac }% -\def\XINT@raw #1% +\def\XINT_raw #1% {% - \ifcase\XINT@Sgn {#1} - \expandafter\XINT@raw@Ba + \ifcase\XINT_Sgn {#1} + \expandafter\XINT_raw_Ba \or - \expandafter\XINT@raw@A + \expandafter\XINT_raw_A \else - \expandafter\XINT@raw@Ba + \expandafter\XINT_raw_Ba \fi {#1}% }% -\def\XINT@raw@A #1#2#3{\xint@dsh {#2}{-#1}/#3}% -\def\XINT@raw@Ba #1#2#3{\expandafter\XINT@raw@Bb - \expandafter{\romannumeral0\xint@dsh {#3}{#1}}{#2}}% -\def\XINT@raw@Bb #1#2{ #2/#1}% +\def\XINT_raw_A #1#2#3{\xint_dsh {#2}{-#1}/#3}% +\def\XINT_raw_Ba #1#2#3{\expandafter\XINT_raw_Bb + \expandafter{\romannumeral0\xint_dsh {#3}{#1}}{#2}}% +\def\XINT_raw_Bb #1#2{ #2/#1}% % \end{macrocode} % \subsection{\csh{xintNumerator}} % \begin{macrocode} \def\xintNumerator {\romannumeral0\xintnumerator }% \def\xintnumerator {% - \expandafter\XINT@numer\romannumeral0\XINT@infrac + \expandafter\XINT_numer\romannumeral0\XINT_infrac }% -\def\XINT@numer #1% +\def\XINT_numer #1% {% - \ifcase\XINT@Sgn {#1} - \expandafter\XINT@numer@B + \ifcase\XINT_Sgn {#1} + \expandafter\XINT_numer_B \or - \expandafter\XINT@numer@A + \expandafter\XINT_numer_A \else - \expandafter\XINT@numer@B + \expandafter\XINT_numer_B \fi {#1}% }% -\def\XINT@numer@A #1#2#3{\xint@dsh {#2}{-#1}}% -\def\XINT@numer@B #1#2#3{ #2}% +\def\XINT_numer_A #1#2#3{\xint_dsh {#2}{-#1}}% +\def\XINT_numer_B #1#2#3{ #2}% % \end{macrocode} % \subsection{\csh{xintDenominator}} % \begin{macrocode} \def\xintDenominator {\romannumeral0\xintdenominator }% \def\xintdenominator {% - \expandafter\XINT@denom\romannumeral0\XINT@infrac + \expandafter\XINT_denom\romannumeral0\XINT_infrac }% -\def\XINT@denom #1% +\def\XINT_denom #1% {% - \ifcase\XINT@Sgn {#1} - \expandafter\XINT@denom@B + \ifcase\XINT_Sgn {#1} + \expandafter\XINT_denom_B \or - \expandafter\XINT@denom@A + \expandafter\XINT_denom_A \else - \expandafter\XINT@denom@B + \expandafter\XINT_denom_B \fi {#1}% }% -\def\XINT@denom@A #1#2#3{ #3}% -\def\XINT@denom@B #1#2#3{\xint@dsh {#3}{#1}}% +\def\XINT_denom_A #1#2#3{ #3}% +\def\XINT_denom_B #1#2#3{\xint_dsh {#3}{#1}}% % \end{macrocode} % \subsection{\csh{xintFrac}} % \begin{macrocode} \def\xintFrac {\romannumeral0\xintfrac }% \def\xintfrac #1% {% - \expandafter\XINT@@frac@A\romannumeral0\XINT@infrac {#1}% + \expandafter\XINT__frac_A\romannumeral0\XINT_infrac {#1}% }% -\def\XINT@@frac@A #1{\XINT@@frac@B #1\Z }% -\def\XINT@@frac@B #1#2\Z +\def\XINT__frac_A #1{\XINT__frac_B #1\Z }% +\def\XINT__frac_B #1#2\Z {% - \xint@zero #1\XINT@@frac@C 0\XINT@@frac@D {10^{#1#2}}% + \xint_gob_til_zero #1\XINT__frac_C 0\XINT__frac_D {10^{#1#2}}% }% -\def\XINT@@frac@C #1#2#3#4#5% +\def\XINT__frac_C #1#2#3#4#5% {% - \ifcase\XINT@isOne {#5} - \or \xint@afterfi {\expandafter\xint@firstoftwo@andstop\xint@gobble@ii }% + \ifcase\XINT_isOne {#5} + \or \xint_afterfi {\expandafter\xint_firstoftwo_andstop\xint_gobble_ii }% \fi \space \frac {#4}{#5}% }% -\def\XINT@@frac@D #1#2#3% +\def\XINT__frac_D #1#2#3% {% - \ifcase\XINT@isOne {#3} - \or \XINT@@frac@E + \ifcase\XINT_isOne {#3} + \or \XINT__frac_E \fi \space \frac {#2}{#3}#1% }% -\def\XINT@@frac@E \fi #1#2#3#4{\fi \space #3\cdot }% +\def\XINT__frac_E \fi #1#2#3#4{\fi \space #3\cdot }% % \end{macrocode} % \subsection{\csh{xintSignedFrac}} % \begin{macrocode} \def\xintSignedFrac {\romannumeral0\xintsignedfrac }% \def\xintsignedfrac #1% {% - \expandafter\XINT@sgnfrac@a\romannumeral0\XINT@infrac {#1}% + \expandafter\XINT_sgnfrac_a\romannumeral0\XINT_infrac {#1}% }% -\def\XINT@sgnfrac@a #1#2% +\def\XINT_sgnfrac_a #1#2% {% - \XINT@sgnfrac@b #2\Z {#1}% + \XINT_sgnfrac_b #2\Z {#1}% }% -\def\XINT@sgnfrac@b #1% +\def\XINT_sgnfrac_b #1% {% - \xint@UDsignfork - #1\dummy \XINT@sgnfrac@N - -\dummy {\XINT@sgnfrac@P #1}% - \xint@UDkrof + \xint_UDsignfork + #1\dummy \XINT_sgnfrac_N + -\dummy {\XINT_sgnfrac_P #1}% + \krof }% -\def\XINT@sgnfrac@P #1\Z #2% +\def\XINT_sgnfrac_P #1\Z #2% {% - \XINT@@frac@A {#2}{#1}% + \XINT__frac_A {#2}{#1}% }% -\def\XINT@sgnfrac@N +\def\XINT_sgnfrac_N {% - \expandafter\xint@minus@andstop\romannumeral0\XINT@sgnfrac@P + \expandafter\xint_minus_andstop\romannumeral0\XINT_sgnfrac_P }% % \end{macrocode} % \subsection{\csh{xintFwOver}} @@ -9748,27 +9589,27 @@ first place. \def\xintFwOver {\romannumeral0\xintfwover }% \def\xintfwover #1% {% - \expandafter\XINT@fwover@A\romannumeral0\XINT@infrac {#1}% + \expandafter\XINT_fwover_A\romannumeral0\XINT_infrac {#1}% }% -\def\XINT@fwover@A #1{\XINT@fwover@B #1\Z }% -\def\XINT@fwover@B #1#2\Z +\def\XINT_fwover_A #1{\XINT_fwover_B #1\Z }% +\def\XINT_fwover_B #1#2\Z {% - \xint@zero #1\XINT@fwover@C 0\XINT@fwover@D {10^{#1#2}}% + \xint_gob_til_zero #1\XINT_fwover_C 0\XINT_fwover_D {10^{#1#2}}% }% -\def\XINT@fwover@C #1#2#3#4#5% +\def\XINT_fwover_C #1#2#3#4#5% {% - \ifcase\XINT@isOne {#5} - \xint@afterfi { {#4\over #5}}% + \ifcase\XINT_isOne {#5} + \xint_afterfi { {#4\over #5}}% \or - \xint@afterfi { #4}% + \xint_afterfi { #4}% \fi }% -\def\XINT@fwover@D #1#2#3% +\def\XINT_fwover_D #1#2#3% {% - \ifcase\XINT@isOne {#3} - \xint@afterfi { {#2\over #3}}% + \ifcase\XINT_isOne {#3} + \xint_afterfi { {#2\over #3}}% \or - \xint@afterfi { #2\cdot }% + \xint_afterfi { #2\cdot }% \fi #1% }% @@ -9778,26 +9619,26 @@ first place. \def\xintSignedFwOver {\romannumeral0\xintsignedfwover }% \def\xintsignedfwover #1% {% - \expandafter\XINT@sgnfwover@a\romannumeral0\XINT@infrac {#1}% + \expandafter\XINT_sgnfwover_a\romannumeral0\XINT_infrac {#1}% }% -\def\XINT@sgnfwover@a #1#2% +\def\XINT_sgnfwover_a #1#2% {% - \XINT@sgnfwover@b #2\Z {#1}% + \XINT_sgnfwover_b #2\Z {#1}% }% -\def\XINT@sgnfwover@b #1% +\def\XINT_sgnfwover_b #1% {% - \xint@UDsignfork - #1\dummy \XINT@sgnfwover@N - -\dummy {\XINT@sgnfwover@P #1}% - \xint@UDkrof + \xint_UDsignfork + #1\dummy \XINT_sgnfwover_N + -\dummy {\XINT_sgnfwover_P #1}% + \krof }% -\def\XINT@sgnfwover@P #1\Z #2% +\def\XINT_sgnfwover_P #1\Z #2% {% - \XINT@fwover@A {#2}{#1}% + \XINT_fwover_A {#2}{#1}% }% -\def\XINT@sgnfwover@N +\def\XINT_sgnfwover_N {% - \expandafter\xint@minus@andstop\romannumeral0\XINT@sgnfwover@P + \expandafter\xint_minus_andstop\romannumeral0\XINT_sgnfwover_P }% % \end{macrocode} % \subsection{\csh{xintREZ}} @@ -9805,376 +9646,368 @@ first place. \def\xintREZ {\romannumeral0\xintrez }% \def\xintrez {% - \expandafter\XINT@rez@A\romannumeral0\XINT@infrac + \expandafter\XINT_rez_A\romannumeral0\XINT_infrac }% -\def\XINT@rez@A #1#2% +\def\XINT_rez_A #1#2% {% - \XINT@rez@AB #2\Z {#1}% + \XINT_rez_AB #2\Z {#1}% }% -\def\XINT@rez@AB #1% +\def\XINT_rez_AB #1% {% - \xint@UDzerominusfork - #1-\dummy \XINT@rez@zero - 0#1\dummy \XINT@rez@neg - 0-\dummy {\XINT@rez@B #1}% - \xint@UDkrof + \xint_UDzerominusfork + #1-\dummy \XINT_rez_zero + 0#1\dummy \XINT_rez_neg + 0-\dummy {\XINT_rez_B #1}% + \krof }% -\def\XINT@rez@zero #1\Z #2#3{ 0/1[0]}% -\def\XINT@rez@neg {\expandafter\xint@minus@andstop\romannumeral0\XINT@rez@B }% -\def\XINT@rez@B #1\Z +\def\XINT_rez_zero #1\Z #2#3{ 0/1[0]}% +\def\XINT_rez_neg {\expandafter\xint_minus_andstop\romannumeral0\XINT_rez_B }% +\def\XINT_rez_B #1\Z {% - \expandafter\XINT@rez@C\romannumeral0\XINT@factortens {#1}% + \expandafter\XINT_rez_C\romannumeral0\XINT_factortens {#1}% }% -\def\XINT@rez@C #1#2#3#4% +\def\XINT_rez_C #1#2#3#4% {% - \expandafter\XINT@rez@D\romannumeral0\XINT@factortens {#4}{#3}{#2}{#1}% + \expandafter\XINT_rez_D\romannumeral0\XINT_factortens {#4}{#3}{#2}{#1}% }% -\def\XINT@rez@D #1#2#3#4#5% +\def\XINT_rez_D #1#2#3#4#5% {% - \expandafter\XINT@rez@E\expandafter + \expandafter\XINT_rez_E\expandafter {\the\numexpr #3+#4-#2}{#1}{#5}% }% -\def\XINT@rez@E #1#2#3{ #3/#2[#1]}% +\def\XINT_rez_E #1#2#3{ #3/#2[#1]}% % \end{macrocode} % \subsection{\csh{xintIrr}} -% \begin{verbatim} +% \lverb|& % 1.04 fixes a buggy \xintIrr {0}. % 1.05 modifies the initial parsing and post-processing to use \xintraw and to -% more quickly deal with an input denominator equal to 1. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% more quickly deal with an input denominator equal to 1.| % \begin{macrocode} \def\xintIrr {\romannumeral0\xintirr }% \def\xintirr #1% {% - \expandafter\XINT@irr@start\romannumeral0\xintraw {#1}\Z + \expandafter\XINT_irr_start\romannumeral0\xintraw {#1}\Z }% -\def\XINT@irr@start #1#2/#3\Z +\def\XINT_irr_start #1#2/#3\Z {% - \ifcase\XINT@isOne {#3} - \xint@afterfi - {\xint@UDsignfork - #1\dummy \XINT@irr@negative - -\dummy {\XINT@irr@nonneg #1}% - \xint@UDkrof}% + \ifcase\XINT_isOne {#3} + \xint_afterfi + {\xint_UDsignfork + #1\dummy \XINT_irr_negative + -\dummy {\XINT_irr_nonneg #1}% + \krof}% \or - \xint@afterfi{\XINT@irr@denomisone #1}% + \xint_afterfi{\XINT_irr_denomisone #1}% \fi #2\Z {#3}% }% -\def\XINT@irr@denomisone #1\Z #2{ #1}% -\def\XINT@irr@negative #1\Z #2{\XINT@irr@D #1\Z #2\Z \xint@minus@andstop}% -\def\XINT@irr@nonneg #1\Z #2{\XINT@irr@D #1\Z #2\Z \space}% -\def\XINT@irr@D #1#2\Z #3#4\Z -{% - \xint@UDzerosfork - #3#1\dummy \XINT@irr@indeterminate - #30\dummy \XINT@irr@divisionbyzero - #10\dummy \XINT@irr@zero - 00\dummy \XINT@irr@loop@a - \xint@UDkrof +\def\XINT_irr_denomisone #1\Z #2{ #1}% +\def\XINT_irr_negative #1\Z #2{\XINT_irr_D #1\Z #2\Z \xint_minus_andstop}% +\def\XINT_irr_nonneg #1\Z #2{\XINT_irr_D #1\Z #2\Z \space}% +\def\XINT_irr_D #1#2\Z #3#4\Z +{% + \xint_UDzerosfork + #3#1\dummy \XINT_irr_indeterminate + #30\dummy \XINT_irr_divisionbyzero + #10\dummy \XINT_irr_zero + 00\dummy \XINT_irr_loop_a + \krof {#3#4}{#1#2}{#3#4}{#1#2}% }% -\def\XINT@irr@indeterminate #1#2#3#4#5{\xintError:NaN\space 0/0}% -\def\XINT@irr@divisionbyzero #1#2#3#4#5{\xintError:DivisionByZero #5#2/0}% -\def\XINT@irr@zero #1#2#3#4#5{ 0}% -\def\XINT@irr@loop@a #1#2% +\def\XINT_irr_indeterminate #1#2#3#4#5{\xintError:NaN\space 0/0}% +\def\XINT_irr_divisionbyzero #1#2#3#4#5{\xintError:DivisionByZero #5#2/0}% +\def\XINT_irr_zero #1#2#3#4#5{ 0}% +\def\XINT_irr_loop_a #1#2% {% - \expandafter\XINT@irr@loop@d - \romannumeral0\XINT@div@prepare {#1}{#2}{#1}% + \expandafter\XINT_irr_loop_d + \romannumeral0\XINT_div_prepare {#1}{#2}{#1}% }% -\def\XINT@irr@loop@d #1#2% +\def\XINT_irr_loop_d #1#2% {% - \XINT@irr@loop@e #2\Z + \XINT_irr_loop_e #2\Z }% -\def\XINT@irr@loop@e #1#2\Z +\def\XINT_irr_loop_e #1#2\Z {% - \xint@zero #1\xint@irr@loop@exit0\XINT@irr@loop@a {#1#2}% + \xint_gob_til_zero #1\xint_irr_loop_exit0\XINT_irr_loop_a {#1#2}% }% -\def\xint@irr@loop@exit0\XINT@irr@loop@a #1#2#3#4% +\def\xint_irr_loop_exit0\XINT_irr_loop_a #1#2#3#4% {% - \expandafter\XINT@irr@loop@exitb\expandafter + \expandafter\XINT_irr_loop_exitb\expandafter {\romannumeral0\xintiquo {#3}{#2}}% {\romannumeral0\xintiquo {#4}{#2}}% }% -\def\XINT@irr@loop@exitb #1#2% +\def\XINT_irr_loop_exitb #1#2% {% - \expandafter\XINT@irr@finish\expandafter {#2}{#1}% + \expandafter\XINT_irr_finish\expandafter {#2}{#1}% }% -\def\XINT@irr@finish #1#2#3% +\def\XINT_irr_finish #1#2#3% {% - \ifcase\XINT@isOne {#2} - \xint@afterfi {#3#1/#2}% + \ifcase\XINT_isOne {#2} + \xint_afterfi {#3#1/#2}% \or - \xint@afterfi {#3#1}% + \xint_afterfi {#3#1}% \fi }% % \end{macrocode} % \subsection{\csh{xintNum}} -% \begin{verbatim} -% this extension of the xint original xintNum is added in 1.05, as a synonym to +% \lverb|& +% This extension of the xint original xintNum is added in 1.05, as a +% synonym to % \xintIrr, but raising an error when the input does not evaluate to an integer. % Usable with not too much overhead on integer input as \xintIrr % checks quickly for a denominator equal to 1 (which will be put there by the -% \XINT@infrac called by \xintraw). This way, macros such as \xintQuo can be +% \XINT_infrac called by \xintraw). This way, macros such as \xintQuo can be % modified with minimal overhead to accept fractional input as long as it -% evaluates to an integer. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% evaluates to an integer. | % \begin{macrocode} \def\xintNum {\romannumeral0\xintnum }% -\def\xintnum #1{\expandafter\XINT@intcheck\romannumeral0\xintirr {#1}/\W\Z }% -\def\XINT@intcheck #1/#2#3\Z +\def\xintnum #1{\expandafter\XINT_intcheck\romannumeral0\xintirr {#1}/\W\Z }% +\def\XINT_intcheck #1/#2#3\Z {% - \xint@w #2\xint@gobble@ii\W\xintError:NotAnInteger + \xint_gob_til_w #2\xint_gobble_ii\W + \xintError:NotAnInteger \space #1% }% % \end{macrocode} % \subsection{\csh{xintJrr}} -% \begin{verbatim} -% Modified similarly as \xintIrr in release 1.05 -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% Modified similarly as \xintIrr in release 1.05| % \begin{macrocode} \def\xintJrr {\romannumeral0\xintjrr }% \def\xintjrr #1% {% - \expandafter\XINT@jrr@start\romannumeral0\xintraw {#1}\Z + \expandafter\XINT_jrr_start\romannumeral0\xintraw {#1}\Z }% -\def\XINT@jrr@start #1#2/#3\Z +\def\XINT_jrr_start #1#2/#3\Z {% - \ifcase\XINT@isOne {#3} - \xint@afterfi - {\xint@UDsignfork - #1\dummy \XINT@jrr@negative - -\dummy {\XINT@jrr@nonneg #1}% - \xint@UDkrof}% + \ifcase\XINT_isOne {#3} + \xint_afterfi + {\xint_UDsignfork + #1\dummy \XINT_jrr_negative + -\dummy {\XINT_jrr_nonneg #1}% + \krof}% \or - \xint@afterfi{\XINT@jrr@denomisone #1}% + \xint_afterfi{\XINT_jrr_denomisone #1}% \fi #2\Z {#3}% }% -\def\XINT@jrr@denomisone #1\Z #2{ #1}% -\def\XINT@jrr@negative #1\Z #2{\XINT@jrr@D #1\Z #2\Z \xint@minus@andstop }% -\def\XINT@jrr@nonneg #1\Z #2{\XINT@jrr@D #1\Z #2\Z \space}% -\def\XINT@jrr@D #1#2\Z #3#4\Z -{% - \xint@UDzerosfork - #3#1\dummy \XINT@jrr@indeterminate - #30\dummy \XINT@jrr@divisionbyzero - #10\dummy \XINT@jrr@zero - 00\dummy \XINT@jrr@loop@a - \xint@UDkrof +\def\XINT_jrr_denomisone #1\Z #2{ #1}% +\def\XINT_jrr_negative #1\Z #2{\XINT_jrr_D #1\Z #2\Z \xint_minus_andstop }% +\def\XINT_jrr_nonneg #1\Z #2{\XINT_jrr_D #1\Z #2\Z \space}% +\def\XINT_jrr_D #1#2\Z #3#4\Z +{% + \xint_UDzerosfork + #3#1\dummy \XINT_jrr_indeterminate + #30\dummy \XINT_jrr_divisionbyzero + #10\dummy \XINT_jrr_zero + 00\dummy \XINT_jrr_loop_a + \krof {#3#4}{#1#2}1001% }% -\def\XINT@jrr@indeterminate #1#2#3#4#5#6#7{\xintError:NaN\space 0/0}% -\def\XINT@jrr@divisionbyzero #1#2#3#4#5#6#7{\xintError:DivisionByZero #7#2/0}% -\def\XINT@jrr@zero #1#2#3#4#5#6#7{ 0}% -\def\XINT@jrr@loop@a #1#2% +\def\XINT_jrr_indeterminate #1#2#3#4#5#6#7{\xintError:NaN\space 0/0}% +\def\XINT_jrr_divisionbyzero #1#2#3#4#5#6#7{\xintError:DivisionByZero #7#2/0}% +\def\XINT_jrr_zero #1#2#3#4#5#6#7{ 0}% +\def\XINT_jrr_loop_a #1#2% {% - \expandafter\XINT@jrr@loop@b - \romannumeral0\XINT@div@prepare {#1}{#2}{#1}% + \expandafter\XINT_jrr_loop_b + \romannumeral0\XINT_div_prepare {#1}{#2}{#1}% }% -\def\XINT@jrr@loop@b #1#2#3#4#5#6#7% +\def\XINT_jrr_loop_b #1#2#3#4#5#6#7% {% - \expandafter \XINT@jrr@loop@c \expandafter - {\romannumeral0\xintiadd{\XINT@Mul{#4}{#1}}{#6}}% - {\romannumeral0\xintiadd{\XINT@Mul{#5}{#1}}{#7}}% + \expandafter \XINT_jrr_loop_c \expandafter + {\romannumeral0\xintiadd{\XINT_Mul{#4}{#1}}{#6}}% + {\romannumeral0\xintiadd{\XINT_Mul{#5}{#1}}{#7}}% {#2}{#3}{#4}{#5}% }% -\def\XINT@jrr@loop@c #1#2% +\def\XINT_jrr_loop_c #1#2% {% - \expandafter \XINT@jrr@loop@d \expandafter{#2}{#1}% + \expandafter \XINT_jrr_loop_d \expandafter{#2}{#1}% }% -\def\XINT@jrr@loop@d #1#2#3#4% +\def\XINT_jrr_loop_d #1#2#3#4% {% - \XINT@jrr@loop@e #3\Z {#4}{#2}{#1}% + \XINT_jrr_loop_e #3\Z {#4}{#2}{#1}% }% -\def\XINT@jrr@loop@e #1#2\Z +\def\XINT_jrr_loop_e #1#2\Z {% - \xint@zero #1\xint@jrr@loop@exit0\XINT@jrr@loop@a {#1#2}% + \xint_gob_til_zero #1\xint_jrr_loop_exit0\XINT_jrr_loop_a {#1#2}% }% -\def\xint@jrr@loop@exit0\XINT@jrr@loop@a #1#2#3#4#5#6% +\def\xint_jrr_loop_exit0\XINT_jrr_loop_a #1#2#3#4#5#6% {% - \XINT@irr@finish {#3}{#4}% + \XINT_irr_finish {#3}{#4}% }% % \end{macrocode} % \subsection{\csh{xintTrunc}, \csh{xintiTrunc}} -% \begin{verbatim} -% Modified in 1.06 to give the first argument to a \numexpr -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% Modified in 1.06 to give the first argument to a \numexpr| % \begin{macrocode} \def\xintTrunc {\romannumeral0\xinttrunc }% \def\xintiTrunc {\romannumeral0\xintitrunc }% \def\xinttrunc #1% {% - \expandafter\XINT@trunc\expandafter {\the\numexpr #1}% + \expandafter\XINT_trunc\expandafter {\the\numexpr #1}% }% -\def\XINT@trunc #1#2% +\def\XINT_trunc #1#2% {% - \expandafter\XINT@trunc@G - \romannumeral0\expandafter\XINT@trunc@A - \romannumeral0\XINT@infrac {#2}{#1}{#1}% + \expandafter\XINT_trunc_G + \romannumeral0\expandafter\XINT_trunc_A + \romannumeral0\XINT_infrac {#2}{#1}{#1}% }% \def\xintitrunc #1% {% - \expandafter\XINT@itrunc\expandafter {\the\numexpr #1}% + \expandafter\XINT_itrunc\expandafter {\the\numexpr #1}% }% -\def\XINT@itrunc #1#2% +\def\XINT_itrunc #1#2% {% - \expandafter\XINT@itrunc@G - \romannumeral0\expandafter\XINT@trunc@A - \romannumeral0\XINT@infrac {#2}{#1}{#1}% + \expandafter\XINT_itrunc_G + \romannumeral0\expandafter\XINT_trunc_A + \romannumeral0\XINT_infrac {#2}{#1}{#1}% }% -\def\XINT@trunc@A #1#2#3#4% +\def\XINT_trunc_A #1#2#3#4% {% - \expandafter\XINT@trunc@checkifzero + \expandafter\XINT_trunc_checkifzero \expandafter{\the\numexpr #1+#4}#2\Z {#3}% }% -\def\XINT@trunc@checkifzero #1#2#3\Z +\def\XINT_trunc_checkifzero #1#2#3\Z {% - \xint@zero #2\XINT@trunc@iszero0\XINT@trunc@B {#1}{#2#3}% + \xint_gob_til_zero #2\XINT_trunc_iszero0\XINT_trunc_B {#1}{#2#3}% }% -\def\XINT@trunc@iszero #1#2#3#4#5{ 0\Z 0}% -\def\XINT@trunc@B #1% +\def\XINT_trunc_iszero #1#2#3#4#5{ 0\Z 0}% +\def\XINT_trunc_B #1% {% - \ifcase\XINT@Sgn {#1} - \expandafter\XINT@trunc@D + \ifcase\XINT_Sgn {#1} + \expandafter\XINT_trunc_D \or - \expandafter\XINT@trunc@D + \expandafter\XINT_trunc_D \else - \expandafter\XINT@trunc@C + \expandafter\XINT_trunc_C \fi {#1}% }% -\def\XINT@trunc@C #1#2#3% +\def\XINT_trunc_C #1#2#3% {% - \expandafter \XINT@trunc@E - \romannumeral0\xint@dsh {#3}{#1}\Z #2\Z + \expandafter \XINT_trunc_E + \romannumeral0\xint_dsh {#3}{#1}\Z #2\Z }% -\def\XINT@trunc@D #1#2% +\def\XINT_trunc_D #1#2% {% - \expandafter \XINT@trunc@DE \expandafter - {\romannumeral0\xint@dsh {#2}{-#1}}% + \expandafter \XINT_trunc_DE \expandafter + {\romannumeral0\xint_dsh {#2}{-#1}}% }% -\def\XINT@trunc@DE #1#2{\XINT@trunc@E #2\Z #1\Z }% -\def\XINT@trunc@E #1#2\Z #3#4\Z +\def\XINT_trunc_DE #1#2{\XINT_trunc_E #2\Z #1\Z }% +\def\XINT_trunc_E #1#2\Z #3#4\Z {% - \xint@UDsignsfork - #1#3\dummy \XINT@trunc@minusminus - #1-\dummy {\XINT@trunc@minusplus #3}% - #3-\dummy {\XINT@trunc@plusminus #1}% - --\dummy {\XINT@trunc@plusplus #3#1}% - \xint@UDkrof + \xint_UDsignsfork + #1#3\dummy \XINT_trunc_minusminus + #1-\dummy {\XINT_trunc_minusplus #3}% + #3-\dummy {\XINT_trunc_plusminus #1}% + --\dummy {\XINT_trunc_plusplus #3#1}% + \krof {#4}{#2}% }% -\def\XINT@trunc@minusminus #1#2{\xintiquo {#1}{#2}\Z \space}% -\def\XINT@trunc@minusplus #1#2#3{\xintiquo {#1#2}{#3}\Z \xint@minus@andstop}% -\def\XINT@trunc@plusminus #1#2#3{\xintiquo {#2}{#1#3}\Z \xint@minus@andstop}% -\def\XINT@trunc@plusplus #1#2#3#4{\xintiquo {#1#3}{#2#4}\Z \space}% -\def\XINT@itrunc@G #1#2\Z #3#4% +\def\XINT_trunc_minusminus #1#2{\xintiquo {#1}{#2}\Z \space}% +\def\XINT_trunc_minusplus #1#2#3{\xintiquo {#1#2}{#3}\Z \xint_minus_andstop}% +\def\XINT_trunc_plusminus #1#2#3{\xintiquo {#2}{#1#3}\Z \xint_minus_andstop}% +\def\XINT_trunc_plusplus #1#2#3#4{\xintiquo {#1#3}{#2#4}\Z \space}% +\def\XINT_itrunc_G #1#2\Z #3#4% {% - \xint@zero #1\XINT@trunc@zero 0\xint@firstoftwo {#3#1#2}0% + \xint_gob_til_zero #1\XINT_trunc_zero 0\xint_firstoftwo {#3#1#2}0% }% -\def\XINT@trunc@G #1\Z #2#3% +\def\XINT_trunc_G #1\Z #2#3% {% - \xint@zero #2\XINT@trunc@zero 0% - \expandafter\XINT@trunc@H\expandafter - {\the\numexpr\romannumeral0\XINT@length {#1}-#3}{#3}{#1}#2% + \xint_gob_til_zero #2\XINT_trunc_zero 0% + \expandafter\XINT_trunc_H\expandafter + {\the\numexpr\romannumeral0\XINT_length {#1}-#3}{#3}{#1}#2% }% -\def\XINT@trunc@zero 0#10{ 0}% -\def\XINT@trunc@H #1#2% +\def\XINT_trunc_zero 0#10{ 0}% +\def\XINT_trunc_H #1#2% {% \ifnum #1 > 0 - \xint@afterfi {\XINT@trunc@Ha {#2}}% + \xint_afterfi {\XINT_trunc_Ha {#2}}% \else - \xint@afterfi {\XINT@trunc@Hb {-#1}}% -0,--1,--2, .... + \xint_afterfi {\XINT_trunc_Hb {-#1}}% -0,--1,--2, .... \fi }% -\def\XINT@trunc@Ha +\def\XINT_trunc_Ha {% - \expandafter\XINT@trunc@Haa\romannumeral0\xintdecsplit + \expandafter\XINT_trunc_Haa\romannumeral0\xintdecsplit }% -\def\XINT@trunc@Haa #1#2#3% +\def\XINT_trunc_Haa #1#2#3% {% #3#1.#2% }% -\def\XINT@trunc@Hb #1#2#3% +\def\XINT_trunc_Hb #1#2#3% {% \expandafter #3\expandafter0\expandafter.% - \romannumeral0\XINT@dsx@zeroloop {#1}\Z {}#2% #1=-0 possible! + \romannumeral0\XINT_dsx_zeroloop {#1}\Z {}#2% #1=-0 possible! }% % \end{macrocode} % \subsection{\csh{xintRound}, \csh{xintiRound}} -% \begin{verbatim} -% Modified in 1.06 to give the first argument to a \numexpr -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% Modified in 1.06 to give the first argument to a \numexpr| % \begin{macrocode} \def\xintRound {\romannumeral0\xintround }% \def\xintiRound {\romannumeral0\xintiround }% \def\xintround #1% {% - \expandafter\XINT@round\expandafter {\the\numexpr #1}% + \expandafter\XINT_round\expandafter {\the\numexpr #1}% }% -\def\XINT@round +\def\XINT_round {% - \expandafter\XINT@trunc@G\romannumeral0\XINT@round@A + \expandafter\XINT_trunc_G\romannumeral0\XINT_round_A }% \def\xintiround #1% {% - \expandafter\XINT@iround\expandafter {\the\numexpr #1}% + \expandafter\XINT_iround\expandafter {\the\numexpr #1}% }% -\def\XINT@iround +\def\XINT_iround {% - \expandafter\XINT@itrunc@G\romannumeral0\XINT@round@A + \expandafter\XINT_itrunc_G\romannumeral0\XINT_round_A }% -\def\XINT@round@A #1#2% +\def\XINT_round_A #1#2% {% - \expandafter\XINT@round@B - \romannumeral0\expandafter\XINT@trunc@A - \romannumeral0\XINT@infrac {#2}{\the\numexpr #1+1\relax}{#1}% + \expandafter\XINT_round_B + \romannumeral0\expandafter\XINT_trunc_A + \romannumeral0\XINT_infrac {#2}{\the\numexpr #1+1\relax}{#1}% }% -\def\XINT@round@B #1\Z +\def\XINT_round_B #1\Z {% - \expandafter\XINT@round@C - \romannumeral0\XINT@rord@main {}#1% - \xint@UNDEF - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@UNDEF + \expandafter\XINT_round_C + \romannumeral0\XINT_rord_main {}#1% + \xint_relax + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_relax \Z }% -\def\XINT@round@C #1% +\def\XINT_round_C #1% {% \ifnum #1<5 - \expandafter\XINT@round@Daa + \expandafter\XINT_round_Daa \else - \expandafter\XINT@round@Dba + \expandafter\XINT_round_Dba \fi }% -\def\XINT@round@Daa #1% +\def\XINT_round_Daa #1% {% - \xint@z #1\XINT@round@Daz\Z \XINT@round@Da #1% + \xint_gob_til_z #1\XINT_round_Daz\Z \XINT_round_Da #1% }% -\def\XINT@round@Daz\Z \XINT@round@Da \Z { 0\Z }% -\def\XINT@round@Da #1\Z +\def\XINT_round_Daz\Z \XINT_round_Da \Z { 0\Z }% +\def\XINT_round_Da #1\Z {% - \XINT@rord@main {}#1% - \xint@UNDEF - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@undef\xint@undef\xint@undef\xint@undef - \xint@UNDEF \Z + \XINT_rord_main {}#1% + \xint_relax + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_undef\xint_undef\xint_undef\xint_undef + \xint_relax \Z }% -\def\XINT@round@Dba #1% +\def\XINT_round_Dba #1% {% - \xint@z #1\XINT@round@Dbz\Z \XINT@round@Db #1% + \xint_gob_til_z #1\XINT_round_Dbz\Z \XINT_round_Db #1% }% -\def\XINT@round@Dbz\Z \XINT@round@Db \Z { 1\Z }% -\def\XINT@round@Db #1\Z +\def\XINT_round_Dbz\Z \XINT_round_Db \Z { 1\Z }% +\def\XINT_round_Db #1\Z {% - \XINT@addm@A 0{}1000\W\X\Y\Z #1000\W\X\Y\Z \Z + \XINT_addm_A 0{}1000\W\X\Y\Z #1000\W\X\Y\Z \Z }% % \end{macrocode} % \subsection{\csh{xintAdd}} @@ -10182,21 +10015,21 @@ first place. \def\xintAdd {\romannumeral0\xintadd }% \def\xintadd #1% {% - \expandafter\xint@fadd\expandafter {\romannumeral0\XINT@infrac {#1}}% + \expandafter\xint_fadd\expandafter {\romannumeral0\XINT_infrac {#1}}% }% -\def\xint@fadd #1#2{\expandafter\XINT@fadd@A\romannumeral0\XINT@infrac{#2}#1}% -\def\XINT@fadd@A #1#2#3#4% +\def\xint_fadd #1#2{\expandafter\XINT_fadd_A\romannumeral0\XINT_infrac{#2}#1}% +\def\XINT_fadd_A #1#2#3#4% {% \ifnum #4 > #1 - \xint@afterfi {\XINT@fadd@B {#1}}% + \xint_afterfi {\XINT_fadd_B {#1}}% \else - \xint@afterfi {\XINT@fadd@B {#4}}% + \xint_afterfi {\XINT_fadd_B {#4}}% \fi {#1}{#4}{#2}{#3}% }% -\def\XINT@fadd@B #1#2#3#4#5#6#7% +\def\XINT_fadd_B #1#2#3#4#5#6#7% {% - \expandafter\XINT@fadd@C\expandafter + \expandafter\XINT_fadd_C\expandafter {\romannumeral0\xintimul {#7}{#5}}% {\romannumeral0\xintiadd {\romannumeral0\xintimul {\xintDSH {\the\numexpr -#3+#1\relax}{#6}}{#5}}% @@ -10204,33 +10037,33 @@ first place. }% {#1}% }% -\def\XINT@fadd@C #1#2#3% +\def\XINT_fadd_C #1#2#3% {% - \expandafter\XINT@fadd@D\expandafter {#2}{#3}{#1}% + \expandafter\XINT_fadd_D\expandafter {#2}{#3}{#1}% }% -\def\XINT@fadd@D #1#2{\XINT@outfrac {#2}{#1}}% +\def\XINT_fadd_D #1#2{\XINT_outfrac {#2}{#1}}% % \end{macrocode} % \subsection{\csh{xintSub}} % \begin{macrocode} \def\xintSub {\romannumeral0\xintsub }% \def\xintsub #1% {% - \expandafter\xint@fsub\expandafter {\romannumeral0\XINT@infrac {#1}}% + \expandafter\xint_fsub\expandafter {\romannumeral0\XINT_infrac {#1}}% }% -\def\xint@fsub #1#2% - {\expandafter\XINT@fsub@A\romannumeral0\XINT@infrac {#2}#1}% -\def\XINT@fsub@A #1#2#3#4% +\def\xint_fsub #1#2% + {\expandafter\XINT_fsub_A\romannumeral0\XINT_infrac {#2}#1}% +\def\XINT_fsub_A #1#2#3#4% {% \ifnum #4 > #1 - \xint@afterfi {\XINT@fsub@B {#1}}% + \xint_afterfi {\XINT_fsub_B {#1}}% \else - \xint@afterfi {\XINT@fsub@B {#4}}% + \xint_afterfi {\XINT_fsub_B {#4}}% \fi {#1}{#4}{#2}{#3}% }% -\def\XINT@fsub@B #1#2#3#4#5#6#7% +\def\XINT_fsub_B #1#2#3#4#5#6#7% {% - \expandafter\XINT@fsub@C\expandafter + \expandafter\XINT_fsub_C\expandafter {\romannumeral0\xintimul {#7}{#5}}% {\romannumeral0\xintisub {\romannumeral0\xintimul {\xintDSH {\the\numexpr -#3+#1\relax}{#6}}{#5}}% @@ -10238,176 +10071,174 @@ first place. }% {#1}% }% -\def\XINT@fsub@C #1#2#3% +\def\XINT_fsub_C #1#2#3% {% - \expandafter\XINT@fsub@D\expandafter {#2}{#3}{#1}% + \expandafter\XINT_fsub_D\expandafter {#2}{#3}{#1}% }% -\def\XINT@fsub@D #1#2{\XINT@outfrac {#2}{#1}}% +\def\XINT_fsub_D #1#2{\XINT_outfrac {#2}{#1}}% % \end{macrocode} % \subsection{\csh{xintSum}, \csh{xintSumExpr}} % \begin{macrocode} \def\xintSum {\romannumeral0\xintsum }% \def\xintsum #1{\xintsumexpr #1\relax }% \def\xintSumExpr {\romannumeral0\xintsumexpr }% -\def\xintsumexpr {\expandafter\XINT@fsumexpr\romannumeral-`0}% -\def\XINT@fsumexpr {\XINT@fsum@loop@a {0/1[0]}}% -\def\XINT@fsum@loop@a #1#2% +\def\xintsumexpr {\expandafter\XINT_fsumexpr\romannumeral-`0}% +\def\XINT_fsumexpr {\XINT_fsum_loop_a {0/1[0]}}% +\def\XINT_fsum_loop_a #1#2% {% - \expandafter\XINT@fsum@loop@b \romannumeral-`0#2\Z {#1}% + \expandafter\XINT_fsum_loop_b \romannumeral-`0#2\Z {#1}% }% -\def\XINT@fsum@loop@b #1% +\def\XINT_fsum_loop_b #1% {% - \xint@relax #1\XINT@fsum@finished\relax - \XINT@fsum@loop@c #1% + \xint_gob_til_relax #1\XINT_fsum_finished\relax + \XINT_fsum_loop_c #1% }% -\def\XINT@fsum@loop@c #1\Z #2% +\def\XINT_fsum_loop_c #1\Z #2% {% - \expandafter\XINT@fsum@loop@a\expandafter{\romannumeral0\xintadd {#2}{#1}}% + \expandafter\XINT_fsum_loop_a\expandafter{\romannumeral0\xintadd {#2}{#1}}% }% -\def\XINT@fsum@finished #1\Z #2{ #2}% +\def\XINT_fsum_finished #1\Z #2{ #2}% % \end{macrocode} % \subsection{\csh{xintMul}} % \begin{macrocode} \def\xintMul {\romannumeral0\xintmul }% \def\xintmul #1% {% - \expandafter\xint@fmul\expandafter {\romannumeral0\XINT@infrac {#1}}% + \expandafter\xint_fmul\expandafter {\romannumeral0\XINT_infrac {#1}}% }% -\def\xint@fmul #1#2% - {\expandafter\XINT@fmul@A\romannumeral0\XINT@infrac {#2}#1}% -\def\XINT@fmul@A #1#2#3#4#5#6% +\def\xint_fmul #1#2% + {\expandafter\XINT_fmul_A\romannumeral0\XINT_infrac {#2}#1}% +\def\XINT_fmul_A #1#2#3#4#5#6% {% - \expandafter\XINT@fmul@B + \expandafter\XINT_fmul_B \expandafter{\the\numexpr #1+#4\expandafter}% \expandafter{\romannumeral0\xintimul {#6}{#3}}% {\romannumeral0\xintimul {#5}{#2}}% }% -\def\XINT@fmul@B #1#2#3% +\def\XINT_fmul_B #1#2#3% {% - \expandafter \XINT@fmul@C \expandafter{#3}{#1}{#2}% + \expandafter \XINT_fmul_C \expandafter{#3}{#1}{#2}% }% -\def\XINT@fmul@C #1#2{\XINT@outfrac {#2}{#1}}% +\def\XINT_fmul_C #1#2{\XINT_outfrac {#2}{#1}}% % \end{macrocode} % \subsection{\csh{xintSqr}} % \begin{macrocode} \def\xintSqr {\romannumeral0\xintsqr }% \def\xintsqr #1% {% - \expandafter\xint@fsqr\expandafter{\romannumeral0\XINT@infrac {#1}}% + \expandafter\xint_fsqr\expandafter{\romannumeral0\XINT_infrac {#1}}% }% -\def\xint@fsqr #1{\XINT@fmul@A #1#1}% +\def\xint_fsqr #1{\XINT_fmul_A #1#1}% % \end{macrocode} % \subsection{\csh{xintPow}} -% \begin{verbatim} -% Modified in 1.06 to give the exponent to a \numexpr -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% \lverb|& +% Modified in 1.06 to give the exponent to a \numexpr| % \begin{macrocode} \def\xintPow {\romannumeral0\xintpow }% \def\xintpow #1% {% - \expandafter\xint@fpow\expandafter {\romannumeral0\XINT@infrac {#1}}% + \expandafter\xint_fpow\expandafter {\romannumeral0\XINT_infrac {#1}}% }% -\def\xint@fpow #1#2% +\def\xint_fpow #1#2% {% - \expandafter\XINT@fpow@fork\the\numexpr #2\relax\Z #1% + \expandafter\XINT_fpow_fork\the\numexpr #2\relax\Z #1% }% -\def\XINT@fpow@fork #1#2\Z +\def\XINT_fpow_fork #1#2\Z {% - \xint@UDzerominusfork - #1-\dummy \XINT@fpow@zero - 0#1\dummy \XINT@fpow@neg - 0-\dummy {\XINT@fpow@pos #1}% - \xint@UDkrof + \xint_UDzerominusfork + #1-\dummy \XINT_fpow_zero + 0#1\dummy \XINT_fpow_neg + 0-\dummy {\XINT_fpow_pos #1}% + \krof {#2}% }% -\def\XINT@fpow@zero #1#2#3#4% +\def\XINT_fpow_zero #1#2#3#4% {% \space 1/1[0]% }% -\def\XINT@fpow@pos #1#2#3#4#5% +\def\XINT_fpow_pos #1#2#3#4#5% {% - \expandafter\XINT@fpow@pos@A\expandafter + \expandafter\XINT_fpow_pos_A\expandafter {\the\numexpr #1#2*#3\expandafter}\expandafter {\romannumeral0\xintipow {#5}{#1#2}}% {\romannumeral0\xintipow {#4}{#1#2}}% }% -\def\XINT@fpow@neg #1#2#3#4% +\def\XINT_fpow_neg #1#2#3#4% {% - \expandafter\XINT@fpow@pos@A\expandafter + \expandafter\XINT_fpow_pos_A\expandafter {\the\numexpr -#1*#2\expandafter}\expandafter {\romannumeral0\xintipow {#3}{#1}}% {\romannumeral0\xintipow {#4}{#1}}% }% -\def\XINT@fpow@pos@A #1#2#3% +\def\XINT_fpow_pos_A #1#2#3% {% - \expandafter\XINT@fpow@pos@B\expandafter {#3}{#1}{#2}% + \expandafter\XINT_fpow_pos_B\expandafter {#3}{#1}{#2}% }% -\def\XINT@fpow@pos@B #1#2{\XINT@outfrac {#2}{#1}}% +\def\XINT_fpow_pos_B #1#2{\XINT_outfrac {#2}{#1}}% % \end{macrocode} % \subsection{\csh{xintPrd}, \csh{xintPrdExpr}} % \begin{macrocode} \def\xintPrd {\romannumeral0\xintprd }% \def\xintprd #1{\xintprdexpr #1\relax }% \def\xintPrdExpr {\romannumeral0\xintprdexpr }% -\def\xintprdexpr {\expandafter\XINT@fprdexpr \romannumeral-`0}% -\def\XINT@fprdexpr {\XINT@fprod@loop@a {1/1[0]}}% -\def\XINT@fprod@loop@a #1#2% +\def\xintprdexpr {\expandafter\XINT_fprdexpr \romannumeral-`0}% +\def\XINT_fprdexpr {\XINT_fprod_loop_a {1/1[0]}}% +\def\XINT_fprod_loop_a #1#2% {% - \expandafter\XINT@fprod@loop@b \romannumeral-`0#2\Z {#1}% + \expandafter\XINT_fprod_loop_b \romannumeral-`0#2\Z {#1}% }% -\def\XINT@fprod@loop@b #1% +\def\XINT_fprod_loop_b #1% {% - \xint@relax #1\XINT@fprod@finished\relax - \XINT@fprod@loop@c #1% + \xint_gob_til_relax #1\XINT_fprod_finished\relax + \XINT_fprod_loop_c #1% }% -\def\XINT@fprod@loop@c #1\Z #2% +\def\XINT_fprod_loop_c #1\Z #2% {% - \expandafter\XINT@fprod@loop@a\expandafter{\romannumeral0\xintmul {#1}{#2}}% + \expandafter\XINT_fprod_loop_a\expandafter{\romannumeral0\xintmul {#1}{#2}}% }% -\def\XINT@fprod@finished #1\Z #2{ #2}% +\def\XINT_fprod_finished #1\Z #2{ #2}% % \end{macrocode} % \subsection{\csh{xintDiv}} % \begin{macrocode} \def\xintDiv {\romannumeral0\xintdiv }% \def\xintdiv #1% {% - \expandafter\xint@fdiv\expandafter {\romannumeral0\XINT@infrac {#1}}% + \expandafter\xint_fdiv\expandafter {\romannumeral0\XINT_infrac {#1}}% }% -\def\xint@fdiv #1#2% - {\expandafter\XINT@fdiv@A\romannumeral0\XINT@infrac {#2}#1}% -\def\XINT@fdiv@A #1#2#3#4#5#6% +\def\xint_fdiv #1#2% + {\expandafter\XINT_fdiv_A\romannumeral0\XINT_infrac {#2}#1}% +\def\XINT_fdiv_A #1#2#3#4#5#6% {% - \expandafter\XINT@fdiv@B + \expandafter\XINT_fdiv_B \expandafter{\the\numexpr #4-#1\expandafter}% \expandafter{\romannumeral0\xintimul {#2}{#6}}% {\romannumeral0\xintimul {#3}{#5}}% }% -\def\XINT@fdiv@B #1#2#3% +\def\XINT_fdiv_B #1#2#3% {% - \expandafter\XINT@fdiv@C + \expandafter\XINT_fdiv_C \expandafter{#3}{#1}{#2}% }% -\def\XINT@fdiv@C #1#2{\XINT@outfrac {#2}{#1}}% +\def\XINT_fdiv_C #1#2{\XINT_outfrac {#2}{#1}}% % \end{macrocode} % \subsection{\csh{xintCmp}} % \begin{macrocode} \def\xintCmp {\romannumeral0\xintcmp }% \def\xintcmp #1% {% - \expandafter\xint@fcmp\expandafter {\romannumeral0\XINT@infrac {#1}}% + \expandafter\xint_fcmp\expandafter {\romannumeral0\XINT_infrac {#1}}% }% -\def\xint@fcmp #1#2{\expandafter\XINT@fcmp@A\romannumeral0\XINT@infrac {#2}#1}% -\def\XINT@fcmp@A #1#2#3#4% +\def\xint_fcmp #1#2{\expandafter\XINT_fcmp_A\romannumeral0\XINT_infrac {#2}#1}% +\def\XINT_fcmp_A #1#2#3#4% {% \ifnum #4 > #1 - \xint@afterfi {\XINT@fcmp@B {#1}}% + \xint_afterfi {\XINT_fcmp_B {#1}}% \else - \xint@afterfi {\XINT@fcmp@B {#4}}% + \xint_afterfi {\XINT_fcmp_B {#4}}% \fi {#1}{#4}{#2}{#3}% }% -\def\XINT@fcmp@B #1#2#3#4#5#6#7% +\def\XINT_fcmp_B #1#2#3#4#5#6#7% {% \xinticmp {\romannumeral0\xintimul {\xintDSH {\the\numexpr -#3+#1\relax}{#6}}{#5}}% @@ -10419,29 +10250,29 @@ first place. \def\xintMax {\romannumeral0\xintmax }% \def\xintmax #1% {% - \expandafter\xint@fmax\expandafter {\romannumeral0\XINT@infrac {#1}}% + \expandafter\xint_fmax\expandafter {\romannumeral0\XINT_infrac {#1}}% }% -\def\xint@fmax #1#2{\expandafter\XINT@outfrac - \romannumeral0\expandafter\XINT@fmax@A - \romannumeral0\XINT@infrac {#2}#1}% -\def\XINT@fmax@A #1#2#3#4#5#6% +\def\xint_fmax #1#2{\expandafter\XINT_outfrac + \romannumeral0\expandafter\XINT_fmax_A + \romannumeral0\XINT_infrac {#2}#1}% +\def\XINT_fmax_A #1#2#3#4#5#6% {% \ifnum #4 > #1 - \xint@afterfi {\XINT@fmax@B {#1}}% + \xint_afterfi {\XINT_fmax_B {#1}}% \else - \xint@afterfi {\XINT@fmax@B {#4}}% + \xint_afterfi {\XINT_fmax_B {#4}}% \fi {#1}{#4}{#2}{#3}{#5}{#6}{{#4}{#5}{#6}}{{#1}{#2}{#3}}% }% -\def\XINT@fmax@B #1#2#3#4#5#6#7% +\def\XINT_fmax_B #1#2#3#4#5#6#7% {% - \expandafter\XINT@fmax@C\expandafter + \expandafter\XINT_fmax_C\expandafter {\romannumeral0\xintimul {\xintDSH {\the\numexpr -#3+#1\relax}{#6}}{#5}}% {\romannumeral0\xintimul {#7}{\xintDSH {\the\numexpr -#2+#1\relax}{#4}}}% }% -\def\XINT@fmax@C #1#2% +\def\XINT_fmax_C #1#2% {% - \expandafter\XINT@max@fork #2\Z #1\Z + \expandafter\XINT_max_fork #2\Z #1\Z }% % \end{macrocode} % \subsection{\csh{xintMin}} @@ -10449,32 +10280,32 @@ first place. \def\xintMin {\romannumeral0\xintmin }% \def\xintmin #1% {% - \expandafter\xint@fmin\expandafter {\romannumeral0\XINT@infrac {#1}}% + \expandafter\xint_fmin\expandafter {\romannumeral0\XINT_infrac {#1}}% }% -\def\xint@fmin #1#2% +\def\xint_fmin #1#2% {% - \expandafter\XINT@outfrac - \romannumeral0\expandafter\XINT@fmin@A - \romannumeral0\XINT@infrac {#2}#1% + \expandafter\XINT_outfrac + \romannumeral0\expandafter\XINT_fmin_A + \romannumeral0\XINT_infrac {#2}#1% }% -\def\XINT@fmin@A #1#2#3#4#5#6% +\def\XINT_fmin_A #1#2#3#4#5#6% {% \ifnum #4 > #1 - \xint@afterfi {\XINT@fmin@B {#1}}% + \xint_afterfi {\XINT_fmin_B {#1}}% \else - \xint@afterfi {\XINT@fmin@B {#4}}% + \xint_afterfi {\XINT_fmin_B {#4}}% \fi {#1}{#4}{#2}{#3}{#5}{#6}{{#4}{#5}{#6}}{{#1}{#2}{#3}}% }% -\def\XINT@fmin@B #1#2#3#4#5#6#7% +\def\XINT_fmin_B #1#2#3#4#5#6#7% {% - \expandafter\XINT@fmin@C\expandafter + \expandafter\XINT_fmin_C\expandafter {\romannumeral0\xintimul {\xintDSH {\the\numexpr -#3+#1\relax}{#6}}{#5}}% {\romannumeral0\xintimul {#7}{\xintDSH {\the\numexpr -#2+#1\relax}{#4}}}% }% -\def\XINT@fmin@C #1#2% +\def\XINT_fmin_C #1#2% {% - \expandafter\XINT@min@fork #2\Z #1\Z + \expandafter\XINT_min_fork #2\Z #1\Z }% % \end{macrocode} % \subsection{\csh{xintAbs}} @@ -10482,13 +10313,13 @@ first place. \def\xintAbs {\romannumeral0\xintabs }% \def\xintabs #1% {% - \expandafter\xint@fabs\romannumeral0\XINT@infrac {#1}% + \expandafter\xint_fabs\romannumeral0\XINT_infrac {#1}% }% -\def\xint@fabs #1#2% +\def\xint_fabs #1#2% {% - \expandafter\XINT@outfrac\expandafter + \expandafter\XINT_outfrac\expandafter {\the\numexpr #1\expandafter}\expandafter - {\romannumeral0\XINT@abs #2}% + {\romannumeral0\XINT_abs #2}% }% % \end{macrocode} % \subsection{\csh{xintOpp}} @@ -10496,13 +10327,13 @@ first place. \def\xintOpp {\romannumeral0\xintopp }% \def\xintopp #1% {% - \expandafter\xint@fopp\romannumeral0\XINT@infrac {#1}% + \expandafter\xint_fopp\romannumeral0\XINT_infrac {#1}% }% -\def\xint@fopp #1#2% +\def\xint_fopp #1#2% {% - \expandafter\XINT@outfrac\expandafter + \expandafter\XINT_outfrac\expandafter {\the\numexpr #1\expandafter}\expandafter - {\romannumeral0\XINT@opp #2}% + {\romannumeral0\XINT_opp #2}% }% % \end{macrocode} % \subsection{\csh{xintSgn}} @@ -10510,20 +10341,20 @@ first place. \def\xintSgn {\romannumeral0\xintsgn }% \def\xintsgn #1% {% - \expandafter\xint@fsgn\romannumeral0\XINT@infrac {#1}% + \expandafter\xint_fsgn\romannumeral0\XINT_infrac {#1}% }% -\def\xint@fsgn #1#2#3{\xintisgn {#2}}% +\def\xint_fsgn #1#2#3{\xintisgn {#2}}% % \end{macrocode} % \subsection{\csh{xintGeq}} % \begin{macrocode} \def\xintGeq {\romannumeral0\xintgeq }% \def\xintgeq #1% {% - \expandafter\xint@xgeq\expandafter{\romannumeral0\xintnum {#1}}% + \expandafter\xint_xgeq\expandafter{\romannumeral0\xintnum {#1}}% }% -\def\xint@xgeq #1#2% +\def\xint_xgeq #1#2% {% - \expandafter\XINT@geq@fork\romannumeral0\xintnum {#2}\Z #1\Z + \expandafter\XINT_geq_fork\romannumeral0\xintnum {#2}\Z #1\Z }% % \end{macrocode} % \subsection{\csh{xintDivision},~\csh{xintQuo},~\csh{xintRem}} @@ -10531,17 +10362,17 @@ first place. \def\xintDivision {\romannumeral0\xintdivision }% \def\xintdivision #1% {% - \expandafter\xint@xdivision\expandafter{\romannumeral0\xintnum {#1}}% + \expandafter\xint_xdivision\expandafter{\romannumeral0\xintnum {#1}}% }% -\def\xint@xdivision #1#2% +\def\xint_xdivision #1#2% {% - \expandafter\XINT@div@fork\romannumeral0\xintnum {#2}\Z #1\Z + \expandafter\XINT_div_fork\romannumeral0\xintnum {#2}\Z #1\Z }% \def\xintQuo {\romannumeral0\xintquo }% \def\xintRem {\romannumeral0\xintrem }% -\def\xintquo {\expandafter\xint@firstoftwo@andstop +\def\xintquo {\expandafter\xint_firstoftwo_andstop \romannumeral0\xintdivision }% -\def\xintrem {\expandafter\xint@secondoftwo@andstop +\def\xintrem {\expandafter\xint_secondoftwo_andstop \romannumeral0\xintdivision }% % \end{macrocode} % \subsection{\csh{xintFDg},~\csh{xintLDg},~\csh{xintMON},~\csh{xint\-MMON},~\csh{xintOdd}} @@ -10549,41 +10380,41 @@ first place. \def\xintFDg {\romannumeral0\xintfdg }% \def\xintfdg #1% {% - \expandafter\XINT@fdg\romannumeral0\xintnum {#1}\W\Z + \expandafter\XINT_fdg\romannumeral0\xintnum {#1}\W\Z }% \def\xintLDg {\romannumeral0\xintldg }% \def\xintldg #1% {% - \expandafter\XINT@ldg\expandafter{\romannumeral0\xintnum {#1}}% + \expandafter\XINT_ldg\expandafter{\romannumeral0\xintnum {#1}}% }% \def\xintMON {\romannumeral0\xintmon }% \def\xintmon #1% {% \ifodd\xintLDg {#1} - \xint@afterfi{ -1}% + \xint_afterfi{ -1}% \else - \xint@afterfi{ 1}% + \xint_afterfi{ 1}% \fi }% \def\xintMMON {\romannumeral0\xintmmon }% \def\xintmmon #1% {% \ifodd\xintLDg {#1} - \xint@afterfi{ 1}% + \xint_afterfi{ 1}% \else - \xint@afterfi{ -1}% + \xint_afterfi{ -1}% \fi }% \def\xintOdd {\romannumeral0\xintodd }% \def\xintodd #1% {% \ifodd\xintLDg{#1} - \xint@afterfi{ 1}% + \xint_afterfi{ 1}% \else - \xint@afterfi{ 0}% + \xint_afterfi{ 0}% \fi }% -\XINT@frac@restorecatcodes@endinput% +\XINT_frac_restorecatcodes_endinput% % \end{macrocode} %\catcode`\<=0 \catcode`\>=11 \catcode`\*=11 \catcode`\/=11 %\let\relax @@ -10689,8 +10520,8 @@ first place. % % Perhaps catcodes have changed after the loading of \xintname and % \xintfracname and prior to the current loading of \xintseriesname, -% so we can not employ the |\XINT@restorecatcodes@endinput| in this style -% file. But there is no problem using |\XINT@setcatcodes|. +% so we can not employ the |\XINT_restorecatcodes_endinput| in this style +% file. But there is no problem using |\XINT_setcatcodes|. % % \begin{macrocode} \begingroup\catcode61\catcode48\catcode32=10\relax% @@ -10698,11 +10529,11 @@ first place. \endlinechar=13 % \catcode123=1 % { \catcode125=2 % } - \catcode64=11 % @ + \catcode95=11 % _ \def\x {% \endgroup - \edef\XINT@series@restorecatcodes@endinput + \edef\XINT_series_restorecatcodes_endinput {% \catcode93=\the\catcode93 % ] \catcode91=\the\catcode91 % [ @@ -10719,7 +10550,7 @@ first place. \catcode45=\the\catcode45 % - \catcode44=\the\catcode44 % , \catcode35=\the\catcode35 % # - \catcode64=\the\catcode64 % @ + \catcode95=\the\catcode95 % _ \catcode125=\the\catcode125 % } \catcode123=\the\catcode123 % { \endlinechar=\the\endlinechar @@ -10728,7 +10559,7 @@ first place. \catcode61=\the\catcode61\relax % = \noexpand\endinput }% - \XINT@setcatcodes + \XINT_setcatcodes \catcode91=12 % [ \catcode93=12 % ] }% @@ -10737,6 +10568,7 @@ first place. % \subsection{Package identification} % \begin{macrocode} \begingroup + \catcode64=11 % @ \catcode58=12 % : \expandafter\ifx\csname ProvidesPackage\endcsname\relax \def\x#1#2#3[#4]{\endgroup @@ -10756,167 +10588,159 @@ first place. \fi \expandafter\x\csname ver@xintseries.sty\endcsname \ProvidesPackage{xintseries}% - [2013/05/09 v1.06a Expandable partial sums with xint package (jfB)]% + [2013/05/14 v1.06b Expandable partial sums with xint package (jfB)]% % \end{macrocode} % \subsection{\csh{xintSeries}} -% \begin{verbatim} +% \lverb|& % Modified in 1.06 to give the indices first to a \numexpr rather than expanding -% twice. I just use \the\numexpr and maintain the previous code after that. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% twice. I just use \the\numexpr and maintain the previous code after that.| % \begin{macrocode} \def\xintSeries {\romannumeral0\xintseries }% \def\xintseries #1#2% {% - \expandafter\XINT@series@i\expandafter {\the\numexpr #2}{#1}% + \expandafter\XINT_series_i\expandafter {\the\numexpr #2}{#1}% }% -\def\XINT@series@i #1#2% +\def\XINT_series_i #1#2% {% - \expandafter\XINT@series@ii\expandafter {\the\numexpr #2}{#1}% + \expandafter\XINT_series_ii\expandafter {\the\numexpr #2}{#1}% }% -\def\XINT@series@ii #1#2#3% +\def\XINT_series_ii #1#2#3% {% \ifnum #2<#1 - \xint@afterfi { 0/1[0]}% + \xint_afterfi { 0/1[0]}% \else - \xint@afterfi {\XINT@series@loop {#1}{0}{#2}{#3}}% + \xint_afterfi {\XINT_series_loop {#1}{0}{#2}{#3}}% \fi }% -\def\XINT@series@loop #1#2#3#4% +\def\XINT_series_loop #1#2#3#4% {% - \ifnum #3>#1 \else \XINT@series@exit \fi - \expandafter\XINT@series@loop\expandafter + \ifnum #3>#1 \else \XINT_series_exit \fi + \expandafter\XINT_series_loop\expandafter {\the\numexpr #1+1\expandafter }\expandafter {\romannumeral0\xintadd {#2}{#4{#1}}}% {#3}{#4}% }% -\def\XINT@series@exit \fi #1#2#3#4#5#6#7#8% +\def\XINT_series_exit \fi #1#2#3#4#5#6#7#8% {% - \fi\xint@gobble@ii #6% + \fi\xint_gobble_ii #6% }% % \end{macrocode} % \subsection{\csh{xintiSeries}} -% \begin{verbatim} +% \lverb|& % Modified in 1.06 to give the indices first to a \numexpr rather than expanding -% twice. I just use \the\numexpr and maintain the previous code after that. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% twice. I just use \the\numexpr and maintain the previous code after that.| % \begin{macrocode} \def\xintiSeries {\romannumeral0\xintiseries }% \def\xintiseries #1#2% {% - \expandafter\XINT@iseries@i\expandafter {\the\numexpr #2}{#1}% + \expandafter\XINT_iseries_i\expandafter {\the\numexpr #2}{#1}% }% -\def\XINT@iseries@i #1#2% +\def\XINT_iseries_i #1#2% {% - \expandafter\XINT@iseries@ii\expandafter {\the\numexpr #2}{#1}% + \expandafter\XINT_iseries_ii\expandafter {\the\numexpr #2}{#1}% }% -\def\XINT@iseries@ii #1#2#3% +\def\XINT_iseries_ii #1#2#3% {% \ifnum #2<#1 - \xint@afterfi { 0}% + \xint_afterfi { 0}% \else - \xint@afterfi {\XINT@iseries@loop {#1}{0}{#2}{#3}}% + \xint_afterfi {\XINT_iseries_loop {#1}{0}{#2}{#3}}% \fi }% -\def\XINT@iseries@loop #1#2#3#4% +\def\XINT_iseries_loop #1#2#3#4% {% - \ifnum #3>#1 \else \XINT@iseries@exit \fi - \expandafter\XINT@iseries@loop\expandafter + \ifnum #3>#1 \else \XINT_iseries_exit \fi + \expandafter\XINT_iseries_loop\expandafter {\the\numexpr #1+1\expandafter }\expandafter {\romannumeral0\xintiadd {#2}{#4{#1}}}% {#3}{#4}% }% -\def\XINT@iseries@exit \fi #1#2#3#4#5#6#7#8% +\def\XINT_iseries_exit \fi #1#2#3#4#5#6#7#8% {% - \fi\xint@gobble@ii #6% + \fi\xint_gobble_ii #6% }% % \end{macrocode} % \subsection{\csh{xintPowerSeries}} -% \begin{verbatim} +% \lverb|& % The 1.03 version was very lame and created a build-up of denominators. % The Horner scheme for polynomial evaluation is used in 1.04, this % cures the denominator problem and drastically improves the efficiency % of the macro. % Modified in 1.06 to give the indices first to a \numexpr rather than expanding -% twice. I just use \the\numexpr and maintain the previous code after that. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% twice. I just use \the\numexpr and maintain the previous code after that.| % \begin{macrocode} \def\xintPowerSeries {\romannumeral0\xintpowerseries }% \def\xintpowerseries #1#2% {% - \expandafter\XINT@powseries@i\expandafter {\the\numexpr #2}{#1}% + \expandafter\XINT_powseries_i\expandafter {\the\numexpr #2}{#1}% }% -\def\XINT@powseries@i #1#2% +\def\XINT_powseries_i #1#2% {% - \expandafter\XINT@powseries@ii\expandafter {\the\numexpr #2}{#1}% + \expandafter\XINT_powseries_ii\expandafter {\the\numexpr #2}{#1}% }% -\def\XINT@powseries@ii #1#2#3#4% +\def\XINT_powseries_ii #1#2#3#4% {% \ifnum #2<#1 - \xint@afterfi { 0/1[0]}% + \xint_afterfi { 0/1[0]}% \else - \xint@afterfi - {\XINT@powseries@loop@i {#3{#2}}{#1}{#2}{#3}{#4}}% + \xint_afterfi + {\XINT_powseries_loop_i {#3{#2}}{#1}{#2}{#3}{#4}}% \fi }% -\def\XINT@powseries@loop@i #1#2#3#4#5% +\def\XINT_powseries_loop_i #1#2#3#4#5% {% - \ifnum #3>#2 \else\XINT@powseries@exit@i\fi - \expandafter\XINT@powseries@loop@ii\expandafter + \ifnum #3>#2 \else\XINT_powseries_exit_i\fi + \expandafter\XINT_powseries_loop_ii\expandafter {\the\numexpr #3-1\expandafter}\expandafter {\romannumeral0\xintmul {#1}{#5}}{#2}{#4}{#5}% }% -\def\XINT@powseries@loop@ii #1#2#3#4% +\def\XINT_powseries_loop_ii #1#2#3#4% {% - \expandafter\XINT@powseries@loop@i\expandafter + \expandafter\XINT_powseries_loop_i\expandafter {\romannumeral0\xintadd {#4{#1}}{#2}}{#3}{#1}{#4}% }% -\def\XINT@powseries@exit@i\fi #1#2#3#4#5#6#7#8#9% +\def\XINT_powseries_exit_i\fi #1#2#3#4#5#6#7#8#9% {% - \fi \XINT@powseries@exit@ii #6{#7}% + \fi \XINT_powseries_exit_ii #6{#7}% }% -\def\XINT@powseries@exit@ii #1#2#3#4#5#6% +\def\XINT_powseries_exit_ii #1#2#3#4#5#6% {% \xintmul{\xintPow {#5}{#6}}{#4}% }% % \end{macrocode} % \subsection{\csh{xintPowerSeriesX}} -% \begin{verbatim} +% \lverb|& % Same as \xintPowerSeries except for the initial expansion of the x parameter. % Modified in 1.06 to give the indices first to a \numexpr rather than expanding -% twice. I just use \the\numexpr and maintain the previous code after that. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% twice. I just use \the\numexpr and maintain the previous code after that.| % \begin{macrocode} \def\xintPowerSeriesX {\romannumeral0\xintpowerseriesx }% \def\xintpowerseriesx #1#2% {% - \expandafter\XINT@powseriesx@i\expandafter {\the\numexpr #2}{#1}% + \expandafter\XINT_powseriesx_i\expandafter {\the\numexpr #2}{#1}% }% -\def\XINT@powseriesx@i #1#2% +\def\XINT_powseriesx_i #1#2% {% - \expandafter\XINT@powseriesx@ii\expandafter {\the\numexpr #2}{#1}% + \expandafter\XINT_powseriesx_ii\expandafter {\the\numexpr #2}{#1}% }% -\def\XINT@powseriesx@ii #1#2#3#4% +\def\XINT_powseriesx_ii #1#2#3#4% {% \ifnum #2<#1 - \xint@afterfi { 0/1[0]}% + \xint_afterfi { 0/1[0]}% \else - \xint@afterfi - {\expandafter\XINT@powseriesx@pre\expandafter + \xint_afterfi + {\expandafter\XINT_powseriesx_pre\expandafter {\romannumeral-`0#4}{#1}{#2}{#3}% }% \fi }% -\def\XINT@powseriesx@pre #1#2#3#4% +\def\XINT_powseriesx_pre #1#2#3#4% {% - \XINT@powseries@loop@i {#4{#3}}{#2}{#3}{#4}{#1}% + \XINT_powseries_loop_i {#4{#3}}{#2}{#3}{#4}{#1}% }% % \end{macrocode} % \subsection{\csh{xintRationalSeries}} -% \begin{verbatim} +% \lverb|& % This computes F(a)+...+F(b) on the basis of the value of F(a) and the % ratios F(n)/F(n-1). As in \xintPowerSeries we use an iterative scheme which % has the great advantage to avoid denominator build-up. This makes exact @@ -10924,183 +10748,175 @@ first place. % inaccessible to \xintSeries. % #1=a, #2=b, #3=F(a), #4=ratio function % Modified in 1.06 to give the indices first to a \numexpr rather than expanding -% twice. I just use \the\numexpr and maintain the previous code after that. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% twice. I just use \the\numexpr and maintain the previous code after that.| % \begin{macrocode} \def\xintRationalSeries {\romannumeral0\xintratseries }% \def\xintratseries #1#2% {% - \expandafter\XINT@ratseries@i\expandafter {\the\numexpr #2}{#1}% + \expandafter\XINT_ratseries_i\expandafter {\the\numexpr #2}{#1}% }% -\def\XINT@ratseries@i #1#2% +\def\XINT_ratseries_i #1#2% {% - \expandafter\XINT@ratseries@ii\expandafter {\the\numexpr #2}{#1}% + \expandafter\XINT_ratseries_ii\expandafter {\the\numexpr #2}{#1}% }% -\def\XINT@ratseries@ii #1#2#3#4% +\def\XINT_ratseries_ii #1#2#3#4% {% \ifnum #2<#1 - \xint@afterfi { 0/1[0]}% + \xint_afterfi { 0/1[0]}% \else - \xint@afterfi - {\XINT@ratseries@loop {#2}{1}{#1}{#4}{#3}}% + \xint_afterfi + {\XINT_ratseries_loop {#2}{1}{#1}{#4}{#3}}% \fi }% -\def\XINT@ratseries@loop #1#2#3#4% +\def\XINT_ratseries_loop #1#2#3#4% {% - \ifnum #1>#3 \else\XINT@ratseries@exit@i\fi - \expandafter\XINT@ratseries@loop\expandafter + \ifnum #1>#3 \else\XINT_ratseries_exit_i\fi + \expandafter\XINT_ratseries_loop\expandafter {\the\numexpr #1-1\expandafter}\expandafter {\romannumeral0\xintadd {1}{\xintMul {#2}{#4{#1}}}}{#3}{#4}% }% -\def\XINT@ratseries@exit@i\fi #1#2#3#4#5#6#7#8% +\def\XINT_ratseries_exit_i\fi #1#2#3#4#5#6#7#8% {% - \fi \XINT@ratseries@exit@ii #6% + \fi \XINT_ratseries_exit_ii #6% }% -\def\XINT@ratseries@exit@ii #1#2#3#4#5% +\def\XINT_ratseries_exit_ii #1#2#3#4#5% {% - \XINT@ratseries@exit@iii #5% + \XINT_ratseries_exit_iii #5% }% -\def\XINT@ratseries@exit@iii #1#2#3#4% +\def\XINT_ratseries_exit_iii #1#2#3#4% {% \xintmul{#2}{#4}% }% % \end{macrocode} % \subsection{\csh{xintRationalSeriesX}} -% \begin{verbatim} -% a,b,initial,ratiofunction,x +% \lverb|& +% a,b,initial,ratiofunction,x$\ % This computes F(a,x)+...+F(b,x) on the basis of the value of F(a,x) and the % ratios F(n,x)/F(n-1,x). The argument x is first expanded and it is the value % resulting from this which is used then throughout. The initial term F(a,x) % must be defined as one-parameter macro which will be given x. % Modified in 1.06 to give the indices first to a \numexpr rather than expanding -% twice. I just use \the\numexpr and maintain the previous code after that. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% twice. I just use \the\numexpr and maintain the previous code after that.| % \begin{macrocode} \def\xintRationalSeriesX {\romannumeral0\xintratseriesx }% \def\xintratseriesx #1#2% {% - \expandafter\XINT@ratseriesx@i\expandafter {\the\numexpr #2}{#1}% + \expandafter\XINT_ratseriesx_i\expandafter {\the\numexpr #2}{#1}% }% -\def\XINT@ratseriesx@i #1#2% +\def\XINT_ratseriesx_i #1#2% {% - \expandafter\XINT@ratseriesx@ii\expandafter {\the\numexpr #2}{#1}% + \expandafter\XINT_ratseriesx_ii\expandafter {\the\numexpr #2}{#1}% }% -\def\XINT@ratseriesx@ii #1#2#3#4#5% +\def\XINT_ratseriesx_ii #1#2#3#4#5% {% \ifnum #2<#1 - \xint@afterfi { 0/1[0]}% + \xint_afterfi { 0/1[0]}% \else - \xint@afterfi - {\expandafter\XINT@ratseriesx@pre\expandafter + \xint_afterfi + {\expandafter\XINT_ratseriesx_pre\expandafter {\romannumeral-`0#5}{#2}{#1}{#4}{#3}% }% \fi }% -\def\XINT@ratseriesx@pre #1#2#3#4#5% +\def\XINT_ratseriesx_pre #1#2#3#4#5% {% - \XINT@ratseries@loop {#2}{1}{#3}{#4{#1}}{#5{#1}}% + \XINT_ratseries_loop {#2}{1}{#3}{#4{#1}}{#5{#1}}% }% % \end{macrocode} % \subsection{\csh{xintFxPtPowerSeries}} -% \begin{verbatim} +% \lverb|& % I am not two happy with this piece of code. Will make it more economical % another day. % Modified in 1.06 to give the indices first to a \numexpr rather than expanding -% twice. I just use \the\numexpr and maintain the previous code after that. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% twice. I just use \the\numexpr and maintain the previous code after that.| % \begin{macrocode} \def\xintFxPtPowerSeries {\romannumeral0\xintfxptpowerseries }% \def\xintfxptpowerseries #1#2% {% - \expandafter\XINT@fppowseries@i\expandafter {\the\numexpr #2}{#1}% + \expandafter\XINT_fppowseries_i\expandafter {\the\numexpr #2}{#1}% }% -\def\XINT@fppowseries@i #1#2% +\def\XINT_fppowseries_i #1#2% {% - \expandafter\XINT@fppowseries@ii\expandafter {\the\numexpr #2}{#1}% + \expandafter\XINT_fppowseries_ii\expandafter {\the\numexpr #2}{#1}% }% -\def\XINT@fppowseries@ii #1#2#3#4#5% +\def\XINT_fppowseries_ii #1#2#3#4#5% {% \ifnum #2<#1 - \xint@afterfi { 0}% + \xint_afterfi { 0}% \else - \xint@afterfi - {\expandafter\XINT@fppowseries@loop@pre\expandafter + \xint_afterfi + {\expandafter\XINT_fppowseries_loop_pre\expandafter {\romannumeral0\xinttrunc {#5}{\xintPow {#4}{#1}}}% {#1}{#4}{#2}{#3}{#5}% }% \fi }% -\def\XINT@fppowseries@loop@pre #1#2#3#4#5#6% +\def\XINT_fppowseries_loop_pre #1#2#3#4#5#6% {% - \ifnum #4>#2 \else\XINT@fppowseries@dont@i \fi - \expandafter\XINT@fppowseries@loop@i\expandafter + \ifnum #4>#2 \else\XINT_fppowseries_dont_i \fi + \expandafter\XINT_fppowseries_loop_i\expandafter {\the\numexpr #2+1\expandafter}\expandafter {\romannumeral0\xintitrunc {#6}{\xintMul {#5{#2}}{#1}}}% {#1}{#3}{#4}{#5}{#6}% }% -\def\XINT@fppowseries@dont@i \fi\expandafter\XINT@fppowseries@loop@i - {\fi \expandafter\XINT@fppowseries@dont@ii }% -\def\XINT@fppowseries@dont@ii #1#2#3#4#5#6#7{\xinttrunc {#7}{#2[-#7]}}% -\def\XINT@fppowseries@loop@i #1#2#3#4#5#6#7% +\def\XINT_fppowseries_dont_i \fi\expandafter\XINT_fppowseries_loop_i + {\fi \expandafter\XINT_fppowseries_dont_ii }% +\def\XINT_fppowseries_dont_ii #1#2#3#4#5#6#7{\xinttrunc {#7}{#2[-#7]}}% +\def\XINT_fppowseries_loop_i #1#2#3#4#5#6#7% {% - \ifnum #5>#1 \else \XINT@fppowseries@exit@i \fi - \expandafter\XINT@fppowseries@loop@ii\expandafter + \ifnum #5>#1 \else \XINT_fppowseries_exit_i \fi + \expandafter\XINT_fppowseries_loop_ii\expandafter {\romannumeral0\xinttrunc {#7}{\xintMul {#3}{#4}}}% {#1}{#4}{#2}{#5}{#6}{#7}% }% -\def\XINT@fppowseries@loop@ii #1#2#3#4#5#6#7% +\def\XINT_fppowseries_loop_ii #1#2#3#4#5#6#7% {% - \expandafter\XINT@fppowseries@loop@i\expandafter + \expandafter\XINT_fppowseries_loop_i\expandafter {\the\numexpr #2+1\expandafter}\expandafter {\romannumeral0\xintiadd {#4}{\xintiTrunc {#7}{\xintMul {#6{#2}}{#1}}}}% {#1}{#3}{#5}{#6}{#7}% }% -\def\XINT@fppowseries@exit@i\fi\expandafter\XINT@fppowseries@loop@ii - {\fi \expandafter\XINT@fppowseries@exit@ii }% -\def\XINT@fppowseries@exit@ii #1#2#3#4#5#6#7% +\def\XINT_fppowseries_exit_i\fi\expandafter\XINT_fppowseries_loop_ii + {\fi \expandafter\XINT_fppowseries_exit_ii }% +\def\XINT_fppowseries_exit_ii #1#2#3#4#5#6#7% {% \xinttrunc {#7} {\xintiAdd {#4}{\xintiTrunc {#7}{\xintMul {#6{#2}}{#1}}}[-#7]}% }% % \end{macrocode} % \subsection{\csh{xintFxPtPowerSeriesX}} -% \begin{verbatim} -% a,b,coeff,x,D +% \lverb|& +% a,b,coeff,x,D$\ % Modified in 1.06 to give the indices first to a \numexpr rather than expanding -% twice. I just use \the\numexpr and maintain the previous code after that. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% twice. I just use \the\numexpr and maintain the previous code after that.| % \begin{macrocode} \def\xintFxPtPowerSeriesX {\romannumeral0\xintfxptpowerseriesx }% \def\xintfxptpowerseriesx #1#2% {% - \expandafter\XINT@fppowseriesx@i\expandafter {\the\numexpr #2}{#1}% + \expandafter\XINT_fppowseriesx_i\expandafter {\the\numexpr #2}{#1}% }% -\def\XINT@fppowseriesx@i #1#2% +\def\XINT_fppowseriesx_i #1#2% {% - \expandafter\XINT@fppowseriesx@ii\expandafter {\the\numexpr #2}{#1}% + \expandafter\XINT_fppowseriesx_ii\expandafter {\the\numexpr #2}{#1}% }% -\def\XINT@fppowseriesx@ii #1#2#3#4#5% +\def\XINT_fppowseriesx_ii #1#2#3#4#5% {% \ifnum #2<#1 - \xint@afterfi { 0}% + \xint_afterfi { 0}% \else - \xint@afterfi - {\expandafter \XINT@fppowseriesx@pre \expandafter + \xint_afterfi + {\expandafter \XINT_fppowseriesx_pre \expandafter {\romannumeral-`0#4}{#1}{#2}{#3}{#5}% }% \fi }% -\def\XINT@fppowseriesx@pre #1#2#3#4#5% +\def\XINT_fppowseriesx_pre #1#2#3#4#5% {% - \expandafter\XINT@fppowseries@loop@pre\expandafter + \expandafter\XINT_fppowseries_loop_pre\expandafter {\romannumeral0\xinttrunc {#5}{\xintPow {#1}{#2}}}% {#2}{#1}{#3}{#4}{#5}% }% -\XINT@series@restorecatcodes@endinput% +\XINT_series_restorecatcodes_endinput% % \end{macrocode} %\catcode`\<=0 \catcode`\>=11 \catcode`\*=11 \catcode`\/=11 %\let\relax @@ -11206,8 +11022,8 @@ first place. % % Perhaps catcodes have changed after the loading of \xintname and % \xintfracname and prior to the current loading of \xintcfracname, -% so we can not employ the |\XINT@restorecatcodes@endinput| in this style -% file. But there is no problem using |\XINT@setcatcodes|. +% so we can not employ the |\XINT_restorecatcodes_endinput| in this style +% file. But there is no problem using |\XINT_setcatcodes|. % % \begin{macrocode} \begingroup\catcode61\catcode48\catcode32=10\relax% @@ -11215,11 +11031,11 @@ first place. \endlinechar=13 % \catcode123=1 % { \catcode125=2 % } - \catcode64=11 % @ + \catcode95=11 % _ \def\x {% \endgroup - \edef\XINT@cfrac@restorecatcodes@endinput + \edef\XINT_cfrac_restorecatcodes_endinput {% \catcode93=\the\catcode93 % ] \catcode91=\the\catcode91 % [ @@ -11236,7 +11052,7 @@ first place. \catcode45=\the\catcode45 % - \catcode44=\the\catcode44 % , \catcode35=\the\catcode35 % # - \catcode64=\the\catcode64 % @ + \catcode95=\the\catcode95 % _ \catcode125=\the\catcode125 % } \catcode123=\the\catcode123 % { \endlinechar=\the\endlinechar @@ -11245,7 +11061,7 @@ first place. \catcode61=\the\catcode61\relax % = \noexpand\endinput }% - \XINT@setcatcodes + \XINT_setcatcodes \catcode91=12 % [ \catcode93=12 % ] }% @@ -11254,6 +11070,7 @@ first place. % \subsection{Package identification} % \begin{macrocode} \begingroup + \catcode64=11 % @ \catcode58=12 % : \expandafter\ifx\csname ProvidesPackage\endcsname\relax \def\x#1#2#3[#4]{\endgroup @@ -11273,240 +11090,241 @@ first place. \fi \expandafter\x\csname ver@xintcfrac.sty\endcsname \ProvidesPackage{xintcfrac}% - [2013/05/09 v1.06a Expandable continued fractions with xint package (jfB)]% + [2013/05/14 v1.06b Expandable continued fractions with xint package (jfB)]% % \end{macrocode} % \subsection{\csh{xintCFrac}} % \begin{macrocode} \def\xintCFrac {\romannumeral0\xintcfrac }% \def\xintcfrac #1% {% - \XINT@cfrac@opt@a #1\Z + \XINT_cfrac_opt_a #1\Z }% -\def\XINT@cfrac@opt@a #1% +\def\XINT_cfrac_opt_a #1% {% - \ifx#1[\XINT@cfrac@opt@b\fi \XINT@cfrac@noopt #1% + \ifx#1[\XINT_cfrac_opt_b\fi \XINT_cfrac_noopt #1% }% -\def\XINT@cfrac@noopt #1\Z +\def\XINT_cfrac_noopt #1\Z {% - \expandafter\XINT@cfrac@A\romannumeral0\xintraw {#1}\Z + \expandafter\XINT_cfrac_A\romannumeral0\xintraw {#1}\Z \relax\relax }% -\def\XINT@cfrac@opt@b\fi\XINT@cfrac@noopt [\Z #1]% +\def\XINT_cfrac_opt_b\fi\XINT_cfrac_noopt [\Z #1]% {% - \fi\csname XINT@cfrac@opt#1\endcsname + \fi\csname XINT_cfrac_opt#1\endcsname }% -\def\XINT@cfrac@optl #1% +\def\XINT_cfrac_optl #1% {% - \expandafter\XINT@cfrac@A\romannumeral0\xintraw {#1}\Z + \expandafter\XINT_cfrac_A\romannumeral0\xintraw {#1}\Z \relax\hfill }% -\def\XINT@cfrac@optc #1% +\def\XINT_cfrac_optc #1% {% - \expandafter\XINT@cfrac@A\romannumeral0\xintraw {#1}\Z + \expandafter\XINT_cfrac_A\romannumeral0\xintraw {#1}\Z \relax\relax }% -\def\XINT@cfrac@optr #1% +\def\XINT_cfrac_optr #1% {% - \expandafter\XINT@cfrac@A\romannumeral0\xintraw {#1}\Z + \expandafter\XINT_cfrac_A\romannumeral0\xintraw {#1}\Z \hfill\relax }% -\def\XINT@cfrac@A #1/#2\Z +\def\XINT_cfrac_A #1/#2\Z {% - \expandafter\XINT@cfrac@B\romannumeral0\xintidivision {#1}{#2}{#2}% + \expandafter\XINT_cfrac_B\romannumeral0\xintidivision {#1}{#2}{#2}% }% -\def\XINT@cfrac@B #1#2% +\def\XINT_cfrac_B #1#2% {% - \XINT@cfrac@C #2\Z {#1}% + \XINT_cfrac_C #2\Z {#1}% }% -\def\XINT@cfrac@C #1% +\def\XINT_cfrac_C #1% {% - \xint@zero #1\XINT@cfrac@integer 0\XINT@cfrac@D #1% + \xint_gob_til_zero #1\XINT_cfrac_integer 0\XINT_cfrac_D #1% }% -\def\XINT@cfrac@integer 0\XINT@cfrac@D 0#1\Z #2#3#4#5{ #2}% -\def\XINT@cfrac@D #1\Z #2#3{\XINT@cfrac@loop@a {#1}{#3}{#1}{{#2}}}% -\def\XINT@cfrac@loop@a +\def\XINT_cfrac_integer 0\XINT_cfrac_D 0#1\Z #2#3#4#5{ #2}% +\def\XINT_cfrac_D #1\Z #2#3{\XINT_cfrac_loop_a {#1}{#3}{#1}{{#2}}}% +\def\XINT_cfrac_loop_a {% - \expandafter\XINT@cfrac@loop@d\romannumeral0\XINT@div@prepare + \expandafter\XINT_cfrac_loop_d\romannumeral0\XINT_div_prepare }% -\def\XINT@cfrac@loop@d #1#2% +\def\XINT_cfrac_loop_d #1#2% {% - \XINT@cfrac@loop@e #2.{#1}% + \XINT_cfrac_loop_e #2.{#1}% }% -\def\XINT@cfrac@loop@e #1% +\def\XINT_cfrac_loop_e #1% {% - \xint@zero #1\xint@cfrac@loop@exit0\XINT@cfrac@loop@f #1% + \xint_gob_til_zero #1\xint_cfrac_loop_exit0\XINT_cfrac_loop_f #1% }% -\def\XINT@cfrac@loop@f #1.#2#3#4% +\def\XINT_cfrac_loop_f #1.#2#3#4% {% - \XINT@cfrac@loop@a {#1}{#3}{#1}{{#2}#4}% + \XINT_cfrac_loop_a {#1}{#3}{#1}{{#2}#4}% }% -\def\xint@cfrac@loop@exit0\XINT@cfrac@loop@f #1.#2#3#4#5#6% - {\XINT@cfrac@T #5#6{#2}#4\Z }% -\def\XINT@cfrac@T #1#2#3#4% +\def\xint_cfrac_loop_exit0\XINT_cfrac_loop_f #1.#2#3#4#5#6% + {\XINT_cfrac_T #5#6{#2}#4\Z }% +\def\XINT_cfrac_T #1#2#3#4% {% - \xint@z #4\XINT@cfrac@end\Z\XINT@cfrac@T #1#2{#4+\cfrac{#11#2}{#3}}% + \xint_gob_til_z #4\XINT_cfrac_end\Z\XINT_cfrac_T #1#2{#4+\cfrac{#11#2}{#3}}% }% -\def\XINT@cfrac@end\Z\XINT@cfrac@T #1#2#3% +\def\XINT_cfrac_end\Z\XINT_cfrac_T #1#2#3% {% - \XINT@cfrac@@end #3% + \XINT_cfrac__end #3% }% -\def\XINT@cfrac@@end \Z+\cfrac#1#2{ #2}% +\def\XINT_cfrac__end \Z+\cfrac#1#2{ #2}% % \end{macrocode} % \subsection{\csh{xintGCFrac}} % \begin{macrocode} \def\xintGCFrac {\romannumeral0\xintgcfrac }% \def\xintgcfrac #1% {% - \XINT@gcfrac@opt@a #1\Z + \XINT_gcfrac_opt_a #1\Z }% -\def\XINT@gcfrac@opt@a #1% +\def\XINT_gcfrac_opt_a #1% {% - \ifx#1[\XINT@gcfrac@opt@b\fi \XINT@gcfrac@noopt #1% + \ifx#1[\XINT_gcfrac_opt_b\fi \XINT_gcfrac_noopt #1% }% -\def\XINT@gcfrac@noopt #1\Z +\def\XINT_gcfrac_noopt #1\Z {% - \XINT@gcfrac #1+\W/\relax\relax + \XINT_gcfrac #1+\W/\relax\relax }% -\def\XINT@gcfrac@opt@b\fi\XINT@gcfrac@noopt [\Z #1]% +\def\XINT_gcfrac_opt_b\fi\XINT_gcfrac_noopt [\Z #1]% {% - \fi\csname XINT@gcfrac@opt#1\endcsname + \fi\csname XINT_gcfrac_opt#1\endcsname }% -\def\XINT@gcfrac@optl #1% +\def\XINT_gcfrac_optl #1% {% - \XINT@gcfrac #1+\W/\relax\hfill + \XINT_gcfrac #1+\W/\relax\hfill }% -\def\XINT@gcfrac@optc #1% +\def\XINT_gcfrac_optc #1% {% - \XINT@gcfrac #1+\W/\relax\relax + \XINT_gcfrac #1+\W/\relax\relax }% -\def\XINT@gcfrac@optr #1% +\def\XINT_gcfrac_optr #1% {% - \XINT@gcfrac #1+\W/\hfill\relax + \XINT_gcfrac #1+\W/\hfill\relax }% -\def\XINT@gcfrac +\def\XINT_gcfrac {% - \expandafter\XINT@gcfrac@enter\romannumeral-`0% + \expandafter\XINT_gcfrac_enter\romannumeral-`0% }% -\def\XINT@gcfrac@enter {\XINT@gcfrac@loop {}}% -\def\XINT@gcfrac@loop #1#2+#3/% +\def\XINT_gcfrac_enter {\XINT_gcfrac_loop {}}% +\def\XINT_gcfrac_loop #1#2+#3/% {% - \xint@w #3\XINT@gcfrac@endloop\W\XINT@gcfrac@loop {{#3}{#2}#1}% + \xint_gob_til_w #3\XINT_gcfrac_endloop\W + \XINT_gcfrac_loop {{#3}{#2}#1}% }% -\def\XINT@gcfrac@endloop\W\XINT@gcfrac@loop #1#2#3% +\def\XINT_gcfrac_endloop\W\XINT_gcfrac_loop #1#2#3% {% - \XINT@gcfrac@T #2#3#1\Z\Z + \XINT_gcfrac_T #2#3#1\Z\Z }% -\def\XINT@gcfrac@T #1#2#3#4{\XINT@gcfrac@U #1#2{\xintFrac{#4}}}% -\def\XINT@gcfrac@U #1#2#3#4#5% +\def\XINT_gcfrac_T #1#2#3#4{\XINT_gcfrac_U #1#2{\xintFrac{#4}}}% +\def\XINT_gcfrac_U #1#2#3#4#5% {% - \xint@z #5\XINT@gcfrac@end\Z\XINT@gcfrac@U + \xint_gob_til_z #5\XINT_gcfrac_end\Z\XINT_gcfrac_U #1#2{\xintFrac{#5}% \ifcase\xintSgn{#4} +\or+\else-\fi \cfrac{#1\xintFrac{\xintAbs{#4}}#2}{#3}}% }% -\def\XINT@gcfrac@end\Z\XINT@gcfrac@U #1#2#3% +\def\XINT_gcfrac_end\Z\XINT_gcfrac_U #1#2#3% {% - \XINT@gcfrac@@end #3% + \XINT_gcfrac__end #3% }% -\def\XINT@gcfrac@@end #1\cfrac#2#3{ #3}% +\def\XINT_gcfrac__end #1\cfrac#2#3{ #3}% % \end{macrocode} % \subsection{\csh{xintGCtoGCx}} % \begin{macrocode} \def\xintGCtoGCx {\romannumeral0\xintgctogcx }% \def\xintgctogcx #1#2#3% {% - \expandafter\XINT@gctgcx@start\expandafter {\romannumeral-`0#3}{#1}{#2}% + \expandafter\XINT_gctgcx_start\expandafter {\romannumeral-`0#3}{#1}{#2}% }% -\def\XINT@gctgcx@start #1#2#3{\XINT@gctgcx@loop@a {}{#2}{#3}#1+\W/}% -\def\XINT@gctgcx@loop@a #1#2#3#4+#5/% +\def\XINT_gctgcx_start #1#2#3{\XINT_gctgcx_loop_a {}{#2}{#3}#1+\W/}% +\def\XINT_gctgcx_loop_a #1#2#3#4+#5/% {% - \xint@w #5\XINT@gctgcx@end\W - \XINT@gctgcx@loop@b {#1{#4}}{#2{#5}#3}{#2}{#3}% + \xint_gob_til_w #5\XINT_gctgcx_end\W + \XINT_gctgcx_loop_b {#1{#4}}{#2{#5}#3}{#2}{#3}% }% -\def\XINT@gctgcx@loop@b #1#2% +\def\XINT_gctgcx_loop_b #1#2% {% - \XINT@gctgcx@loop@a {#1#2}% + \XINT_gctgcx_loop_a {#1#2}% }% -\def\XINT@gctgcx@end\W\XINT@gctgcx@loop@b #1#2#3#4{ #1}% +\def\XINT_gctgcx_end\W\XINT_gctgcx_loop_b #1#2#3#4{ #1}% % \end{macrocode} % \subsection{\csh{xintFtoCs}} % \begin{macrocode} \def\xintFtoCs {\romannumeral0\xintftocs }% \def\xintftocs #1% {% - \expandafter\XINT@ftc@A\romannumeral0\xintraw {#1}\Z + \expandafter\XINT_ftc_A\romannumeral0\xintraw {#1}\Z }% -\def\XINT@ftc@A #1/#2\Z +\def\XINT_ftc_A #1/#2\Z {% - \expandafter\XINT@ftc@B\romannumeral0\xintidivision {#1}{#2}{#2}% + \expandafter\XINT_ftc_B\romannumeral0\xintidivision {#1}{#2}{#2}% }% -\def\XINT@ftc@B #1#2% +\def\XINT_ftc_B #1#2% {% - \XINT@ftc@C #2.{#1}% + \XINT_ftc_C #2.{#1}% }% -\def\XINT@ftc@C #1% +\def\XINT_ftc_C #1% {% - \xint@zero #1\XINT@ftc@integer 0\XINT@ftc@D #1% + \xint_gob_til_zero #1\XINT_ftc_integer 0\XINT_ftc_D #1% }% -\def\XINT@ftc@integer 0\XINT@ftc@D 0#1.#2#3{ #2}% -\def\XINT@ftc@D #1.#2#3{\XINT@ftc@loop@a {#1}{#3}{#1}{#2,}}% -\def\XINT@ftc@loop@a +\def\XINT_ftc_integer 0\XINT_ftc_D 0#1.#2#3{ #2}% +\def\XINT_ftc_D #1.#2#3{\XINT_ftc_loop_a {#1}{#3}{#1}{#2,}}% +\def\XINT_ftc_loop_a {% - \expandafter\XINT@ftc@loop@d\romannumeral0\XINT@div@prepare + \expandafter\XINT_ftc_loop_d\romannumeral0\XINT_div_prepare }% -\def\XINT@ftc@loop@d #1#2% +\def\XINT_ftc_loop_d #1#2% {% - \XINT@ftc@loop@e #2.{#1}% + \XINT_ftc_loop_e #2.{#1}% }% -\def\XINT@ftc@loop@e #1% +\def\XINT_ftc_loop_e #1% {% - \xint@zero #1\xint@ftc@loop@exit0\XINT@ftc@loop@f #1% + \xint_gob_til_zero #1\xint_ftc_loop_exit0\XINT_ftc_loop_f #1% }% -\def\XINT@ftc@loop@f #1.#2#3#4% +\def\XINT_ftc_loop_f #1.#2#3#4% {% - \XINT@ftc@loop@a {#1}{#3}{#1}{#4#2,}% + \XINT_ftc_loop_a {#1}{#3}{#1}{#4#2,}% }% -\def\xint@ftc@loop@exit0\XINT@ftc@loop@f #1.#2#3#4{ #4#2}% +\def\xint_ftc_loop_exit0\XINT_ftc_loop_f #1.#2#3#4{ #4#2}% % \end{macrocode} % \subsection{\csh{xintFtoCx}} % \begin{macrocode} \def\xintFtoCx {\romannumeral0\xintftocx }% \def\xintftocx #1#2% {% - \expandafter\XINT@ftcx@A\romannumeral0\xintraw {#2}\Z {#1}% + \expandafter\XINT_ftcx_A\romannumeral0\xintraw {#2}\Z {#1}% }% -\def\XINT@ftcx@A #1/#2\Z +\def\XINT_ftcx_A #1/#2\Z {% - \expandafter\XINT@ftcx@B\romannumeral0\xintidivision {#1}{#2}{#2}% + \expandafter\XINT_ftcx_B\romannumeral0\xintidivision {#1}{#2}{#2}% }% -\def\XINT@ftcx@B #1#2% +\def\XINT_ftcx_B #1#2% {% - \XINT@ftcx@C #2.{#1}% + \XINT_ftcx_C #2.{#1}% }% -\def\XINT@ftcx@C #1% +\def\XINT_ftcx_C #1% {% - \xint@zero #1\XINT@ftcx@integer 0\XINT@ftcx@D #1% + \xint_gob_til_zero #1\XINT_ftcx_integer 0\XINT_ftcx_D #1% }% -\def\XINT@ftcx@integer 0\XINT@ftcx@D 0#1.#2#3#4{ #2}% -\def\XINT@ftcx@D #1.#2#3#4{\XINT@ftcx@loop@a {#1}{#3}{#1}{#2#4}{#4}}% -\def\XINT@ftcx@loop@a +\def\XINT_ftcx_integer 0\XINT_ftcx_D 0#1.#2#3#4{ #2}% +\def\XINT_ftcx_D #1.#2#3#4{\XINT_ftcx_loop_a {#1}{#3}{#1}{#2#4}{#4}}% +\def\XINT_ftcx_loop_a {% - \expandafter\XINT@ftcx@loop@d\romannumeral0\XINT@div@prepare + \expandafter\XINT_ftcx_loop_d\romannumeral0\XINT_div_prepare }% -\def\XINT@ftcx@loop@d #1#2% +\def\XINT_ftcx_loop_d #1#2% {% - \XINT@ftcx@loop@e #2.{#1}% + \XINT_ftcx_loop_e #2.{#1}% }% -\def\XINT@ftcx@loop@e #1% +\def\XINT_ftcx_loop_e #1% {% - \xint@zero #1\xint@ftcx@loop@exit0\XINT@ftcx@loop@f #1% + \xint_gob_til_zero #1\xint_ftcx_loop_exit0\XINT_ftcx_loop_f #1% }% -\def\XINT@ftcx@loop@f #1.#2#3#4#5% +\def\XINT_ftcx_loop_f #1.#2#3#4#5% {% - \XINT@ftcx@loop@a {#1}{#3}{#1}{#4{#2}#5}{#5}% + \XINT_ftcx_loop_a {#1}{#3}{#1}{#4{#2}#5}{#5}% }% -\def\xint@ftcx@loop@exit0\XINT@ftcx@loop@f #1.#2#3#4#5{ #4{#2}}% +\def\xint_ftcx_loop_exit0\XINT_ftcx_loop_f #1.#2#3#4#5{ #4{#2}}% % \end{macrocode} % \subsection{\csh{xintFtoGC}} % \begin{macrocode} @@ -11518,72 +11336,72 @@ first place. \def\xintFtoCC {\romannumeral0\xintftocc }% \def\xintftocc #1% {% - \expandafter\XINT@ftcc@A\expandafter {\romannumeral0\xintraw {#1}}% + \expandafter\XINT_ftcc_A\expandafter {\romannumeral0\xintraw {#1}}% }% -\def\XINT@ftcc@A #1% +\def\XINT_ftcc_A #1% {% - \expandafter\XINT@ftcc@B + \expandafter\XINT_ftcc_B \romannumeral0\xintraw {\xintAdd {1/2[0]}{#1[0]}}\Z {#1[0]}% }% -\def\XINT@ftcc@B #1/#2\Z +\def\XINT_ftcc_B #1/#2\Z {% - \expandafter\XINT@ftcc@C\expandafter {\romannumeral0\xintiquo {#1}{#2}}% + \expandafter\XINT_ftcc_C\expandafter {\romannumeral0\xintiquo {#1}{#2}}% }% -\def\XINT@ftcc@C #1#2% +\def\XINT_ftcc_C #1#2% {% - \expandafter\XINT@ftcc@D\romannumeral0\xintsub {#2}{#1}\Z {#1}% + \expandafter\XINT_ftcc_D\romannumeral0\xintsub {#2}{#1}\Z {#1}% }% -\def\XINT@ftcc@D #1% +\def\XINT_ftcc_D #1% {% - \xint@UDzerominusfork - #1-\dummy \XINT@ftcc@integer - 0#1\dummy \XINT@ftcc@En - 0-\dummy {\XINT@ftcc@Ep #1}% - \xint@UDkrof + \xint_UDzerominusfork + #1-\dummy \XINT_ftcc_integer + 0#1\dummy \XINT_ftcc_En + 0-\dummy {\XINT_ftcc_Ep #1}% + \krof }% -\def\XINT@ftcc@Ep #1\Z #2% +\def\XINT_ftcc_Ep #1\Z #2% {% - \expandafter\XINT@ftcc@loop@a\expandafter + \expandafter\XINT_ftcc_loop_a\expandafter {\romannumeral0\xintdiv {1[0]}{#1}}{#2+1/}% }% -\def\XINT@ftcc@En #1\Z #2% +\def\XINT_ftcc_En #1\Z #2% {% - \expandafter\XINT@ftcc@loop@a\expandafter + \expandafter\XINT_ftcc_loop_a\expandafter {\romannumeral0\xintdiv {1[0]}{#1}}{#2+-1/}% }% -\def\XINT@ftcc@integer #1\Z #2{ #2}% -\def\XINT@ftcc@loop@a #1% +\def\XINT_ftcc_integer #1\Z #2{ #2}% +\def\XINT_ftcc_loop_a #1% {% - \expandafter\XINT@ftcc@loop@b + \expandafter\XINT_ftcc_loop_b \romannumeral0\xintraw {\xintAdd {1/2[0]}{#1}}\Z {#1}% }% -\def\XINT@ftcc@loop@b #1/#2\Z +\def\XINT_ftcc_loop_b #1/#2\Z {% - \expandafter\XINT@ftcc@loop@c\expandafter + \expandafter\XINT_ftcc_loop_c\expandafter {\romannumeral0\xintiquo {#1}{#2}}% }% -\def\XINT@ftcc@loop@c #1#2% +\def\XINT_ftcc_loop_c #1#2% {% - \expandafter\XINT@ftcc@loop@d + \expandafter\XINT_ftcc_loop_d \romannumeral0\xintsub {#2}{#1[0]}\Z {#1}% }% -\def\XINT@ftcc@loop@d #1% +\def\XINT_ftcc_loop_d #1% {% - \xint@UDzerominusfork - #1-\dummy \XINT@ftcc@end - 0#1\dummy \XINT@ftcc@loop@N - 0-\dummy {\XINT@ftcc@loop@P #1}% - \xint@UDkrof + \xint_UDzerominusfork + #1-\dummy \XINT_ftcc_end + 0#1\dummy \XINT_ftcc_loop_N + 0-\dummy {\XINT_ftcc_loop_P #1}% + \krof }% -\def\XINT@ftcc@end #1\Z #2#3{ #3#2}% -\def\XINT@ftcc@loop@P #1\Z #2#3% +\def\XINT_ftcc_end #1\Z #2#3{ #3#2}% +\def\XINT_ftcc_loop_P #1\Z #2#3% {% - \expandafter\XINT@ftcc@loop@a\expandafter + \expandafter\XINT_ftcc_loop_a\expandafter {\romannumeral0\xintdiv {1[0]}{#1}}{#3#2+1/}% }% -\def\XINT@ftcc@loop@N #1\Z #2#3% +\def\XINT_ftcc_loop_N #1\Z #2#3% {% - \expandafter\XINT@ftcc@loop@a\expandafter + \expandafter\XINT_ftcc_loop_a\expandafter {\romannumeral0\xintdiv {1[0]}{#1}}{#3#2+-1/}% }% % \end{macrocode} @@ -11608,633 +11426,628 @@ first place. \def\xintCstoF {\romannumeral0\xintcstof }% \def\xintcstof #1% {% - \expandafter\XINT@cstf@prep \romannumeral-`0#1,\W,% + \expandafter\XINT_cstf_prep \romannumeral-`0#1,\W,% }% -\def\XINT@cstf@prep +\def\XINT_cstf_prep {% - \XINT@cstf@loop@a 1001% + \XINT_cstf_loop_a 1001% }% -\def\XINT@cstf@loop@a #1#2#3#4#5,% +\def\XINT_cstf_loop_a #1#2#3#4#5,% {% - \xint@w #5\XINT@cstf@end\W\expandafter\XINT@cstf@loop@b + \xint_gob_til_w #5\XINT_cstf_end\W + \expandafter\XINT_cstf_loop_b \romannumeral0\xintraw {#5}.{#1}{#2}{#3}{#4}% }% -\def\XINT@cstf@loop@b #1/#2.#3#4#5#6% +\def\XINT_cstf_loop_b #1/#2.#3#4#5#6% {% - \expandafter\XINT@cstf@loop@c\expandafter - {\romannumeral0\XINT@mul@fork #2\Z #4\Z }% - {\romannumeral0\XINT@mul@fork #2\Z #3\Z }% - {\romannumeral0\xintiadd {\XINT@Mul {#2}{#6}}{\XINT@Mul {#1}{#4}}}% - {\romannumeral0\xintiadd {\XINT@Mul {#2}{#5}}{\XINT@Mul {#1}{#3}}}% + \expandafter\XINT_cstf_loop_c\expandafter + {\romannumeral0\XINT_mul_fork #2\Z #4\Z }% + {\romannumeral0\XINT_mul_fork #2\Z #3\Z }% + {\romannumeral0\xintiadd {\XINT_Mul {#2}{#6}}{\XINT_Mul {#1}{#4}}}% + {\romannumeral0\xintiadd {\XINT_Mul {#2}{#5}}{\XINT_Mul {#1}{#3}}}% }% -\def\XINT@cstf@loop@c #1#2% +\def\XINT_cstf_loop_c #1#2% {% - \expandafter\XINT@cstf@loop@d\expandafter {\expandafter{#2}{#1}}% + \expandafter\XINT_cstf_loop_d\expandafter {\expandafter{#2}{#1}}% }% -\def\XINT@cstf@loop@d #1#2% +\def\XINT_cstf_loop_d #1#2% {% - \expandafter\XINT@cstf@loop@e\expandafter {\expandafter{#2}#1}% + \expandafter\XINT_cstf_loop_e\expandafter {\expandafter{#2}#1}% }% -\def\XINT@cstf@loop@e #1#2% +\def\XINT_cstf_loop_e #1#2% {% - \expandafter\XINT@cstf@loop@a\expandafter{#2}#1% + \expandafter\XINT_cstf_loop_a\expandafter{#2}#1% }% -\def\XINT@cstf@end #1.#2#3#4#5{\xintraw {#2/#3}[0]}% +\def\XINT_cstf_end #1.#2#3#4#5{\xintraw {#2/#3}[0]}% % \end{macrocode} % \subsection{\csh{xintiCstoF}} % \begin{macrocode} \def\xintiCstoF {\romannumeral0\xinticstof }% \def\xinticstof #1% {% - \expandafter\XINT@icstf@prep \romannumeral-`0#1,\W,% + \expandafter\XINT_icstf_prep \romannumeral-`0#1,\W,% }% -\def\XINT@icstf@prep +\def\XINT_icstf_prep {% - \XINT@icstf@loop@a 1001% + \XINT_icstf_loop_a 1001% }% -\def\XINT@icstf@loop@a #1#2#3#4#5,% +\def\XINT_icstf_loop_a #1#2#3#4#5,% {% - \xint@w #5\XINT@icstf@end\W + \xint_gob_til_w #5\XINT_icstf_end\W \expandafter - \XINT@icstf@loop@b \romannumeral-`0#5.{#1}{#2}{#3}{#4}% + \XINT_icstf_loop_b \romannumeral-`0#5.{#1}{#2}{#3}{#4}% }% -\def\XINT@icstf@loop@b #1.#2#3#4#5% +\def\XINT_icstf_loop_b #1.#2#3#4#5% {% - \expandafter\XINT@icstf@loop@c\expandafter - {\romannumeral0\xintiadd {#5}{\XINT@Mul {#1}{#3}}}% - {\romannumeral0\xintiadd {#4}{\XINT@Mul {#1}{#2}}}% + \expandafter\XINT_icstf_loop_c\expandafter + {\romannumeral0\xintiadd {#5}{\XINT_Mul {#1}{#3}}}% + {\romannumeral0\xintiadd {#4}{\XINT_Mul {#1}{#2}}}% {#2}{#3}% }% -\def\XINT@icstf@loop@c #1#2% +\def\XINT_icstf_loop_c #1#2% {% - \expandafter\XINT@icstf@loop@a\expandafter {#2}{#1}% + \expandafter\XINT_icstf_loop_a\expandafter {#2}{#1}% }% -\def\XINT@icstf@end#1.#2#3#4#5{\xintraw {#2/#3}[0]}% +\def\XINT_icstf_end#1.#2#3#4#5{\xintraw {#2/#3}[0]}% % \end{macrocode} % \subsection{\csh{xintGCtoF}} % \begin{macrocode} \def\xintGCtoF {\romannumeral0\xintgctof }% \def\xintgctof #1% {% - \expandafter\XINT@gctf@prep \romannumeral-`0#1+\W/% + \expandafter\XINT_gctf_prep \romannumeral-`0#1+\W/% }% -\def\XINT@gctf@prep +\def\XINT_gctf_prep {% - \XINT@gctf@loop@a 1001% + \XINT_gctf_loop_a 1001% }% -\def\XINT@gctf@loop@a #1#2#3#4#5+% +\def\XINT_gctf_loop_a #1#2#3#4#5+% {% - \expandafter\XINT@gctf@loop@b + \expandafter\XINT_gctf_loop_b \romannumeral0\xintraw {#5}.{#1}{#2}{#3}{#4}% }% -\def\XINT@gctf@loop@b #1/#2.#3#4#5#6% +\def\XINT_gctf_loop_b #1/#2.#3#4#5#6% {% - \expandafter\XINT@gctf@loop@c\expandafter - {\romannumeral0\XINT@mul@fork #2\Z #4\Z }% - {\romannumeral0\XINT@mul@fork #2\Z #3\Z }% - {\romannumeral0\xintiadd {\XINT@Mul {#2}{#6}}{\XINT@Mul {#1}{#4}}}% - {\romannumeral0\xintiadd {\XINT@Mul {#2}{#5}}{\XINT@Mul {#1}{#3}}}% + \expandafter\XINT_gctf_loop_c\expandafter + {\romannumeral0\XINT_mul_fork #2\Z #4\Z }% + {\romannumeral0\XINT_mul_fork #2\Z #3\Z }% + {\romannumeral0\xintiadd {\XINT_Mul {#2}{#6}}{\XINT_Mul {#1}{#4}}}% + {\romannumeral0\xintiadd {\XINT_Mul {#2}{#5}}{\XINT_Mul {#1}{#3}}}% }% -\def\XINT@gctf@loop@c #1#2% +\def\XINT_gctf_loop_c #1#2% {% - \expandafter\XINT@gctf@loop@d\expandafter {\expandafter{#2}{#1}}% + \expandafter\XINT_gctf_loop_d\expandafter {\expandafter{#2}{#1}}% }% -\def\XINT@gctf@loop@d #1#2% +\def\XINT_gctf_loop_d #1#2% {% - \expandafter\XINT@gctf@loop@e\expandafter {\expandafter{#2}#1}% + \expandafter\XINT_gctf_loop_e\expandafter {\expandafter{#2}#1}% }% -\def\XINT@gctf@loop@e #1#2% +\def\XINT_gctf_loop_e #1#2% {% - \expandafter\XINT@gctf@loop@f\expandafter {\expandafter{#2}#1}% + \expandafter\XINT_gctf_loop_f\expandafter {\expandafter{#2}#1}% }% -\def\XINT@gctf@loop@f #1#2/% +\def\XINT_gctf_loop_f #1#2/% {% - \xint@w #2\XINT@gctf@end\W\expandafter\XINT@gctf@loop@g + \xint_gob_til_w #2\XINT_gctf_end\W + \expandafter\XINT_gctf_loop_g \romannumeral0\xintraw {#2}.#1% }% -\def\XINT@gctf@loop@g #1/#2.#3#4#5#6% +\def\XINT_gctf_loop_g #1/#2.#3#4#5#6% {% - \expandafter\XINT@gctf@loop@h\expandafter - {\romannumeral0\XINT@mul@fork #1\Z #6\Z }% - {\romannumeral0\XINT@mul@fork #1\Z #5\Z }% - {\romannumeral0\XINT@mul@fork #2\Z #4\Z }% - {\romannumeral0\XINT@mul@fork #2\Z #3\Z }% + \expandafter\XINT_gctf_loop_h\expandafter + {\romannumeral0\XINT_mul_fork #1\Z #6\Z }% + {\romannumeral0\XINT_mul_fork #1\Z #5\Z }% + {\romannumeral0\XINT_mul_fork #2\Z #4\Z }% + {\romannumeral0\XINT_mul_fork #2\Z #3\Z }% }% -\def\XINT@gctf@loop@h #1#2% +\def\XINT_gctf_loop_h #1#2% {% - \expandafter\XINT@gctf@loop@i\expandafter {\expandafter{#2}{#1}}% + \expandafter\XINT_gctf_loop_i\expandafter {\expandafter{#2}{#1}}% }% -\def\XINT@gctf@loop@i #1#2% +\def\XINT_gctf_loop_i #1#2% {% - \expandafter\XINT@gctf@loop@j\expandafter {\expandafter{#2}#1}% + \expandafter\XINT_gctf_loop_j\expandafter {\expandafter{#2}#1}% }% -\def\XINT@gctf@loop@j #1#2% +\def\XINT_gctf_loop_j #1#2% {% - \expandafter\XINT@gctf@loop@a\expandafter {#2}#1% + \expandafter\XINT_gctf_loop_a\expandafter {#2}#1% }% -\def\XINT@gctf@end #1.#2#3#4#5{\xintraw {#2/#3}[0]}% +\def\XINT_gctf_end #1.#2#3#4#5{\xintraw {#2/#3}[0]}% % \end{macrocode} % \subsection{\csh{xintiGCtoF}} % \begin{macrocode} \def\xintiGCtoF {\romannumeral0\xintigctof }% \def\xintigctof #1% {% - \expandafter\XINT@igctf@prep \romannumeral-`0#1+\W/% + \expandafter\XINT_igctf_prep \romannumeral-`0#1+\W/% }% -\def\XINT@igctf@prep +\def\XINT_igctf_prep {% - \XINT@igctf@loop@a 1001% + \XINT_igctf_loop_a 1001% }% -\def\XINT@igctf@loop@a #1#2#3#4#5+% +\def\XINT_igctf_loop_a #1#2#3#4#5+% {% - \expandafter\XINT@igctf@loop@b + \expandafter\XINT_igctf_loop_b \romannumeral-`0#5.{#1}{#2}{#3}{#4}% }% -\def\XINT@igctf@loop@b #1.#2#3#4#5% +\def\XINT_igctf_loop_b #1.#2#3#4#5% {% - \expandafter\XINT@igctf@loop@c\expandafter - {\romannumeral0\xintiadd {#5}{\XINT@Mul {#1}{#3}}}% - {\romannumeral0\xintiadd {#4}{\XINT@Mul {#1}{#2}}}% + \expandafter\XINT_igctf_loop_c\expandafter + {\romannumeral0\xintiadd {#5}{\XINT_Mul {#1}{#3}}}% + {\romannumeral0\xintiadd {#4}{\XINT_Mul {#1}{#2}}}% {#2}{#3}% }% -\def\XINT@igctf@loop@c #1#2% +\def\XINT_igctf_loop_c #1#2% {% - \expandafter\XINT@igctf@loop@f\expandafter {\expandafter{#2}{#1}}% + \expandafter\XINT_igctf_loop_f\expandafter {\expandafter{#2}{#1}}% }% -\def\XINT@igctf@loop@f #1#2#3#4/% +\def\XINT_igctf_loop_f #1#2#3#4/% {% - \xint@w #4\XINT@igctf@end\W - \expandafter\XINT@igctf@loop@g + \xint_gob_til_w #4\XINT_igctf_end\W + \expandafter\XINT_igctf_loop_g \romannumeral-`0#4.{#2}{#3}#1% }% -\def\XINT@igctf@loop@g #1.#2#3% +\def\XINT_igctf_loop_g #1.#2#3% {% - \expandafter\XINT@igctf@loop@h\expandafter - {\romannumeral0\XINT@mul@fork #1\Z #3\Z }% - {\romannumeral0\XINT@mul@fork #1\Z #2\Z }% + \expandafter\XINT_igctf_loop_h\expandafter + {\romannumeral0\XINT_mul_fork #1\Z #3\Z }% + {\romannumeral0\XINT_mul_fork #1\Z #2\Z }% }% -\def\XINT@igctf@loop@h #1#2% +\def\XINT_igctf_loop_h #1#2% {% - \expandafter\XINT@igctf@loop@i\expandafter {#2}{#1}% + \expandafter\XINT_igctf_loop_i\expandafter {#2}{#1}% }% -\def\XINT@igctf@loop@i #1#2#3#4% +\def\XINT_igctf_loop_i #1#2#3#4% {% - \XINT@igctf@loop@a {#3}{#4}{#1}{#2}% + \XINT_igctf_loop_a {#3}{#4}{#1}{#2}% }% -\def\XINT@igctf@end #1.#2#3#4#5{\xintraw {#4/#5}[0]}% +\def\XINT_igctf_end #1.#2#3#4#5{\xintraw {#4/#5}[0]}% % \end{macrocode} % \subsection{\csh{xintCstoCv}} % \begin{macrocode} \def\xintCstoCv {\romannumeral0\xintcstocv }% \def\xintcstocv #1% {% - \expandafter\XINT@cstcv@prep \romannumeral-`0#1,\W,% + \expandafter\XINT_cstcv_prep \romannumeral-`0#1,\W,% }% -\def\XINT@cstcv@prep +\def\XINT_cstcv_prep {% - \XINT@cstcv@loop@a {}1001% + \XINT_cstcv_loop_a {}1001% }% -\def\XINT@cstcv@loop@a #1#2#3#4#5#6,% +\def\XINT_cstcv_loop_a #1#2#3#4#5#6,% {% - \xint@w #6\XINT@cstcv@end\W - \expandafter\XINT@cstcv@loop@b + \xint_gob_til_w #6\XINT_cstcv_end\W + \expandafter\XINT_cstcv_loop_b \romannumeral0\xintraw {#6}.{#2}{#3}{#4}{#5}{#1}% }% -\def\XINT@cstcv@loop@b #1/#2.#3#4#5#6% +\def\XINT_cstcv_loop_b #1/#2.#3#4#5#6% {% - \expandafter\XINT@cstcv@loop@c\expandafter - {\romannumeral0\XINT@mul@fork #2\Z #4\Z }% - {\romannumeral0\XINT@mul@fork #2\Z #3\Z }% - {\romannumeral0\xintiadd {\XINT@Mul {#2}{#6}}{\XINT@Mul {#1}{#4}}}% - {\romannumeral0\xintiadd {\XINT@Mul {#2}{#5}}{\XINT@Mul {#1}{#3}}}% + \expandafter\XINT_cstcv_loop_c\expandafter + {\romannumeral0\XINT_mul_fork #2\Z #4\Z }% + {\romannumeral0\XINT_mul_fork #2\Z #3\Z }% + {\romannumeral0\xintiadd {\XINT_Mul {#2}{#6}}{\XINT_Mul {#1}{#4}}}% + {\romannumeral0\xintiadd {\XINT_Mul {#2}{#5}}{\XINT_Mul {#1}{#3}}}% }% -\def\XINT@cstcv@loop@c #1#2% +\def\XINT_cstcv_loop_c #1#2% {% - \expandafter\XINT@cstcv@loop@d\expandafter {\expandafter{#2}{#1}}% + \expandafter\XINT_cstcv_loop_d\expandafter {\expandafter{#2}{#1}}% }% -\def\XINT@cstcv@loop@d #1#2% +\def\XINT_cstcv_loop_d #1#2% {% - \expandafter\XINT@cstcv@loop@e\expandafter {\expandafter{#2}#1}% + \expandafter\XINT_cstcv_loop_e\expandafter {\expandafter{#2}#1}% }% -\def\XINT@cstcv@loop@e #1#2% +\def\XINT_cstcv_loop_e #1#2% {% - \expandafter\XINT@cstcv@loop@f\expandafter{#2}#1% + \expandafter\XINT_cstcv_loop_f\expandafter{#2}#1% }% -\def\XINT@cstcv@loop@f #1#2#3#4#5% +\def\XINT_cstcv_loop_f #1#2#3#4#5% {% - \expandafter\XINT@cstcv@loop@g\expandafter + \expandafter\XINT_cstcv_loop_g\expandafter {\romannumeral0\xintraw {#1/#2}}{#5}{#1}{#2}{#3}{#4}% }% -\def\XINT@cstcv@loop@g #1#2{\XINT@cstcv@loop@a {#2{#1[0]}}}% -\def\XINT@cstcv@end #1.#2#3#4#5#6{ #6}% +\def\XINT_cstcv_loop_g #1#2{\XINT_cstcv_loop_a {#2{#1[0]}}}% +\def\XINT_cstcv_end #1.#2#3#4#5#6{ #6}% % \end{macrocode} % \subsection{\csh{xintiCstoCv}} % \begin{macrocode} \def\xintiCstoCv {\romannumeral0\xinticstocv }% \def\xinticstocv #1% {% - \expandafter\XINT@icstcv@prep \romannumeral-`0#1,\W,% + \expandafter\XINT_icstcv_prep \romannumeral-`0#1,\W,% }% -\def\XINT@icstcv@prep +\def\XINT_icstcv_prep {% - \XINT@icstcv@loop@a {}1001% + \XINT_icstcv_loop_a {}1001% }% -\def\XINT@icstcv@loop@a #1#2#3#4#5#6,% +\def\XINT_icstcv_loop_a #1#2#3#4#5#6,% {% - \xint@w #6\XINT@icstcv@end\W + \xint_gob_til_w #6\XINT_icstcv_end\W \expandafter - \XINT@icstcv@loop@b \romannumeral-`0#6.{#2}{#3}{#4}{#5}{#1}% + \XINT_icstcv_loop_b \romannumeral-`0#6.{#2}{#3}{#4}{#5}{#1}% }% -\def\XINT@icstcv@loop@b #1.#2#3#4#5% +\def\XINT_icstcv_loop_b #1.#2#3#4#5% {% - \expandafter\XINT@icstcv@loop@c\expandafter - {\romannumeral0\xintiadd {#5}{\XINT@Mul {#1}{#3}}}% - {\romannumeral0\xintiadd {#4}{\XINT@Mul {#1}{#2}}}% + \expandafter\XINT_icstcv_loop_c\expandafter + {\romannumeral0\xintiadd {#5}{\XINT_Mul {#1}{#3}}}% + {\romannumeral0\xintiadd {#4}{\XINT_Mul {#1}{#2}}}% {{#2}{#3}}% }% -\def\XINT@icstcv@loop@c #1#2% +\def\XINT_icstcv_loop_c #1#2% {% - \expandafter\XINT@icstcv@loop@d\expandafter {#2}{#1}% + \expandafter\XINT_icstcv_loop_d\expandafter {#2}{#1}% }% -\def\XINT@icstcv@loop@d #1#2% +\def\XINT_icstcv_loop_d #1#2% {% - \expandafter\XINT@icstcv@loop@e\expandafter + \expandafter\XINT_icstcv_loop_e\expandafter {\romannumeral0\xintraw {#1/#2}}{{#1}{#2}}% }% -\def\XINT@icstcv@loop@e #1#2#3#4{\XINT@icstcv@loop@a {#4{#1[0]}}#2#3}% -\def\XINT@icstcv@end #1.#2#3#4#5#6{ #6}% +\def\XINT_icstcv_loop_e #1#2#3#4{\XINT_icstcv_loop_a {#4{#1[0]}}#2#3}% +\def\XINT_icstcv_end #1.#2#3#4#5#6{ #6}% % \end{macrocode} % \subsection{\csh{xintGCtoCv}} % \begin{macrocode} \def\xintGCtoCv {\romannumeral0\xintgctocv }% \def\xintgctocv #1% {% - \expandafter\XINT@gctcv@prep \romannumeral-`0#1+\W/% + \expandafter\XINT_gctcv_prep \romannumeral-`0#1+\W/% }% -\def\XINT@gctcv@prep +\def\XINT_gctcv_prep {% - \XINT@gctcv@loop@a {}1001% + \XINT_gctcv_loop_a {}1001% }% -\def\XINT@gctcv@loop@a #1#2#3#4#5#6+% +\def\XINT_gctcv_loop_a #1#2#3#4#5#6+% {% - \expandafter\XINT@gctcv@loop@b + \expandafter\XINT_gctcv_loop_b \romannumeral0\xintraw {#6}.{#2}{#3}{#4}{#5}{#1}% }% -\def\XINT@gctcv@loop@b #1/#2.#3#4#5#6% +\def\XINT_gctcv_loop_b #1/#2.#3#4#5#6% {% - \expandafter\XINT@gctcv@loop@c\expandafter - {\romannumeral0\XINT@mul@fork #2\Z #4\Z }% - {\romannumeral0\XINT@mul@fork #2\Z #3\Z }% - {\romannumeral0\xintiadd {\XINT@Mul {#2}{#6}}{\XINT@Mul {#1}{#4}}}% - {\romannumeral0\xintiadd {\XINT@Mul {#2}{#5}}{\XINT@Mul {#1}{#3}}}% + \expandafter\XINT_gctcv_loop_c\expandafter + {\romannumeral0\XINT_mul_fork #2\Z #4\Z }% + {\romannumeral0\XINT_mul_fork #2\Z #3\Z }% + {\romannumeral0\xintiadd {\XINT_Mul {#2}{#6}}{\XINT_Mul {#1}{#4}}}% + {\romannumeral0\xintiadd {\XINT_Mul {#2}{#5}}{\XINT_Mul {#1}{#3}}}% }% -\def\XINT@gctcv@loop@c #1#2% +\def\XINT_gctcv_loop_c #1#2% {% - \expandafter\XINT@gctcv@loop@d\expandafter {\expandafter{#2}{#1}}% + \expandafter\XINT_gctcv_loop_d\expandafter {\expandafter{#2}{#1}}% }% -\def\XINT@gctcv@loop@d #1#2% +\def\XINT_gctcv_loop_d #1#2% {% - \expandafter\XINT@gctcv@loop@e\expandafter {\expandafter{#2}{#1}}% + \expandafter\XINT_gctcv_loop_e\expandafter {\expandafter{#2}{#1}}% }% -\def\XINT@gctcv@loop@e #1#2% +\def\XINT_gctcv_loop_e #1#2% {% - \expandafter\XINT@gctcv@loop@f\expandafter {#2}#1% + \expandafter\XINT_gctcv_loop_f\expandafter {#2}#1% }% -\def\XINT@gctcv@loop@f #1#2% +\def\XINT_gctcv_loop_f #1#2% {% - \expandafter\XINT@gctcv@loop@g\expandafter + \expandafter\XINT_gctcv_loop_g\expandafter {\romannumeral0\xintraw {#1/#2}}{{#1}{#2}}% }% -\def\XINT@gctcv@loop@g #1#2#3#4% +\def\XINT_gctcv_loop_g #1#2#3#4% {% - \XINT@gctcv@loop@h {#4{#1[0]}}{#2#3}% + \XINT_gctcv_loop_h {#4{#1[0]}}{#2#3}% }% -\def\XINT@gctcv@loop@h #1#2#3/% +\def\XINT_gctcv_loop_h #1#2#3/% {% - \xint@w #3\XINT@gctcv@end\W\expandafter\XINT@gctcv@loop@i + \xint_gob_til_w #3\XINT_gctcv_end\W + \expandafter\XINT_gctcv_loop_i \romannumeral0\xintraw {#3}.#2{#1}% }% -\def\XINT@gctcv@loop@i #1/#2.#3#4#5#6% +\def\XINT_gctcv_loop_i #1/#2.#3#4#5#6% {% - \expandafter\XINT@gctcv@loop@j\expandafter - {\romannumeral0\XINT@mul@fork #1\Z #6\Z }% - {\romannumeral0\XINT@mul@fork #1\Z #5\Z }% - {\romannumeral0\XINT@mul@fork #2\Z #4\Z }% - {\romannumeral0\XINT@mul@fork #2\Z #3\Z }% + \expandafter\XINT_gctcv_loop_j\expandafter + {\romannumeral0\XINT_mul_fork #1\Z #6\Z }% + {\romannumeral0\XINT_mul_fork #1\Z #5\Z }% + {\romannumeral0\XINT_mul_fork #2\Z #4\Z }% + {\romannumeral0\XINT_mul_fork #2\Z #3\Z }% }% -\def\XINT@gctcv@loop@j #1#2% +\def\XINT_gctcv_loop_j #1#2% {% - \expandafter\XINT@gctcv@loop@k\expandafter {\expandafter{#2}{#1}}% + \expandafter\XINT_gctcv_loop_k\expandafter {\expandafter{#2}{#1}}% }% -\def\XINT@gctcv@loop@k #1#2% +\def\XINT_gctcv_loop_k #1#2% {% - \expandafter\XINT@gctcv@loop@l\expandafter {\expandafter{#2}#1}% + \expandafter\XINT_gctcv_loop_l\expandafter {\expandafter{#2}#1}% }% -\def\XINT@gctcv@loop@l #1#2% +\def\XINT_gctcv_loop_l #1#2% {% - \expandafter\XINT@gctcv@loop@m\expandafter {\expandafter{#2}#1}% + \expandafter\XINT_gctcv_loop_m\expandafter {\expandafter{#2}#1}% }% -\def\XINT@gctcv@loop@m #1#2{\XINT@gctcv@loop@a {#2}#1}% -\def\XINT@gctcv@end #1.#2#3#4#5#6{ #6}% +\def\XINT_gctcv_loop_m #1#2{\XINT_gctcv_loop_a {#2}#1}% +\def\XINT_gctcv_end #1.#2#3#4#5#6{ #6}% % \end{macrocode} % \subsection{\csh{xintiGCtoCv}} % \begin{macrocode} \def\xintiGCtoCv {\romannumeral0\xintigctocv }% \def\xintigctocv #1% {% - \expandafter\XINT@igctcv@prep \romannumeral-`0#1+\W/% + \expandafter\XINT_igctcv_prep \romannumeral-`0#1+\W/% }% -\def\XINT@igctcv@prep +\def\XINT_igctcv_prep {% - \XINT@igctcv@loop@a {}1001% + \XINT_igctcv_loop_a {}1001% }% -\def\XINT@igctcv@loop@a #1#2#3#4#5#6+% +\def\XINT_igctcv_loop_a #1#2#3#4#5#6+% {% - \expandafter\XINT@igctcv@loop@b + \expandafter\XINT_igctcv_loop_b \romannumeral-`0#6.{#2}{#3}{#4}{#5}{#1}% }% -\def\XINT@igctcv@loop@b #1.#2#3#4#5% +\def\XINT_igctcv_loop_b #1.#2#3#4#5% {% - \expandafter\XINT@igctcv@loop@c\expandafter - {\romannumeral0\xintiadd {#5}{\XINT@Mul {#1}{#3}}}% - {\romannumeral0\xintiadd {#4}{\XINT@Mul {#1}{#2}}}% + \expandafter\XINT_igctcv_loop_c\expandafter + {\romannumeral0\xintiadd {#5}{\XINT_Mul {#1}{#3}}}% + {\romannumeral0\xintiadd {#4}{\XINT_Mul {#1}{#2}}}% {{#2}{#3}}% }% -\def\XINT@igctcv@loop@c #1#2% +\def\XINT_igctcv_loop_c #1#2% {% - \expandafter\XINT@igctcv@loop@f\expandafter {\expandafter{#2}{#1}}% + \expandafter\XINT_igctcv_loop_f\expandafter {\expandafter{#2}{#1}}% }% -\def\XINT@igctcv@loop@f #1#2#3#4/% +\def\XINT_igctcv_loop_f #1#2#3#4/% {% - \xint@w #4\XINT@igctcv@end@a\W - \expandafter\XINT@igctcv@loop@g + \xint_gob_til_w #4\XINT_igctcv_end_a\W + \expandafter\XINT_igctcv_loop_g \romannumeral-`0#4.#1#2{#3}% }% -\def\XINT@igctcv@loop@g #1.#2#3#4#5% +\def\XINT_igctcv_loop_g #1.#2#3#4#5% {% - \expandafter\XINT@igctcv@loop@h\expandafter - {\romannumeral0\XINT@mul@fork #1\Z #5\Z }% - {\romannumeral0\XINT@mul@fork #1\Z #4\Z }% + \expandafter\XINT_igctcv_loop_h\expandafter + {\romannumeral0\XINT_mul_fork #1\Z #5\Z }% + {\romannumeral0\XINT_mul_fork #1\Z #4\Z }% {{#2}{#3}}% }% -\def\XINT@igctcv@loop@h #1#2% +\def\XINT_igctcv_loop_h #1#2% {% - \expandafter\XINT@igctcv@loop@i\expandafter {\expandafter{#2}{#1}}% + \expandafter\XINT_igctcv_loop_i\expandafter {\expandafter{#2}{#1}}% }% -\def\XINT@igctcv@loop@i #1#2{\XINT@igctcv@loop@k #2{#2#1}}% -\def\XINT@igctcv@loop@k #1#2% +\def\XINT_igctcv_loop_i #1#2{\XINT_igctcv_loop_k #2{#2#1}}% +\def\XINT_igctcv_loop_k #1#2% {% - \expandafter\XINT@igctcv@loop@l\expandafter + \expandafter\XINT_igctcv_loop_l\expandafter {\romannumeral0\xintraw {#1/#2}}% }% -\def\XINT@igctcv@loop@l #1#2#3{\XINT@igctcv@loop@a {#3{#1[0]}}#2}% -\def\XINT@igctcv@end@a #1.#2#3#4#5% +\def\XINT_igctcv_loop_l #1#2#3{\XINT_igctcv_loop_a {#3{#1[0]}}#2}% +\def\XINT_igctcv_end_a #1.#2#3#4#5% {% - \expandafter\XINT@igctcv@end@b\expandafter + \expandafter\XINT_igctcv_end_b\expandafter {\romannumeral0\xintraw {#2/#3}}% }% -\def\XINT@igctcv@end@b #1#2{ #2{#1[0]}}% +\def\XINT_igctcv_end_b #1#2{ #2{#1[0]}}% % \end{macrocode} % \subsection{\csh{xintCntoF}} -% \begin{verbatim} +% \lverb|& % Modified in 1.06 to give the N first to a \numexpr rather than expanding -% twice. I just use \the\numexpr and maintain the previous code after that. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% twice. I just use \the\numexpr and maintain the previous code after that.| % \begin{macrocode} \def\xintCntoF {\romannumeral0\xintcntof }% \def\xintcntof #1% {% - \expandafter\XINT@cntf\expandafter {\the\numexpr #1}% + \expandafter\XINT_cntf\expandafter {\the\numexpr #1}% }% -\def\XINT@cntf #1#2% +\def\XINT_cntf #1#2% {% \ifnum #1>0 - \xint@afterfi {\expandafter\XINT@cntf@loop\expandafter + \xint_afterfi {\expandafter\XINT_cntf_loop\expandafter {\the\numexpr #1-1\expandafter}\expandafter {\romannumeral-`0#2{#1}}{#2}}% \else - \xint@afterfi + \xint_afterfi {\ifnum #1=0 - \xint@afterfi {\expandafter\space \romannumeral-`0#2{0}}% - \else \xint@afterfi { 0/1[0]}% + \xint_afterfi {\expandafter\space \romannumeral-`0#2{0}}% + \else \xint_afterfi { 0/1[0]}% \fi}% \fi }% -\def\XINT@cntf@loop #1#2#3% +\def\XINT_cntf_loop #1#2#3% {% - \ifnum #1>0 \else \XINT@cntf@exit \fi - \expandafter\XINT@cntf@loop\expandafter + \ifnum #1>0 \else \XINT_cntf_exit \fi + \expandafter\XINT_cntf_loop\expandafter {\the\numexpr #1-1\expandafter }\expandafter {\romannumeral0\xintadd {\xintDiv {1[0]}{#2}}{#3{#1}}}% {#3}% }% -\def\XINT@cntf@exit \fi - \expandafter\XINT@cntf@loop\expandafter +\def\XINT_cntf_exit \fi + \expandafter\XINT_cntf_loop\expandafter #1\expandafter #2#3% {% - \fi\xint@gobble@ii #2% + \fi\xint_gobble_ii #2% }% % \end{macrocode} % \subsection{\csh{xintGCntoF}} -% \begin{verbatim} +% \lverb|& % Modified in 1.06 to give the N first to a \numexpr rather than expanding -% twice. I just use \the\numexpr and maintain the previous code after that. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% twice. I just use \the\numexpr and maintain the previous code after that.| % \begin{macrocode} \def\xintGCntoF {\romannumeral0\xintgcntof }% \def\xintgcntof #1% {% - \expandafter\XINT@gcntf\expandafter {\the\numexpr #1}% + \expandafter\XINT_gcntf\expandafter {\the\numexpr #1}% }% -\def\XINT@gcntf #1#2#3% +\def\XINT_gcntf #1#2#3% {% \ifnum #1>0 - \xint@afterfi {\expandafter\XINT@gcntf@loop\expandafter + \xint_afterfi {\expandafter\XINT_gcntf_loop\expandafter {\the\numexpr #1-1\expandafter}\expandafter {\romannumeral-`0#2{#1}}{#2}{#3}}% \else - \xint@afterfi + \xint_afterfi {\ifnum #1=0 - \xint@afterfi {\expandafter\space\romannumeral-`0#2{0}}% - \else \xint@afterfi { 0/1[0]}% + \xint_afterfi {\expandafter\space\romannumeral-`0#2{0}}% + \else \xint_afterfi { 0/1[0]}% \fi}% \fi }% -\def\XINT@gcntf@loop #1#2#3#4% +\def\XINT_gcntf_loop #1#2#3#4% {% - \ifnum #1>0 \else \XINT@gcntf@exit \fi - \expandafter\XINT@gcntf@loop\expandafter + \ifnum #1>0 \else \XINT_gcntf_exit \fi + \expandafter\XINT_gcntf_loop\expandafter {\the\numexpr #1-1\expandafter }\expandafter {\romannumeral0\xintadd {\xintDiv {#4{#1}}{#2}}{#3{#1}}}% {#3}{#4}% }% -\def\XINT@gcntf@exit \fi - \expandafter\XINT@gcntf@loop\expandafter +\def\XINT_gcntf_exit \fi + \expandafter\XINT_gcntf_loop\expandafter #1\expandafter #2#3#4% {% - \fi\xint@gobble@ii #2% + \fi\xint_gobble_ii #2% }% % \end{macrocode} % \subsection{\csh{xintCntoCs}} -% \begin{verbatim} +% \lverb|& % Modified in 1.06 to give the N first to a \numexpr rather than expanding -% twice. I just use \the\numexpr and maintain the previous code after that. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% twice. I just use \the\numexpr and maintain the previous code after that.| % \begin{macrocode} \def\xintCntoCs {\romannumeral0\xintcntocs }% \def\xintcntocs #1% {% - \expandafter\XINT@cntcs\expandafter {\the\numexpr #1}% + \expandafter\XINT_cntcs\expandafter {\the\numexpr #1}% }% -\def\XINT@cntcs #1#2% +\def\XINT_cntcs #1#2% {% \ifnum #1<0 - \xint@afterfi { 0/1[0]}% + \xint_afterfi { 0/1[0]}% \else - \xint@afterfi {\expandafter\XINT@cntcs@loop\expandafter + \xint_afterfi {\expandafter\XINT_cntcs_loop\expandafter {\the\numexpr #1-1\expandafter}\expandafter {\expandafter{\romannumeral-`0#2{#1}}}{#2}}% \fi }% -\def\XINT@cntcs@loop #1#2#3% +\def\XINT_cntcs_loop #1#2#3% {% - \ifnum #1>-1 \else \XINT@cntcs@exit \fi - \expandafter\XINT@cntcs@loop\expandafter + \ifnum #1>-1 \else \XINT_cntcs_exit \fi + \expandafter\XINT_cntcs_loop\expandafter {\the\numexpr #1-1\expandafter }\expandafter {\expandafter{\romannumeral-`0#3{#1}},#2}{#3}% }% -\def\XINT@cntcs@exit \fi - \expandafter\XINT@cntcs@loop\expandafter +\def\XINT_cntcs_exit \fi + \expandafter\XINT_cntcs_loop\expandafter #1\expandafter #2#3% {% - \fi\XINT@cntcs@@exit #2% + \fi\XINT_cntcs__exit #2% }% -\def\XINT@cntcs@@exit #1,{ }% +\def\XINT_cntcs__exit #1,{ }% % \end{macrocode} % \subsection{\csh{xintCntoGC}} -% \begin{verbatim} +% \lverb|& % Modified in 1.06 to give the N first to a \numexpr rather than expanding -% twice. I just use \the\numexpr and maintain the previous code after that. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% twice. I just use \the\numexpr and maintain the previous code after that.| % \begin{macrocode} \def\xintCntoGC {\romannumeral0\xintcntogc }% \def\xintcntogc #1% {% - \expandafter\XINT@cntgc\expandafter {\the\numexpr #1}% + \expandafter\XINT_cntgc\expandafter {\the\numexpr #1}% }% -\def\XINT@cntgc #1#2% +\def\XINT_cntgc #1#2% {% \ifnum #1<0 - \xint@afterfi { 0/1[0]}% + \xint_afterfi { 0/1[0]}% \else - \xint@afterfi {\expandafter\XINT@cntgc@loop\expandafter + \xint_afterfi {\expandafter\XINT_cntgc_loop\expandafter {\the\numexpr #1-1\expandafter}\expandafter {\expandafter{\romannumeral-`0#2{#1}}}{#2}}% \fi }% -\def\XINT@cntgc@loop #1#2#3% +\def\XINT_cntgc_loop #1#2#3% {% - \ifnum #1>-1 \else \XINT@cntgc@exit \fi - \expandafter\XINT@cntgc@loop\expandafter + \ifnum #1>-1 \else \XINT_cntgc_exit \fi + \expandafter\XINT_cntgc_loop\expandafter {\the\numexpr #1-1\expandafter }\expandafter {\expandafter{\romannumeral-`0#3{#1}}+1/#2}{#3}% }% -\def\XINT@cntgc@exit \fi - \expandafter\XINT@cntgc@loop\expandafter +\def\XINT_cntgc_exit \fi + \expandafter\XINT_cntgc_loop\expandafter #1\expandafter #2#3% {% - \fi\XINT@cntgc@@exit #2% + \fi\XINT_cntgc__exit #2% }% -\def\XINT@cntgc@@exit #1+1/{ }% +\def\XINT_cntgc__exit #1+1/{ }% % \end{macrocode} % \subsection{\csh{xintGCntoGC}} -% \begin{verbatim} +% \lverb|& % Modified in 1.06 to give the N first to a \numexpr rather than expanding -% twice. I just use \the\numexpr and maintain the previous code after that. -% \end{verbatim} -% \vspace*{-1.5\baselineskip} +% twice. I just use \the\numexpr and maintain the previous code after that.| % \begin{macrocode} \def\xintGCntoGC {\romannumeral0\xintgcntogc }% \def\xintgcntogc #1% {% - \expandafter\XINT@gcntgc\expandafter {\the\numexpr #1}% + \expandafter\XINT_gcntgc\expandafter {\the\numexpr #1}% }% -\def\XINT@gcntgc #1#2#3% +\def\XINT_gcntgc #1#2#3% {% \ifnum #1<0 - \xint@afterfi { {0/1[0]}}% + \xint_afterfi { {0/1[0]}}% \else - \xint@afterfi {\expandafter\XINT@gcntgc@loop\expandafter + \xint_afterfi {\expandafter\XINT_gcntgc_loop\expandafter {\the\numexpr #1-1\expandafter}\expandafter {\expandafter{\romannumeral-`0#2{#1}}}{#2}{#3}}% \fi }% -\def\XINT@gcntgc@loop #1#2#3#4% +\def\XINT_gcntgc_loop #1#2#3#4% {% - \ifnum #1>-1 \else \XINT@gcntgc@exit \fi - \expandafter\XINT@gcntgc@loop@b\expandafter + \ifnum #1>-1 \else \XINT_gcntgc_exit \fi + \expandafter\XINT_gcntgc_loop_b\expandafter {\expandafter{\romannumeral-`0#4{#1}}/#2}{#3{#1}}{#1}{#3}{#4}% }% -\def\XINT@gcntgc@loop@b #1#2#3% +\def\XINT_gcntgc_loop_b #1#2#3% {% - \expandafter\XINT@gcntgc@loop\expandafter + \expandafter\XINT_gcntgc_loop\expandafter {\the\numexpr #3-1\expandafter}\expandafter {\expandafter{\romannumeral-`0#2}+#1}% }% -\def\XINT@gcntgc@exit \fi - \expandafter\XINT@gcntgc@loop@b\expandafter #1#2#3#4#5% +\def\XINT_gcntgc_exit \fi + \expandafter\XINT_gcntgc_loop_b\expandafter #1#2#3#4#5% {% - \fi\XINT@gcntgc@@exit #1% + \fi\XINT_gcntgc__exit #1% }% -\def\XINT@gcntgc@@exit #1/{ }% +\def\XINT_gcntgc__exit #1/{ }% % \end{macrocode} % \subsection{\csh{xintCstoGC}} % \begin{macrocode} \def\xintCstoGC {\romannumeral0\xintcstogc }% \def\xintcstogc #1% {% - \expandafter\XINT@cstc@prep \romannumeral-`0#1,\W,% + \expandafter\XINT_cstc_prep \romannumeral-`0#1,\W,% }% -\def\XINT@cstc@prep #1,{\XINT@cstc@loop@a {{#1}}}% -\def\XINT@cstc@loop@a #1#2,% +\def\XINT_cstc_prep #1,{\XINT_cstc_loop_a {{#1}}}% +\def\XINT_cstc_loop_a #1#2,% {% - \xint@w #2\XINT@cstc@end\W\XINT@cstc@loop@b {#1}{#2}% + \xint_gob_til_w #2\XINT_cstc_end\W + \XINT_cstc_loop_b {#1}{#2}% }% -\def\XINT@cstc@loop@b #1#2{\XINT@cstc@loop@a {#1+1/{#2}}}% -\def\XINT@cstc@end\W\XINT@cstc@loop@b #1#2{ #1}% +\def\XINT_cstc_loop_b #1#2{\XINT_cstc_loop_a {#1+1/{#2}}}% +\def\XINT_cstc_end\W\XINT_cstc_loop_b #1#2{ #1}% % \end{macrocode} % \subsection{\csh{xintGCtoGC}} % \begin{macrocode} \def\xintGCtoGC {\romannumeral0\xintgctogc }% \def\xintgctogc #1% {% - \expandafter\XINT@gctgc@start \romannumeral-`0#1+\W/% + \expandafter\XINT_gctgc_start \romannumeral-`0#1+\W/% }% -\def\XINT@gctgc@start {\XINT@gctgc@loop@a {}}% -\def\XINT@gctgc@loop@a #1#2+#3/% +\def\XINT_gctgc_start {\XINT_gctgc_loop_a {}}% +\def\XINT_gctgc_loop_a #1#2+#3/% {% - \xint@w #3\XINT@gctgc@end\W\expandafter\XINT@gctgc@loop@b\expandafter + \xint_gob_til_w #3\XINT_gctgc_end\W + \expandafter\XINT_gctgc_loop_b\expandafter {\romannumeral-`0#2}{#3}{#1}% }% -\def\XINT@gctgc@loop@b #1#2% +\def\XINT_gctgc_loop_b #1#2% {% - \expandafter\XINT@gctgc@loop@c\expandafter + \expandafter\XINT_gctgc_loop_c\expandafter {\romannumeral-`0#2}{#1}% }% -\def\XINT@gctgc@loop@c #1#2#3% +\def\XINT_gctgc_loop_c #1#2#3% {% - \XINT@gctgc@loop@a {#3{#2}+{#1}/}% + \XINT_gctgc_loop_a {#3{#2}+{#1}/}% }% -\def\XINT@gctgc@end\W\expandafter\XINT@gctgc@loop@b +\def\XINT_gctgc_end\W\expandafter\XINT_gctgc_loop_b {% - \expandafter\XINT@gctgc@@end + \expandafter\XINT_gctgc__end }% -\def\XINT@gctgc@@end #1#2#3{ #3{#1}}% -\XINT@cfrac@restorecatcodes@endinput% +\def\XINT_gctgc__end #1#2#3{ #3{#1}}% +\XINT_cfrac_restorecatcodes_endinput% % \end{macrocode} % \DeleteShortVerb{\|} % \MakePercentComment @@ -12256,7 +12069,7 @@ first place. Grave accent \` Left brace \{ Vertical bar \| Right brace \} Tilde \~} -\CheckSum{11366} +\CheckSum{11444} \makeatletter\check@checksum\makeatother \Finale %% diff --git a/Master/texmf-dist/source/generic/xint/xint.ins b/Master/texmf-dist/source/generic/xint/xint.ins index 035604e2639..24c8379d8bd 100644 --- a/Master/texmf-dist/source/generic/xint/xint.ins +++ b/Master/texmf-dist/source/generic/xint/xint.ins @@ -1,6 +1,6 @@ %% %%---------------------------------------------------------------- -%% The xint bundle (version 1.06a of May 9, 2013) +%% The xint bundle (version 1.06b of May 14, 2013) %% Copyright (C) 2013 by Jean-Francois Burnol %%---------------------------------------------------------------- %% -- cgit v1.2.3