From 6574ff6201be11b02c528187bda322fe9ac79d57 Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Tue, 2 Apr 2013 22:25:48 +0000
Subject: xinit (2apr13)

git-svn-id: svn://tug.org/texlive/trunk@29610 c570f23f-e606-0410-a88d-b1316a301751
---
 Master/texmf-dist/source/generic/xint/xint.dtx | 6164 ++++++++++++++++++++++++
 1 file changed, 6164 insertions(+)
 create mode 100644 Master/texmf-dist/source/generic/xint/xint.dtx

(limited to 'Master/texmf-dist/source/generic/xint/xint.dtx')

diff --git a/Master/texmf-dist/source/generic/xint/xint.dtx b/Master/texmf-dist/source/generic/xint/xint.dtx
new file mode 100644
index 00000000000..a652e6fa7c0
--- /dev/null
+++ b/Master/texmf-dist/source/generic/xint/xint.dtx
@@ -0,0 +1,6164 @@
+% -*- coding: iso-latin-1; -*-
+% File: xint.dtx
+%%----------------------------------------------------------------
+%% xint:    Expandable operations on long numbers
+%% xintgcd: Euclidean algorithm with xint package    
+%% Copyright (C) 2013 by Jean-Francois Burnol 
+%%----------------------------------------------------------------
+%<*ins>
+\def\pkgname{xint}
+\def\pkgdate{2013/03/28}
+\def\pkgversion{v1.0}
+\def\pkgdescription{Expandable operations on long numbers (jfB)}
+%</ins>
+%
+%     This work consists of the main source file xint.dtx and
+%     its derived files, among them the style files xint.sty,
+%     xintgcd.sty, and the documentation file xint.pdf.
+%
+%     The author of this work is Jean-Francois Burnol
+%     <jfbu at free dot fr>
+% 
+%     This work may be distributed and/or modified under the
+%     conditions of the LaTeX Project Public License, either
+%     version 1.3c of this license or (at your option) any later
+%     version. This version of this license is in 
+%          http://www.latex-project.org/lppl/lppl-1-3c.txt
+%     and the latest version of this license is in
+%          http://www.latex-project.org/lppl.txt
+%     and version 1.3 or later is part of all distributions of
+%     LaTeX version 2005/12/01 or later. 
+% 
+%  Installation and Usage:
+%  =======================
+%
+%  Run tex or latex on xint.dtx.
+% 
+%  This will extract the style files xint.sty and xintgcd.sty (and
+%  xint.ins). Files with the same names and in the same repertory
+%  will be overwritten. The tex (not latex) run will stop with the
+%  complaint that it does not understand \NeedsTeXFormat, but the
+%  style files will already have been extracted by that time.
+%
+%  Alternatively, run tex or latex on xint.ins if available.
+%
+%  To get xint.pdf run pdflatex thrice on xint.dtx
+%  
+%  xint.sty, xintgcd.sty -> TDS:tex/generic/xint/
+%  xint.dtx              -> TDS:source/generic/xint/
+%  xint.pdf              -> TDS:doc/generic/xint/
+% 
+%  It may well be necessary to then refresh the TeX installation
+%  filename database.
+%
+%  Usage with LaTeX: \usepackage{xint}
+%                    \usepackage{xintgcd}
+%
+%  Usage with TeX:   \input xint.sty\relax
+%                    \input xintgcd.sty\relax
+%
+%<*none>
+\def\lasttimestamp{Time-stamp: <31-03-2013 20:55:34 CEST jfb>}
+\def\docdate{2013/03/31}
+\def\striptimestamp#1 <#2 #3 #4 #5>{#2 at #3 #4}
+\edef\dtxtimestamp{\expandafter\striptimestamp\lasttimestamp}
+\begingroup
+\input docstrip.tex
+\askforoverwritefalse
+\generate{\nopreamble
+\file{\pkgname.ins}{\from{\pkgname.dtx}{ins}}
+\usepreamble\defaultpreamble
+\file{\pkgname.sty}{\from{\pkgname.dtx}{package}}
+\file{\pkgname gcd.sty}{\from{\pkgname.dtx}{gcd}}}
+\endgroup
+\iffalse
+%</none>
+%<*ins>
+%----------- -> .ins file ----------------------------------------
+%%
+%% This is a generated file. Run tex or latex on this file to
+%% extract xint.sty and xintgcd.sty from xint.dtx
+%%
+%% See xint.dtx for the statements of copyright and conditions of
+%% distribution and/or modification of this work.
+%%
+\input docstrip.tex
+\askforoverwritefalse
+\generate{\usepreamble\defaultpreamble
+\file{\pkgname.sty}{\from{\pkgname.dtx}{package}}
+\file{\pkgname gcd.sty}{\from{\pkgname.dtx}{gcd}}}
+\endbatchfile
+%----------- end of .ins file ------------------------------------
+%</ins>
+%<*none>
+\fi
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesFile{\pkgname.dtx}
+  [`\pkgname' source and documentation (\dtxtimestamp)]
+\documentclass[a4paper,11pt,abstract]{scrdoc}
+\pagestyle{headings}
+\usepackage[latin1]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[hscale=0.66,vscale=0.75]{geometry}
+
+\usepackage{xint}
+\usepackage{xintgcd}
+
+\usepackage{txfonts}
+
+% malheureusement, comme j'utilise des diacritiques dans mes
+% parties commentées, imprimées verbatim, je ne pourrai pas
+% utiliser dvipdfmx qui a un problème avec txtt
+
+\DeclareFontFamily{T1}{txtt}{}
+\DeclareFontShape{T1}{txtt}{m}{n}{	%medium
+     <->s*[.96] t1xtt%
+}{}
+\DeclareFontShape{T1}{txtt}{m}{sc}{	%cap & small cap
+     <->s*[.96] t1xttsc%
+}{}
+\DeclareFontShape{T1}{txtt}{m}{sl}{	%slanted
+     <->s*[.96] t1xttsl%
+}{}
+\DeclareFontShape{T1}{txtt}{m}{it}{	%italic
+     <->ssub * txtt/m/sl%
+}{}
+\DeclareFontShape{T1}{txtt}{m}{ui}{   	%unslanted italic
+     <->ssub * txtt/m/sl%
+}{}
+\DeclareFontShape{T1}{txtt}{bx}{n}{	%bold extended
+     <->t1xbtt%
+}{}
+\DeclareFontShape{T1}{txtt}{bx}{sc}{	%bold extended cap & small cap
+     <->t1xbttsc%
+}{}
+\DeclareFontShape{T1}{txtt}{bx}{sl}{	%bold extended slanted
+     <->t1xbttsl%
+}{}
+\DeclareFontShape{T1}{txtt}{bx}{it}{	%bold extended italic
+     <->ssub * txtt/bx/sl%
+}{}
+\DeclareFontShape{T1}{txtt}{bx}{ui}{  	%bold extended unslanted italic
+     <->ssub * txtt/bx/sl%
+}{}
+\DeclareFontShape{T1}{txtt}{b}{n}{	%bold
+     <->ssub * txtt/bx/n%
+}{}
+\DeclareFontShape{T1}{txtt}{b}{sc}{	%bold cap & small cap
+     <->ssub * txtt/bx/sc%
+}{}
+\DeclareFontShape{T1}{txtt}{b}{sl}{	%bold slanted
+     <->ssub * txtt/bx/sl%
+}{}
+\DeclareFontShape{T1}{txtt}{b}{it}{   	%bold italic
+     <->ssub * txtt/bx/it%
+}{}
+\DeclareFontShape{T1}{txtt}{b}{ui}{   	%bold unslanted italic
+     <->ssub * txtt/bx/ui%
+}{}
+
+\usepackage{xspace}
+\usepackage{color}
+
+\definecolor{joli}{RGB}{225,95,0}
+\definecolor{JOLI}{RGB}{225,95,0}
+\definecolor{BLUE}{RGB}{0,0,255}
+\definecolor{niceone}{RGB}{38,128,192}
+
+\usepackage[english]{babel}
+
+\usepackage[%
+pdfencoding=pdfdoc,bookmarks=true]{hyperref}
+
+\hypersetup{%
+linktoc=all,%
+breaklinks=true,%
+hidelinks,%
+pdfauthor={Jean-Fran\c cois Burnol},%
+pdftitle={The xint and xintgcd packages},%
+pdfsubject={Arithmetic with TeX},%
+pdfkeywords={Expansion, arithmetic, TeX},%
+pdfstartview=FitH,%
+pdfpagemode=UseOutlines}
+
+
+\makeatletter
+% 7 mars 2013
+% This macro allows to conveniently center a line inside a paragraph and still
+% use therein \verb or other commands changing catcodes.
+% A proposito, the \LaTeX \centerline uses \hsize and not \linewidth ! 
+\def\@centeredline {\hbox to \linewidth
+                        \bgroup \hss \bgroup
+                        \aftergroup\centeredline@ }
+    \newcommand*\centeredline {%
+      \ifhmode
+        \\\relax
+        \def\centeredline@{\hss\egroup\hskip\z@skip}%
+      \else
+        \def\centeredline@{\hss\egroup}%
+      \fi
+      \afterassignment\@centeredline
+      \let\next=}
+\makeatother
+
+\makeatletter
+\let\original@check@percent\check@percent
+\let\check@percent\relax
+% le \verb de doc.sty est très chiant car il a retiré 
+% \verbatim@font pour mettre un \ttfamily hard-coded
+% à la place. 
+% 
+% Par ailleurs j'en ai marre des erreurs dues au fait que mes
+% paragraphes reformatés dans emacs passent à la ligne au milieu
+% d'un \verb. Je décide donc d'annuler l'effet du \dospecials sur
+% les espaces dans la source. Et donc je retire le
+% \verb@eol@error et il n'y a donc plus lieu d'un comportement
+% différent pour l'impression des blancs, donné par la version étoilée.
+% 
+% Et il n'y avait donc pas de \obeylines puisque la fin de ligne
+% devenait un message d'erreur dans \verb@eol@error 
+%
+\def\verb {\relax \ifmmode \hbox \else \leavevmode \null \fi
+  \bgroup \let \do \do@noligs \verbatim@nolig@list \verbatim@font
+  \let \do \@makeother \dospecials \catcode 32 10 \@ifstar
+  {\@sverb }{\@sverb }}
+% ç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
+% utiliser & 
+\catcode`\& 13
+\def&{\begingroup\let\do\@makeother\dospecials\catcode`\& 13 \@jfverb }
+\def\@jfverb #1&{#1\endgroup }
+\makeatother
+
+\DeclareRobustCommand\csa[1]{{\ttfamily\char`\\#1}}
+\DeclareRobustCommand\csb[1]{{\color{blue}\ttfamily\char`\\#1}}
+
+\newcommand\ch[1]{\texorpdfstring{\csa{#1}}{\textbackslash #1}}
+\newcommand\chb[1]{\texorpdfstring{\csb{#1}}{\textbackslash #1}}
+
+
+\newcommand\xintname{%
+    \texorpdfstring{{\color{joli}\ttfamily\bfseries xint}}
+                   {xint}\xspace}
+
+\newcommand\xintgcdname{%
+    \texorpdfstring{{\color{joli}\ttfamily\bfseries xintgcd}}
+                   {xintgcd}\xspace}
+
+\frenchspacing
+
+\renewcommand\familydefault\sfdefault
+
+\usepackage{framed}
+
+\begin{document}
+\thispagestyle{empty}
+\rmfamily
+
+\begin{center}
+  {\normalfont\Large The \xintname and \xintgcdname packages}\\
+  \textsc{Jean-François Burnol}\par
+  \footnotesize \ttfamily 
+  jfbu (at) free (dot) fr\\
+  Package version: \pkgversion\ (\pkgdate)\\
+  Documentation generated from the source file\\
+  with timestamp ``\dtxtimestamp''
+\end{center}
+
+\begin{abstract}
+  The \xintname package implements with expandable \TeX{} macros
+  the basic arithmetic operations of addition, subtraction,
+  multiplication and division, as applied to arbitrarily long
+  numbers represented as chains of digits with an optional minus
+  sign.
+
+  The \xintgcdname package provides implementations of the
+  Euclidean algorithm and of its typesetting.
+
+  The packages may be used with Plain and with \LaTeX.
+\end{abstract}
+
+
+% à cause des XX.YY, mais franchement tout ce qui concerne la
+% table des matières est une catastrophe de conception avec LaTeX
+% et scrartcl n'améliore pas les choses tant que ça ici.
+\makeatletter
+\def\l@subsection {\bprot@dottedtocline {2}{1.5em}{2.8em}}
+\makeatother
+
+
+\tableofcontents
+
+\section{Origins of this package}
+
+The package |bigintcalc| by \textsc{Heiko Oberdiek} already
+provides expandable arithmetic operations on ``big numbers'',
+exceeding the \TeX{} limits (of &2^{31}-1&), so why another
+one? 
+
+I got started on this in early March 2013, via a thread on the
+|c.t.tex| usenet group, where \textsc{Ulrich D\,i\,e\,z} used the
+previously cited package together with a macro (|\ReverseOrder|)
+which I had contributed to another thread. \footnote{The
+  \csa{ReverseOrder} could be avoided in that circumstance, but it
+  does play a crucial r\^ole here.} What I had learned in this
+other thread thanks to interaction with \textsc{Ulrich D\,i\,e\,z} and
+\textsc{GL} on expandable manipulations of tokens motivated me to
+try my hands at addition and multiplication.
+
+I wrote macros \csa{bigMul} and \csa{bigAdd} which I posted to the
+newsgroup; they appeared to work comparatively fast. These first
+versions did not use the \eTeX{} \csa{numexpr} macro, they worked
+one digit at a time, having previously stored digit arithmetic in
+(many) macros.
+
+I noticed that the |bigintcalc| package used the \csa{numexpr}
+\eTeX{} primitive when available, but (as far as I could tell) not
+to do computations many digits at a time. Using \csa{numexpr} for
+one digit at a time for \csa{bigAdd} and \csa{bigMul} slowed them
+a tiny bit but avoided cluttering \TeX{} memory with 1200 macros
+storing pre-computed arithmetic with 2 or 3 digits. I wondered
+if some speed could be gained by using
+\csa{numexpr} to do four digits at a time for elementary
+multiplications (as the maximal admissible number for
+\csa{numexpr} has ten digits).
+
+The present package is the result of this initial questioning.
+
+\begin{framed}\centering
+  \xintname requires the \eTeX{} \csa{numexpr} primitive.
+\end{framed}
+
+I have aimed at speed wherever I could, and to the extent that I
+could guess what was more efficient for \TeX{}. After a while
+though I did opt for more readable coding style in those parts of
+the code which were not at the heart of repeatedly used loops. In
+particular I started using \csa{ifnum} and \csa{ifcase} constructs
+which I had completely avoided so far, working only with macro
+expansions.
+
+This implementation is thus a \TeX nical thing, quite different
+from what one would do in a structured programming language like
+|C|, although the underlying algorithms are just the standard
+steps applied to hand computations (nothing fancy like
+Fast Fourier Transform...)
+
+By the way, yes \xintname enjoys working fast and efficiently with
+200 digits numbers, but surely any program (even poorly written)
+in |C| using the |CPU| for arithmetic operations on arrays of
+numbers (not digits!!!) will work thousands of times faster (or
+more, I don't know) than what can be achieved using \TeX{} to
+manipulate strings of ASCII representations of digits!
+
+% \pdfresettimer
+% \edef\x{\xintPow{1325798301}{137}}
+% \the\pdfelapsedtime\ 
+% \xintLen{\x}
+
+% \pdfresettimer
+% \edef\x{\xintFac{1000}}
+% \edef\T{\the\pdfelapsedtime}\T= 
+% \xintQuo\T{65536} secondes\par
+% \pdfresettimer
+% \edef\y{\xintSqr{\x}}
+% \edef\T{\the\pdfelapsedtime}\T=
+% \xintQuo\T{65536} secondes\par
+% \xintLen{\x}\par
+% \xintLen{\y}\par
+
+% Sur l'iMac c'est un peu plus rapide:
+% 55570 1250
+% 573033= 8 secondes
+% 3382960= 51 secondes
+% 2568
+% 5136
+
+% This warning being issued, \xintname computes &1325798301^{137}&
+% which has 1250 digits in less than 1 second (on my 2012 acquired
+% laptop). It checks a Bezout identity involving two multiplications
+% of 200 digits numbers (and a subtraction) in one 12th of a second.
+% It computes 1000! (which has 2568 digits) in less than 10 seconds
+% and its square in less than 60 seconds: of course this will be
+% dwarfed by any specialized software. Communicating such
+% computation times from runs on an unspecified machine is not very
+% precise, but I guess my laptop is representative of the models of
+% the last two years.
+
+\section{Expansions}
+
+Except otherwise stated all macros are completely expandable. For
+example, with the following code snippet within |myfile.tex|
+\begin{verbatim}
+\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!&.
+Or, similar things can happen inside a |\csname...\endcsname|, and
+of course in an |\edef|.
+
+\edef\x{\xintQuo{\xintPow {2}{1000}}{\xintFac{100}}}
+\edef\y{\xintLen{\x}}
+\def\allownumbersplit #1%
+     {\ifx #1\relax \else #1\hskip 0pt plus 1pt 
+       \expandafter\allownumbersplit\fi}%
+
+Furthermore the package macros give their final results in two
+expansion steps. They twice expand their arguments so that they
+can be arbitrarily chained. Hence \centeredline{%
+  |\xintLen{\xintQuo{\xintPow{2}{1000}}{\xintFac{100}}}|} expands
+in two steps and tells us that &[2^{1000}/100!]& has {\y}
+digits. This is not so many and we could print it here:
+{\expandafter\expandafter\expandafter\allownumbersplit
+  \xintQuo{\xintPow {2}{1000}}{\xintFac{100}}\relax}. 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 this
+little macro (not provided by the package):
+\begin{verbatim}
+\def\allownumbersplit #1%
+   {\ifx #1\relax \else #1\hskip 0pt plus 1pt 
+                        \expandafter\allownumbersplit\fi}%
+\expandafter\expandafter\expandafter\allownumbersplit
+  \xintQuo{\xintPow {2}{1000}}{\xintFac{100}}\relax
+\end{verbatim}
+
+Remarks on the double expansion of arguments:
+\begin{enumerate}
+\item When I say that the macros expand twice their arguments,
+  this means that they expand the first token seen (for each
+  argument), then expand again the first token of the result of
+  the first expansion. For example
+  \centeredline{|\def\x{12}\def\y{34}|%
+    |\xintAdd {\x}{\x\y}|} is \emph{not} a legal construct. It works here
+  by sheer luck as the |\y| gets expanded inside a |\numexpr|. But
+  this would fail in general: if you need a more complete
+  (expandable...) expansion of your initial input, you should use
+  the \fbox{\csa{bigintcalcNum}} macro from the |bigintcalc|
+  package. Or, outside of an expandable-only context, just massage
+  your inputs through \csa{edef}'s.
+
+\item Unfortunately, after |\def\x {12}|, one can not use just
+  |-\x| as input to one of the package macros: the rules above
+  explain that the twice expansion will act only on the minus sign,
+  hence do nothing. The only way is to use the \csb{xintOpp}
+  macro, as in for example |\xintAdd
+  {\xintOpp\x}{\x}|\,=\,{\xintAdd {\xintOpp\x}{\x}}.
+
+\def\x {12}%
+\item With the definition \centeredline{%
+    |\def\AplusBC #1#2#3{\xintAdd {#1}{\xintMul {#2}{#3}}}|} one
+  obtains an expandable macro producing the expected result, not
+  in two, but rather in three steps: a first expansion is consumed
+  by the macro expanding to its definition. As a result {|\xintAdd
+    {\AplusBC {1}{2}{3}}{4}|} would then miserably fail. The
+  solution is to use the \emph{lowercase} form of 
+  \csa{xintAdd}: \centeredline {|\def\AplusBC
+    #1#2#3{\romannumeral0\xintadd {#1}{\xintMul {#2}{#3}}}|}%
+  and then \csa{AplusBC} will share the same properties as do the
+  other \xintname `primitive' macros.
+% ENFIN DÉBARRASSÉ DES TRÈS TRÈS TRÈS CHIANTS EOL ERROR DE \verb !!!
+
+  Don't leave any space after the zero, and use the lowercase form
+  \emph{only} for the external highest level of chained commands.
+  All \xintname provided public macros have such a lowercase form
+  for this purpose.
+\end{enumerate}
+
+\section {Inputs}
+
+After a twice expansion of the arguments, the ensuing numbers have
+to be strings of digits with one (and not more) optional minus
+sign (and not a plus sign). The first digit is not 
+zero if there are more than one digit. And |-0| is not legal
+input. Syntax such as
+|\xintMul\A\B| is accepted and equivalent to |\xintMul {\A}{\B}|.
+Or course |\xintAdd\xintMul\A\B\C| does not work, the product
+operation must be put within braces:
+|\xintAdd{\xintMul\A\B}\C|.
+
+It would be nice to have a functional form |\add(x,\mul(y,z))| but
+this is not provided by the package. Arguments must be either
+within braces or a single control sequence.
+
+For the division (but not for addition, subtraction, or
+division), the two inputs must have at most
+&2^{31}-9=&{\xintSub{\xintPow {2}{31}}{9}} digits. 
+
+Anyhow I guess that even much smaller sizes exceed the \TeX{}
+memory limits on any installation. But if the situation did arise
+nevertheless of such a gigantic input, an arithmetic overflow
+would occur (after some long time I guess) as \xintname first
+computes the length of the inputs by using \csa{numexpr} with
+successive additions of the number |8| to itself until the whole
+input has been parsed (this initial step is only for the division
+algorithm, the three other arithmetic operations remain unaware of
+the sizes of their inputs, although they do experience them in a
+sense, as they initially reverse the order of digits of at least
+one of the input, which means they have to scan it entirely).
+
+Also: the factorial function \csa{xintFac} will refuse to
+(start...) compute |N!| if |N| $\geq$ 1000000000, and the power function
+|\xintPow {A}{B}|, when the absolute value \verb+|A|+ is at
+least two, will refuse to start the computation if |B| $\geq$ 1000000000
+(the minimal outcome is &2^{1000000000}& which has 301029996 digits...).
+
+In those latter cases, no arithmetic overflow will happen, but rather,
+copied from package |bigintcalc|, undefined control sequences with
+names indicating the source of the problem are inserted in the
+token stream and will appear in the log file in \TeX{} `undefined
+macro' error messages. This will not stop the
+computation, which (most of the time) will output a zero.
+
+No check is done on the format of the inputs after the initial
+twice expansion. Often, but not always, something starting with a
+|0| will be assumed to be zero (throwing the rest away, or
+sometimes not which then will lead to errors). Plus signs are not
+accepted and will cause errors.
+
+The sole exception is the macro \csb{xintNum} which accepts numbers
+starting with an arbitrary long sequence of plus signs, minus
+signs, followed by zeros and will remove all of them, keeping only
+the correct sign: \centeredline{|\xintNum
+  {+-+-+----++-++----00000000009876543210}|\texttt{=\xintNum
+    {+-+-+----++-++----0000000009876543210}}} But don't insert
+zeros within the initial signs. As with all other package macros,
+\csa{xintNum} expands twice its argument, and obtains its final
+result in two expansion steps.
+
+\begin{framed}
+  \TeX{}'s count registers cannot be directly used but must be
+  prefixed by |\the| or |\number|. The same for \csa{numexpr}
+  expressions.
+\end{framed}
+
+\section{Outputs}
+
+The output, when it consists of a single number, is always in the
+normalized form described in the previous section. Some macros
+have an output consisting of more than one number, each one is
+then within braces. For example \csb{xintDivision} gives first the
+quotient and then the remainder, each of them within braces. This
+is for programming purposes to avoid having to do twice the
+division, once for the quotient, the other one for the remainder: but
+of course macros \csb{xintQuo} and \csb{xintRem} are provided for easier
+direct access.
+
+The macro \csb{xintDecSplit} cuts its second argument at a
+location specified by its first argument |x|. When |x| is negative
+the cut location is from the left end of the number, and if it
+exceeds the right end (least significant digit), the second member
+of the \csa{xintDecSplit} output will be an \emph{empty} pair of braces;
+and if the cut is not too far to the right, the leading zeros of
+the right half will not be removed. This is the only case where a
+package macro may output something which would need to be input to
+\csa{xintNum} before further processing by the other package
+macros.
+
+When using things such as |\ifcase \xintSgn {\A}| one has to leave
+a space after the closing brace for \TeX{} to
+stop its scanning for a number: once \TeX{} has finished expanding
+|\xintSgn{\A}| and has so far obtained either |1|, |0|, or |-1|, a
+space (or something `unexpandable') must stop it looking for more digits.
+
+\section{Assignments}
+
+\xintAssign\xintBezout{357}{323}\to\tmpA\tmpB\tmpU\tmpV\tmpD
+
+The end user might not need to maintain at all times complete
+expandability. For example why not allow oneself the two definitions
+|\edef\A {\xintQuo{100}{3}}| and |\edef\B {\xintRem {100}{3}}|. A special
+  syntax is provided to make these things more efficient, as we
+  know that \csa{xintDivision} computes both the quotient and the
+  remainder at the same time:
+  \centeredline{\csb{xintAssign}\csa{xintDivision}|{100}{3}|\csb{to}|\A\B|}
+  \centeredline{\csb{xintAssign}\csa{xintDivision}%
+|{\xintPow {2}{1000}}{\xintFac{100}}|\csb{to}|\A\B|} gives
+\xintAssign\xintDivision{\xintPow {2}{1000}}{\xintFac{100}}\to\A\B
+|\meaning\A|\texttt{: \expandafter\allownumbersplit\meaning\A\relax} and
+|\meaning\B|\texttt{: \expandafter\allownumbersplit\meaning\B\relax}. 
+
+
+  Another example (which uses a macro from the \xintgcdname
+  package):
+  \centeredline{\csb{xintAssign}\csa{xintBezout}|{357}{323}|%
+    \csb{to}|\A\B\U\V\D|} is equivalent to setting |\A| to
+  \texttt{\tmpA}, |\B| to \texttt{\tmpB}, |\U| to \texttt{\tmpU},
+  |\V| to \texttt{\tmpV}, and |\D| to \texttt{\tmpD}. And indeed
+  (\tmpU)$\times$\tmpA-(\tmpV)$\times$\tmpB=
+   \xintSub{\xintMul\tmpU\tmpA}{\xintMul\tmpV\tmpB}
+  is a Bezout Identity.
+\xintAssign\xintBezout{3570902836026}{200467139463}\to\tmpA\tmpB\tmpU\tmpV\tmpD
+\centeredline{\csb{xintAssign}\csa{xintBezout}|{3570902836026}{200467139463}|%
+    \csb{to}|\A\B\U\V\D|} gives then |\U|\texttt{:
+    \expandafter\allownumbersplit\meaning\tmpU\relax} and 
+|\V|\texttt{: \expandafter\allownumbersplit\meaning\tmpV\relax}.
+
+
+
+  When one does not know in advance the number of tokens, one can
+  use \csa{xintAssignArray} or its synonym \csa{xintDigitsOf}:
+  \centeredline{\csb{xintDigitsOf}\csa{xintPow}|{2}{100}|\csb{to}\csa{Out}}
+  This defines \csa{Out} to be macro with one parameter,
+  \csa{Out}|{0}| gives the size |N| of the array and
+  \csa{Out}|{n}|, for |n| from |1| to |N| then gives the |n|th
+  element of the array, here the |n|th digit of &2^{100}&, from
+  the most significant to the least significant. As usual, the
+  generated macro \csa{Out} is completely expandable and expands twice its
+  (unique) argument. Consider the following code snippet:
+\begin{verbatim}
+\newcount\cnta
+\newcount\cntb
+\begingroup
+\xintDigitsOf\xintPow{2}{100}\to\Out
+\cnta = 1
+\cntb = 0
+\loop
+\advance \cntb \xintSqr{\Out{\the\cnta}}
+\ifnum \cnta < \Out{0}
+\advance\cnta 1
+\repeat
+
+|2^{100}| (=\xintPow {2}{100}) has \Out{0} digits and the sum of
+their squares is \the\cntb. These digits are, from the least to
+the most significant: \cnta = \Out{0} 
+\loop \Out{\the\cnta}\ifnum \cnta > 1 \advance\cnta -1 , \repeat.
+\endgroup
+\end{verbatim}
+
+\newcount\cnta
+\newcount\cntb
+\begingroup
+\xintDigitsOf\xintPow{2}{100}\to\Out
+\cnta = 1
+\cntb = 0
+\loop
+\advance \cntb \xintSqr{\Out{\the\cnta}}
+\ifnum \cnta < \Out{0}
+\advance\cnta 1
+\repeat
+
+&2^{100}& (=\xintPow {2}{100}) has \Out{0} digits and the sum of
+their squares is \the\cntb. These digits are, from the least to
+the most significant: \cnta = \Out{0} 
+\loop \Out{\the\cnta}\ifnum \cnta > 1 \advance\cnta -1 , \repeat.
+\endgroup
+
+We used a group in order to release the memory taken by the
+\csa{Out} array: indeed internally, besides \csa{Out} itself,
+additional macros are defined which are \csa{Out0}, \csa{Out00},
+\csa{Out1}, \csa{Out2}, ..., \csa{OutN}, where |N| is the size of
+the array (which is the value returned by |\Out{0}|; the digits
+are parts of the names not arguments). 
+
+The command \csb{xintRelaxArray}\csa{Out} sets all these macros to
+\csa{relax}, but it was simpler to put everything withing a group.
+
+Needless to say \csb{xintAssign}, \csb{xintAssignArray} and
+\csb{xintDigitsOf} do not do any check on whether the macros they
+define are already defined.
+
+In the example above, we deliberately broke all rules of complete
+expandability, but had we wanted to compute the sum of the digits,
+not the sum of the squares, we could just have written:
+\centeredline{\csb{xintSum}|{\xintPow{2}{100}}=|\texttt{%
+    \xintSum{\xintPow{2}{100}}}} Indeed, \csa{xintSum} is usually
+used as in \centeredline{%
+  \csb{xintSum}|{{123}{-345}{\xintFac{7}}{\xintOpp{\xintRem{3347}{591}}}}=|\texttt{%
+    \xintSum{{123}{-345}{\xintFac{7}}{\xintOpp{\xintRem{3347}{591}}}}}}
+but in the example above each digit of &2^{100}& is treated as
+would have been a summand enclosed within braces, due to the rules
+of \TeX{} for parsing macro arguments.
+
+Note that |{-\xintRem{3347}{591}}| is not a valid input, because
+the double expansion will apply only to the minus sign and leave
+unaffected the |\xintRem|. So we used \csa{xintOpp} which replaces
+a number with its opposite.
+
+As another use of \csa{xintAssignArray} let us extract one line
+from the source code of the \xintgcdname macro
+\csb{xintTypesetEuclideAlgorithm}.
+\centeredline{|\xintAssignArray\xintEuclideAlgorithm
+  {#1}{#2}\to\U|}
+This is done inside a group. After this command |\U{1}| contains
+the number |N| of steps of the algorithm (not to be confused with
+|\U{0}=2N+4| which is the number of elements in the |\U| array),
+and the GCD is to be found in |\U{3}|, a convenient location
+between |\U{2}| and |\U{4}| which are (absolute values of the
+twice expansion of) the
+initial inputs. Then follow |N| quotients and remainders
+from the first to the last step of the algorithm. The
+\csa{xintTypesetEuclideAlgorithm} macro organizes this data
+for typesetting: this is just an example of one way to do it. 
+
+
+%% As an example: \xintTypesetEuclideAlgorithm {2362001530033}{981106461701}
+
+\section{Error messages}
+
+We employ the same method as in the |bigintcalc| package. But the
+error is always thrown \emph{before} the end of the
+|romannumeral0| expansion so as to not disturb further processing
+of the token stream, if the operation was a secondary one whose
+output is expected by a first one. Here is the list of possible
+errors:
+\begin{verbatim}
+\xintError:ArrayIndexIsNegative
+\xintError:ArrayIndexBeyondLimit
+\xintError:FactorialOfNegativeNumber
+\xintError:FactorialOfTooBigNumber
+\xintError:DivisionByZero
+\xintError:FractionRoundedToZero
+\xintError:ExponentTooBig
+\xintError:TooBigDecimalShift
+\xintError:TooBigDecimalSplit
+\xintError:NoBezoutForZeros
+\end{verbatim}
+
+\section{Package namespace}
+
+Inner macros of the \xintname and \xintgcdname packages all begin
+either with |\XINT@| or with |\xint@|. 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 two steps to
+their full expansion (and can thus be chained with the `primitive'
+\xintname macros). Some other control sequence names are used
+only as delimiters, and left undefined.
+
+The |\xintReverseOrder|\marg{tokens} macro uses |\XINT@UNDEF| and
+|\XINT@undef| as dummy tokens and can be used on arbitrary token
+strings not containing these control sequence names. Anything
+within braces is treated as one unit: one level of exterior braces
+is removed and the contents are not reverted.
+
+\section{Loading and usage}
+
+\begin{verbatim}
+ Usage with LaTeX: \usepackage{xint}
+                   \usepackage{xintgcd}
+
+ Usage with TeX:   \input xint.sty\relax
+                   \input xintgcd.sty\relax
+\end{verbatim}
+
+We have added, directly copied from packages by \textsc{Heiko
+  Oberdiek}, a mecanism of re-load and \eTeX{} detection,
+especially for Plain \TeX{}. As \eTeX{} is required, the
+executable |tex| can not be used, |etex| or |pdftex| (version
+|1.40| or later) or ..., must
+be invoked.
+
+Furthermore, the package \xintgcdname will check for previous
+loading of \xintname, and will try to load it if this was not
+already done.
+
+Also inspired from the \textsc{Heiko Oberdiek} packages we have
+included a complete catcode protection mecanism. The packages may
+be loaded in any catcode configuration satisfying these
+requirements: the percent is comment character, the backslash is
+escape character, digits have category code other and letters have
+category code letter. Nothing else is assumed, and the previous
+configuration is restored after the loading of the packages.
+
+This is for the loading of the packages. For the actual use of the
+macros, note that when feeding them with negative numbers the
+minus sign must have category code other, as is standard.
+
+\xintname presupposes that the usual \csa{space} and
+\csa{empty} macros are pre-defined, which is the case in Plain
+\TeX{} as well as in \LaTeX. 
+
+Lastly, the macros \csa{xintRelaxArray} (of \xintname) and
+\csa{xintTypesetEuclideAlgorithm} and
+\csa{xintTypesetBezoutAlgorithm} (of \xintgcdname) use 
+\csa{loop}, both Plain and \LaTeX{} incarnations are
+compatible. \csa{xintTypesetBezoutAlgorithm} also uses the
+\csa{endgraf} macro.
+ 
+
+\section{Installation}
+
+\begin{verbatim}
+ Run tex or latex on xint.dtx.
+
+ This will extract the style files xint.sty and xintgcd.sty (and
+ xint.ins). Files with the same names and in the same repertory
+ will be overwritten. The tex (not latex) run will stop with the
+ complaint that it does not understand \NeedsTeXFormat, but the
+ style files will already have been extracted by that time.
+
+ Alternatively, run tex or latex on xint.ins if available.
+
+ To get xint.pdf run pdflatex thrice on xint.dtx
+ 
+ xint.sty, xintgcd.sty -> TDS:tex/generic/xint/
+ xint.dtx              -> TDS:source/generic/xint/
+ xint.pdf              -> TDS:doc/generic/xint/
+
+ It may well be necessary to then refresh the TeX installation
+ filename database.
+\end{verbatim}
+
+
+\section{Commands of the \xintname package}
+
+\def\n{\string{N\string}}
+\def\m{\string{M\string}}
+\def\x{\string{x\string}}
+
+\n{} stands for a normalised number within braces as described in
+the documentation, or for a control sequence expanding in at most
+two steps to such a number (without the braces!), or for a control
+sequence within braces expanding in at most two steps to such a
+number, of for material within braces which expands in two
+expansion of the first token to such a number.
+
+\subsection{\chb{xintRev}}
+
+\csa{xintRev\n} will revert the order of the digits of the number,
+keeping the optional sign. Leading zeros
+resulting from the operation are not removed (see the
+\csa{xintNum} macro for this).
+\centeredline{|\xintRev{-123000}|\texttt{=\xintRev{-123000}}}
+\centeredline{|\xintNum{\xintRev{-123000}}|\texttt{=\xintNum{\xintRev{-123000}}}}
+
+\subsection{\chb{xintReverseOrder}}
+
+\csa{xintReverseOrder}\marg{token\_list} does not do any
+expansion of its argument and just reverses the order of the
+tokens. Brace pairs encountered are removed once and the enclosed
+material does not get reverted.
+
+\subsection{\chb{xintNum}}
+
+\csa{xintNum\n} removes chains of plus or minus signs, followed by
+zeros.
+\centeredline{|\xintNum{+---++----+--000000000367941789479}|\texttt
+{=\xintNum{+---++----+--000000000367941789479}}}
+
+\subsection{\chb{xintLen}}
+
+\csa{xintLen\n} returns the length of the number, not counting the
+sign.
+\centeredline{|\xintLen{-12345678901234567890123456789}|\texttt
+{=\xintLen{-12345678901234567890123456789}}}
+
+\subsection{\chb{xintLength}}
+
+\csa{xintLength}\marg{token\_list} does not do any expansion of
+its argument and just counts how many tokens there are. Things
+enclosed in braces count as one, and there should be no such
+brace group within the final eight slots.
+
+\subsection{\chb{xintAssign}}
+
+\csa{xintAssign}\meta{braced things}\csa{to}%
+\meta{as many cs as they are things} defines (without checking if
+something gets overwritten) the control sequences on the right of
+\csa{to} to be the complete expansions of the successive things on
+the left of \csa{to} enclosed within braces. 
+
+Important: a double expansion is applied first to the material
+extending up to \csa{to}.
+
+\xintAssign\xintPow {7}{13}\to\SevenToThePowerThirteen
+\xintAssign\xintDivision{1000000000000}{133333333}\to\Q\R
+
+As a special exception, if after this initial double expansion a
+brace does not immediately follows \csa{xintAssign}, it is assumed
+that there is only one control sequence to define and it is then
+defined to be the complete expansion of the material between
+\csa{xintAssign} and \csa{to}.
+\centeredline{|\xintAssign\xintDivision{1000000000000}{133333333}\to\Q\R|}
+\centeredline{|\meaning\Q: |\texttt{\meaning\Q}, |\meaning\R:
+  |\texttt{\meaning\R}} \centeredline{|\xintAssign\xintPow
+  {7}{13}\to\SevenToThePowerThirteen|}
+\centeredline{|\SevenToThePowerThirteen=|\texttt{\SevenToThePowerThirteen}}
+
+Of course this macro and its cousins completely break usage in
+pure expansion contexts, as assignments are made via the
+\csa{edef} primitive.
+
+\subsection{\chb{xintAssignArray}}
+
+\xintAssignArray\xintBezout {1000}{113}\to\Bez
+
+\csa{xintAssign}\meta{braced things}\csa{to}\csa{myArray} first
+double expands the first token then defines \csa{myArray} to be a
+macro with one parameter, such that \csa{myArray\n} expands in two
+steps (which include the twice-expansion of \texttt{\n}) to give
+the |N|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
+  {1000}{113}\to\Bez|} will set |\Bez{0}| to \texttt{\Bez0},
+|\Bez{1}| to \texttt{\Bez1}, |\Bez{2}| to \texttt{\Bez2},
+|\Bez{3}| to \texttt{\Bez3}, |\Bez{4}| to \texttt{\Bez4}, and
+|\Bez{5}| to \texttt{\Bez5}:
+(\Bez3)${}\times{}$\Bez1${}-{}$(\Bez4)${}\times{}$\Bez2${}={}$\Bez5.
+
+\subsection{\chb{xintRelaxArray}}
+
+\csa{xintRelaxArray}\csa{myArray} sets to \csa{relax} all 
+macros which were defined by the previous \csa{xintAssignArray}
+with \csa{myArray} as array name. 
+
+\subsection{\chb{xintDigitsOf}}
+
+This is a synonym for \csa{xintAssignArray}, to be used to define
+an array giving all the digits of a given number.
+
+\subsection{\chb{xintSgn}}
+
+\csa{xintSgn\n} returns 1 if the number is positive, 0 if it is
+zero and -1 if it is negative.
+
+\subsection{\chb{xintOpp}}
+
+\csa{xintOpp\n} returns the opposite |-N| of the number |N|.
+
+\subsection{\chb{xintAbs}}
+
+\csa{xintAbs\n} returns the absolute value of the number.
+
+\subsection{\chb{xintAdd}}
+
+\csa{xintAdd\n\m} returns the sum of the two numbers.
+
+\subsection{\chb{xintSub}}
+
+\csa{xintSub\n\m} returns the difference |N-M|.
+
+\subsection{\chb{xintCmp}}
+
+\csa{xintCmp\n\m} returns 1 if |N>M|, 0 if |N=M|, and -1 if |N<M|.
+
+\subsection{\chb{xintGeq}}
+
+\csa{xintGeq\n\m} returns 1 if the absolute value of the first
+number is at least equal to the absolute value of the second
+number. If \verb+|N|<|M|+ it returns 0.
+
+\subsection{\chb{xintMax}}
+
+\csa{xintMax\n\m} returns the largest of the two in the sense of the order
+structure on the relative integers (\emph{i.e.} the right-most
+number if they are put on a line with positive numbers on the right).
+
+\subsection{\chb{xintMin}}
+
+\csa{xintMin\n\m} returns the smallest of the two in the sense of the order
+structure on the relative integers (\emph{i.e.} the left-most
+number if they are put on a line with positive numbers on the right).
+
+\subsection{\chb{xintSum}}
+
+\csa{xintSum}\marg{braced things} after expanding its argument
+twice expects to find a sequence of tokens (or braced material).
+Each is twice-expanded, and the sum of all these numbers is
+returned. 
+\centeredline{%
+  \csa{xintSum}|{{123}{-98763450}{\xintFac{7}}{\xintMul{3347}{591}}}=|\texttt{%
+    \xintSum{{123}{-98763450}{\xintFac{7}}{\xintMul{3347}{591}}}}}
+\centeredline{\csa{xintSum}|{1234567890}=|\texttt{%
+     \xintSum{1234567890}}}
+
+\subsection{\chb{xintSumExpr}}
+
+\csa{xintSum}\meta{braced things}\csa{relax} is to what
+\csa{xintSum} reduces after its initial double expansion of its
+argument. \centeredline{%
+  \csa{xintSumExpr}| {123}{-98763450}|%
+  |{\xintFac{7}}{\xintMul{3347}{591}}\relax=|\texttt{%
+    \xintSumExpr {123}{-98763450}{\xintFac{7}}{\xintMul{3347}{591}}\relax}}
+
+\subsection{\chb{xintMul}}
+
+\csa{xintMul\n\m} returns the product of the two numbers.
+
+\subsection{\chb{xintSqr}}
+
+\csa{xintSqr\n} returns the square.
+
+\subsection{\chb{xintPrd}}
+
+\csa{xintPrd}\marg{braced things} after expanding its argument
+twice expects to find a sequence of tokens (or braced material).
+Each is twice-expanded, and the product of all these numbers is
+returned. 
+\centeredline{%
+  \csa{xintPrd}|{{-9876}{\xintFac{7}}{\xintMul{3347}{591}}}=|%
+\texttt{%
+    \xintPrd{{-9876}{\xintFac{7}}{\xintMul{3347}{591}}}}}
+\centeredline{\csa{xintPrd}|{123456789123456789}=|\texttt{%
+     \xintPrd{123456789123456789}}}
+
+
+\subsection{\chb{xintProductExpr}}
+
+\csa{xintProductExpr}\meta{braced things}\csa{relax} is to what
+\csa{xintPrd} reduces after its initial double expansion of its
+argument. 
+\centeredline{\csa{xintProductExpr}| 123456789123456789\relax=|\texttt{%
+     \xintProductExpr 123456789123456789\relax}}
+
+\subsection{\chb{xintFac}}
+
+\csa{xintFac\n} returns the factorial. It is an error if the
+argument is negative or at least &10^9&. It is not recommended to
+launch the computation of things such as &100000!&, if you need
+your computer for other tasks.
+
+\subsection{\chb{xintPow}}
+
+\csa{xintPow\n\m} returns |N^M|. When |M| is zero, this is 1. Some
+cases (|N| zero and |M| negative, \verb+|N|>1+ and |M| negative,
+\verb+|N|>1+ and |M| at least &10^9&) make \xintname throw errors. 
+
+\subsection{\chb{xintDivision}}
+
+\csa{xintDivision\n\m} returns |{quotient Q}{remainder R}|. This
+is euclidean division: |N = QM + R|, |0|${}\leq{}$\verb+R < |M|+. So the
+remainder is always non-negative and the formula |N = QM + R|
+always holds independently of the signs of |N| or |M|. Division by
+zero is of course an error (even if |N| vanishes) and returns |{0}{0}|.
+
+\subsection{\chb{xintQuo}}
+
+\csa{xintQuo\n\m} returns the quotient from the euclidean division.
+
+\subsection{\chb{xintRem}}
+
+\csa{xintRem\n\m} returns the remainder from the euclidean division.
+
+
+\subsection{\chb{xintFDg}}
+
+\csa{xintFDg\n} returns the first digit (most significant) of the
+decimal expansion.
+
+\subsection{\chb{xintLDg}}
+
+\csa{xintLDg\n} returns the least significant digit. When the
+number is positive, this is the same as the remainder in the
+euclidean division by ten.
+
+\subsection{\chb{xintOdd}}
+
+\csa{xintOdd\n} is 1 if the number is odd and 0 otherwise. 
+
+\subsection{\chb{xintDSL}}
+
+\csa{xintDSL\n} is decimal shift left, \emph{i.e.} multiplication
+by ten.
+
+\subsection{\chb{xintDSR}}
+
+\csa{xintDSR\n} is decimal shift right, \emph{i.e.} it removes the
+last digit (keeping the sign). For a positive number, this is the
+same as the quotient from the
+euclidean division by ten.
+
+\subsection{\chb{xintDSH}}
+
+\csa{xintDSH\x\n} is parametrized decimal shift. When |x| is
+negative, it is like iterating \csa{xintDSL} \verb+|x|+ times
+(\emph{i.e.} multiplication by &10^{-&|x|&}&). When |x| is
+positive, it is like iterating \csa{DSR} |x| times. When |x|
+exceeds the length of the number, the result is zero.
+
+\subsection{\chb{xintDecSplit}}
+
+
+\csa{xintDecSplit\x\n} cuts the number into two pieces (each
+within a pair of enclosing braces). First the
+sign if present is \emph{removed}. Then, when |x|
+is positive or vanishes, this is like the
+euclidean division by &10^{&|x|&}&. When |x| is negative the
+number is split into a first piece with the \verb+|x|+ most
+significant digits and a second piece with the remaining digits.
+Leading zeros in this second piece are not removed. In the case
+where the absolute value of |x| is at least the length of the
+number, the second piece is empty (not zero!). So the absolute
+value of the original number is always the concatenation of the
+first and second piece, in this case with a negative |x|.
+\xintAssign\xintDecSplit {0}{-123004321}\to\L\R
+\centeredline{|\xintAssign\xintDecSplit {0}{-123004321}\to\L\R|}
+|\meaning\L: |\texttt{\meaning\L}, |\meaning\R: |\texttt{\meaning\R}
+\xintAssign\xintDecSplit {6}{-123004321}\to\L\R
+\centeredline{|\xintAssign\xintDecSplit {6}{-123004321}\to\L\R|}
+|\meaning\L: |\texttt{\meaning\L}, |\meaning\R: |\texttt{\meaning\R}
+\xintAssign\xintDecSplit {-5}{-12300004321}\to\L\R
+\centeredline{|\xintAssign\xintDecSplit {-5}{-12300004321}\to\L\R|}
+|\meaning\L: |\texttt{\meaning\L}, |\meaning\R: |\texttt{\meaning\R}
+\xintAssign\xintDecSplit {-11}{-12300004321}\to\L\R
+\centeredline{|\xintAssign\xintDecSplit {-11}{-12300004321}\to\L\R|}
+|\meaning\L: |\texttt{\meaning\L}, |\meaning\R: |\texttt{\meaning\R}
+
+\subsection{\chb{xintDecSplitL}}
+
+\csa{xintDecSplitL\x\n} returns the first piece after the action
+of \csa{xintDecSplit}.
+
+\subsection{\chb{xintDecSplitR}}
+
+\csa{xintDecSplitR\x\n} returns the second piece after the action
+of \csa{xintDecSplit}.
+
+
+\section{Commands of the \xintgcdname package}
+
+
+\subsection{\chb{xintGCD}}
+
+\csa{xintGCD\n\m} computes the greatest common divisor. It is
+positive, except when both |N| and |M| vanish, for which the macro
+returns zero.
+\centeredline{\csa{xintGCD}|{10000}{1113}=|\texttt{\xintGCD{10000}{1113}}}
+
+\subsection{\chb{xintBezout}}
+
+\xintAssign{{\xintBezout {10000}{1113}}}\to\X
+\xintAssign {\xintBezout {10000}{1113}}\to\A\B\U\V\D
+
+\csa{xintBezout\n\m} returns five numbers |A|, |B|, |U|, |V|, |D| within
+braces. |A| is the first (twice-expanded) input number, |B| the
+second, |D| is the GCD, and \texttt{UA - VB = D}. 
+\centeredline{|\xintAssign {{\xintBezout {10000}{1113}}}\to\X|}
+\centeredline{|\meaning\X: |\texttt{\meaning\X }.}
+\centeredline{|\xintAssign {\xintBezout {10000}{1113}}\to\A\B\U\V\D|}
+|\meaning\A: |\texttt{\meaning\A },
+|\meaning\B: |\texttt{\meaning\B },
+|\meaning\U: |\texttt{\meaning\U },
+|\meaning\V: |\texttt{\meaning\V },
+|\meaning\D: |\texttt{\meaning\D }.
+
+\subsection{\chb{xintEuclideAlgorithm}}
+
+\xintAssign {{\xintEuclideAlgorithm {10000}{1113}}}\to\X
+
+\def\restorebracecatcodes
+   {\catcode`\{=1 \catcode`\}=2 }
+
+\def\allowlistsplit 
+   {\catcode`\{=12 \catcode`\}=12 \allowlistsplita }
+
+\def\allowlistsplitx {\futurelet\listnext\allowlistsplitxx }
+
+\def\allowlistsplitxx {\ifx\listnext\relax \restorebracecatcodes
+                        \else \expandafter\allowlistsplitxxx \fi }
+\begingroup
+\catcode`\[=1
+\catcode`\]=2
+\catcode`\{=12
+\catcode`\}=12
+\gdef\allowlistsplita #1{[#1\allowlistsplitx {]
+\gdef\allowlistsplitxxx {#1}%
+     [{#1}\hskip 0pt plus 1pt \allowlistsplitx ]
+\endgroup
+
+\csa{xintEuclideAlgorithm\n\m} applies the Euclide algorithm and
+keeps a copy of all quotients and remainders. 
+\centeredline{|\xintAssign {{\xintEuclideAlgorithm {10000}{1113}}}\to\X|}
+
+|\meaning\X: |\texttt{\expandafter\allowlistsplit\meaning\X 
+                      \relax }.
+The first token is the number of steps, the second is |N|, the
+third is the GCD, the fourth is |M| then the first quotient and
+remainder, the second quotient and remainder, \dots until the
+final quotient and last (zero) remainder.
+
+\subsection{\chb{xintBezoutAlgorithm}}
+
+\catcode`\& 4
+
+\xintAssign {{\xintBezoutAlgorithm {10000}{1113}}}\to\X
+
+\csa{xintBezoutAlgorithm\n\m} applies the Euclide algorithm and
+keeps a copy of all quotients and remainders. Furthermore it
+computes the entries of the successive products of the 2 by 2 matrices 
+$\left(\vcenter{\halign {\,#&\,#\cr q & 1 \cr 1 & 0 \cr}}\right)$
+formed from the quotients arising in the algorithm.
+\centeredline{|\xintAssign {{\xintEuclideAlgorithm {10000}{1113}}}\to\X|}
+
+|\meaning\X: |\texttt{\expandafter\allowlistsplit\meaning\X \relax}.
+
+The first token is the number of steps, the second is |N|, then
+|0|, |1|, the GCD, |M|, |1|, |0|, the first quotient, the first
+remainder, the top left entry of the first matrix, the bottom left
+entry, and then these four things at each step until the end.
+
+\subsection{\chb{xintTypesetEuclideAlgorithm}}
+
+This macro is just an example of how to organize the data returned
+by \csa{xintEuclideAlgorithm}. See the source code and modify it
+to what is needed. 
+\centeredline{|\xintTypesetEuclideAlgorithm {10000}{1113}|}
+\xintTypesetEuclideAlgorithm {10000}{1113}
+
+
+\subsection{\chb{xintTypesetBezoutAlgorithm}}
+
+This macro is just an example of how to organize the data returned
+by \csa{xintBezoutAlgorithm}. See the source code and modify it
+to what is needed. 
+\centeredline{|\xintTypesetBezoutAlgorithm {10000}{1113}|}
+\xintTypesetBezoutAlgorithm {10000}{1113}
+
+
+
+
+\makeatletter
+\let\check@percent\original@check@percent
+\StopEventually{\check@checksum\end{document}\endinput}
+\makeatother
+
+\def\MacroFont{\ttfamily\small\baselineskip12pt\relax}
+
+\MakePercentIgnore
+% 
+% \catcode`\<=0 \catcode`\>=11 \catcode`\*=11 \catcode`\/=11
+% \let</none>\relax
+% \def<*package>{\catcode`\<=12 \catcode`\>=12 \catcode`\*=12 \catcode`\/=12}
+%
+%</none>
+%<*package>
+% \section {Package \xintname implementation}
+% 
+% The commenting of the macros is currently (\docdate) very
+% sparse. Some comments may be left-overs from previous versions
+% of the macro, with parameters in another order for example.
+%
+% \subsection{Catcodes, \eTeX{} detection, reload detection}
+% 
+% The method for package identification and reload detection is
+% copied verbatim from the packages by \textsc{Heiko Oberdiek}.
+%
+% The method for catcodes was also inspired by these packages, we
+% proceed slightly differently. 
+%
+%    \begin{macrocode}
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+  \catcode13=5    % ^^M
+  \endlinechar=13 %
+  \catcode123=1   % {
+  \catcode125=2   % }
+  \catcode64=11   % @
+  \catcode35=6    % #
+  \catcode44=12   % ,
+  \catcode45=12   % -
+  \catcode46=12   % .
+  \catcode58=12   % :
+  \expandafter\let\expandafter\x\csname ver@xint.sty\endcsname
+  \expandafter
+    \ifx\csname PackageInfo\endcsname\relax
+      \def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}%
+    \else
+      \def\y#1#2{\PackageInfo{#1}{#2}}%
+    \fi
+  \expandafter
+  \ifx\csname numexpr\endcsname\relax
+     \y{xint}{\numexpr not available, aborting input}%
+     \aftergroup\endinput
+  \else
+    \ifx\x\relax % plain-TeX, first loading
+    \else
+      \def\empty {}%
+      \ifx\x\empty % LaTeX, first loading,
+      % variable is initialized, but \ProvidesPackage not yet seen
+      \else
+        \y{xint}{I was already loaded, aborting input}%
+        \aftergroup\endinput
+      \fi
+    \fi
+  \fi
+  \def\ChangeCatcodesIfInputNotAborted
+  {%
+      \endgroup
+      \edef\XINT@restorecatcodes@endinput
+      {%
+        \catcode47=\the\catcode47   % /
+        \catcode41=\the\catcode41   % )
+        \catcode40=\the\catcode40   % (
+        \catcode42=\the\catcode42   % *
+        \catcode43=\the\catcode43   % +
+        \catcode62=\the\catcode62   % >
+        \catcode60=\the\catcode60   % <
+        \catcode58=\the\catcode58   % :
+        \catcode46=\the\catcode46   % .
+        \catcode45=\the\catcode45   % -
+        \catcode44=\the\catcode44   % ,
+        \catcode35=\the\catcode35   % #
+        \catcode64=\the\catcode64   % @
+        \catcode125=\the\catcode125 % }
+        \catcode123=\the\catcode123 % {
+        \endlinechar=\the\endlinechar
+        \catcode13=\the\catcode13   % ^^M
+        \catcode32=\the\catcode32   % 
+        \catcode61=\the\catcode61   % =
+        \noexpand\endinput
+      }%
+      \def\XINT@setcatcodes
+      {%
+        \catcode61=12   % =
+        \catcode32=10   % space
+        \catcode13=5    % ^^M
+        \endlinechar=13 % 
+        \catcode123=1   % {
+        \catcode125=2   % }
+        \catcode64=11   % @
+        \catcode35=6    % #
+        \catcode44=12   % ,
+        \catcode45=12   % -
+        \catcode46=12   % .
+        \catcode58=11   % : (made letter for error cs)
+        \catcode60=12   % <
+        \catcode62=12   % >
+        \catcode43=12   % +
+        \catcode42=12   % *
+        \catcode40=12   % (
+        \catcode41=12   % )
+        \catcode47=12   % /
+      }%
+      \XINT@setcatcodes
+  }%
+\ChangeCatcodesIfInputNotAborted 
+%    \end{macrocode}
+% \subsection{Package identification}
+%
+% Copied verbatim from \textsc{Heiko Oberdiek}'s packages.
+%
+%    \begin{macrocode}
+\begingroup
+  \catcode91=12 % [
+  \catcode93=12 % ]
+  \catcode58=12 % : (does not really matter, was letter)
+  \expandafter\ifx\csname ProvidesPackage\endcsname\relax
+    \def\x#1#2#3[#4]{\endgroup
+      \immediate\write-1{Package: #3 #4}%
+      \xdef#1{#4}%
+    }%
+  \else
+    \def\x#1#2[#3]{\endgroup
+      #2[{#3}]%
+      \ifx#1\@undefined
+        \xdef#1{#3}%
+      \fi
+      \ifx#1\relax
+        \xdef#1{#3}%
+      \fi
+    }%
+  \fi
+\expandafter\x\csname ver@xint.sty\endcsname
+\ProvidesPackage{xint}%
+  [2013/03/28 v1.0 Expandable operations on long numbers (jfB)]%
+%    \end{macrocode}
+% \subsection{Token management macros}
+%    \begin{macrocode}
+\def\xint@gobble       #1{}%
+\def\xint@gobble@one   #1{}%
+\def\xint@gobble@two   #1#2{}%
+\def\xint@gobble@three #1#2#3{}%
+\def\xint@gobble@four  #1#2#3#4{}%
+\def\xint@gobble@five  #1#2#3#4#5{}%
+\def\xint@gobble@six   #1#2#3#4#5#6{}%
+\def\xint@gobble@seven #1#2#3#4#5#6#7{}%
+\def\xint@gobble@eight #1#2#3#4#5#6#7#8{}%
+\def\xint@secondoftwo  #1#2{#2}%
+\def\xint@firstoftwo@andstop  #1#2{ #1}%
+\def\xint@secondoftwo@andstop #1#2{ #2}%
+\def\xint@exchangetwo@keepbraces #1#2{{#2}{#1}}%
+\def\xint@exchangetwo@keepbraces@andstop #1#2{ {#2}{#1}}%
+\def\xint@xpxp@andstop {\expandafter\expandafter\expandafter\space }%
+\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@UDforkzero      {#2}%
+\def\xint@UDzerosfork     #100\dummy #2#3\xint@UDforkzeros     {#2}%
+\def\xint@UDsignfork      #1-\dummy  #2#3\xint@UDforksign      {#2}%
+\def\xint@UDsignsfork     #1--\dummy #2#3\xint@UDforksigns     {#2}%
+\def\xint@UDzerominusfork #10-\dummy #2#3\xint@UDforkminuszero {#2}%
+\def\xint@afterfi #1#2\fi {\fi #1}%
+%    \end{macrocode}
+% \subsection{\ch{xintRev}, \ch{xintReverseOrder}}
+% \begin{verbatim}
+% \xintRev: fait la double expansion, vérifie le signe
+% \xintReverseOrder: ne fait PAS la double expansion, ne regarde
+% PAS le signe.
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\xintRev {\romannumeral0\xintrev }%
+\def\xintrev #1%
+{% 
+    \expandafter\expandafter\expandafter
+      \xint@rev
+    \expandafter\expandafter\expandafter
+      {#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@UDforksign
+    #1#2%
+}%
+\def\XINT@rev@negative #1#2\Z
+{%
+    \expandafter
+        \space
+    \expandafter
+        -%
+    \romannumeral0\XINT@rev {#2}%
+}%
+\def\XINT@rev@nonnegative #1\Z
+{%
+    \XINT@rev {#1}%
+}%
+\def\XINT@Rev {\romannumeral0\XINT@rev }%
+\let\xintReverseOrder \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
+}%
+\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}%
+}%
+\def\XINT@rord@cleanup\xint@undef\XINT@rord@main #1#2\xint@UNDEF 
+{%
+    \expandafter\space\XINT@strip@UNDEF #1%
+}%
+\def\XINT@strip@undef #1\xint@undef {}%
+\def\XINT@strip@UNDEF #1\xint@UNDEF {}%
+%    \end{macrocode}
+% \subsection{\ch{XINT@RQ}}
+% \begin{verbatim}
+% 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 {}<le truc à renverser>\R\R\R\R\R\R\R\R\Z
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\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}%
+}%
+\def\XINT@RQ@end\R\XINT@RQ #1#2\Z 
+{%
+    \XINT@RQ@end@ #1\Z
+}%
+\def\XINT@RQ@end@ #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
+            \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}%
+%    \end{macrocode}
+% \subsection{\ch{XINT@cuz}}
+%    \begin{macrocode}
+\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%
+{%
+    \the\numexpr #1#2#3#4\relax 
+}%
+\def\XINT@Rev@andcleanupzeros #1%
+{%
+    \romannumeral0\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
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% routine CleanUpZeros. Utilisée en particulier par la
+% 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}
+%    \begin{macrocode}
+\def\XINT@cuz #1%
+{%
+    \XINT@cuz@loop #1\W\W\W\W\W\W\W\Z%
+}%
+\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}%
+}%
+\def\xint@cuz@enda #1\XINT@cuz@checka #2%
+{%
+    \xint@cuz@endaa #2%
+}%
+\def\xint@cuz@endaa #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%
+{%
+    \expandafter \XINT@cuz@checkb \the\numexpr #1\relax
+}%
+\def\XINT@cuz@checkb #1%
+{%
+    \xint@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 }%
+%    \end{macrocode}
+% \subsection{\ch{xintNum}}
+% \begin{verbatim}
+% For example \xintNum {----+-+++---+----000000000000003}
+% \end{verbatim}
+%    \begin{macrocode}
+\def\xintNum {\romannumeral0\xintnum }%
+\def\xintnum #1%
+{%
+ \expandafter\expandafter\expandafter
+    \XINT@num
+ \expandafter\expandafter\expandafter
+    {#1}%
+}%
+\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%
+{% 
+    \xint@r #8\XINT@num@end\R\XINT@num@NumEight #1#2#3#4#5#6#7#8%
+}%
+\def\XINT@num@end\R\XINT@num@NumEight #1\R #2\Z
+{%
+    \expandafter\space\the\numexpr #1+0\relax
+}%
+\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
+                     \the\numexpr #1#2#3#4#5#6#7#81\relax}%
+    \else
+      \xint@afterfi {\expandafter\XINT@num@finish
+                     \the\numexpr #1#2#3#4#5#6#7#8\relax}%
+    \fi
+}%
+\def\XINT@num@keepsign@a #1%
+{%
+    \xint@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}%
+%    \end{macrocode}
+% \subsection{\ch{xintLen}, \ch{xintLength}}
+% \begin{verbatim}
+% \xintLen    -> fait la double expansion, ne compte PAS le signe
+% \xintLength -> ne fait PAS la double expansion, compte le signe
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\xintLen {\romannumeral0\xintlen }%
+\def\xintlen #1%
+{%
+    \expandafter\expandafter\expandafter
+    \XINT@length@fork #1\R\R\R\R\R\R\R\R\Z
+}%
+\def\XINT@Len #1{\romannumeral0\XINT@length@fork #1\R\R\R\R\R\R\R\R\Z }%
+\def\XINT@length@fork #1%
+{%
+    \expandafter\XINT@length@loop
+    \xint@UDsignfork
+      #1\dummy {{0}}%
+       -\dummy {{0}#1}%
+    \xint@UDforksign
+}%
+\def\XINT@Length #1{\romannumeral0\XINT@length@loop {0}#1\R\R\R\R\R\R\R\R\Z }%
+\def\XINT@length #1{\XINT@length@loop {0}#1\R\R\R\R\R\R\R\R\Z }%
+\let\xintLength\XINT@Length
+\def\XINT@length@loop #1#2#3#4#5#6#7#8#9%  
+{%
+    \xint@r  #9\XINT@length@end {#2#3#4#5#6#7#8#9}\R
+    \expandafter\XINT@length@loop\expandafter {\the\numexpr #1+8\relax}%
+}%
+\def\XINT@length@end #1\R\expandafter\XINT@length@loop\expandafter #2#3\Z
+{%
+    \XINT@length@end@ #1\W\W\W\W\W\W\W\W\Z {#2}%
+}%
+\def\XINT@length@end@ #1\R #2#3#4#5#6#7#8#9\Z 
+{%
+    \xint@w #2\XINT@length@end@i
+            #3\XINT@length@end@ii
+            #4\XINT@length@end@iii
+            #5\XINT@length@end@iv
+            #6\XINT@length@end@v
+            #7\XINT@length@end@vi
+            #8\XINT@length@end@vii
+            \W\XINT@length@end@viii
+}%
+\def\XINT@length@end@viii #1%
+    {\expandafter\space\the\numexpr #1-8\relax}%
+\def\XINT@length@end@vii  #1\XINT@length@end@viii #2%
+    {\expandafter\space\the\numexpr #2-7\relax}%
+\def\XINT@length@end@vi   #1\XINT@length@end@viii #2%
+    {\expandafter\space\the\numexpr #2-6\relax}%
+\def\XINT@length@end@v    #1\XINT@length@end@viii #2%
+    {\expandafter\space\the\numexpr #2-5\relax}%
+\def\XINT@length@end@iv   #1\XINT@length@end@viii #2%
+    {\expandafter\space\the\numexpr #2-4\relax}%
+\def\XINT@length@end@iii  #1\XINT@length@end@viii #2%
+    {\expandafter\space\the\numexpr #2-3\relax}%
+\def\XINT@length@end@ii   #1\XINT@length@end@viii #2%
+    {\expandafter\space\the\numexpr #2-2\relax}%
+\def\XINT@length@end@i    #1\XINT@length@end@viii #2%
+    {\expandafter\space\the\numexpr #2-1\relax}%
+%    \end{macrocode}
+% \subsection{\ch{xintAssign}, \ch{xintAssignArray}, \ch{xintDigitsOf}}
+% \begin{verbatim}
+% \xintAssign {a}{b}..{z}\to\A\B...\Z, 
+% \xintAssignArray {a}{b}..{z}\to\U
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\xintAssign #1\to
+{%
+    \expandafter\expandafter\expandafter
+    \XINT@assign@a #1{}\to
+}%
+\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 
+    \else
+        \expandafter\XINT@assign@B
+    \fi
+}%
+\def\XINT@assign@b #1#2\to #3%
+{% 
+    \edef #3{#1}\def\xint@temp {#2}%
+    \ifx\empty\xint@temp
+      \else
+      \xint@afterfi{\XINT@assign@a #2\to }%
+    \fi
+}%
+\def\XINT@assign@B #1\to #2%
+{%
+    \edef #2{\xint@temp}%
+}%
+\def\xintRelaxArray #1%
+{%
+    \edef\xint@arrayname {\expandafter\xint@gobble\string #1}%
+    \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
+      \advance\count 255 1
+    \repeat  
+    \global\expandafter\let\csname\xint@arrayname 00\endcsname\relax
+    \global\let #1\relax    
+}%
+\def\xintAssignArray #1\to #2%
+{% 
+    \edef\xint@arrayname {\expandafter\xint@gobble\string #2}%
+    \count 255 0
+        \expandafter\expandafter\expandafter
+    \XINT@assignarray@loop #1\xint@undef 
+    \csname\xint@arrayname 00\endcsname
+    \csname\xint@arrayname 0\endcsname 
+    {\xint@arrayname}%
+    #2%
+}%
+\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
+    \else
+       \advance\count 255 1
+       \expandafter\edef
+          \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%
+{%
+    \expandafter\XINT@assignarray@@@end\expandafter #1%
+}%
+\def\XINT@assignarray@@@end #1#2#3%
+{%
+    \expandafter\XINT@assignarray@@@@end
+    \expandafter #1\expandafter #2\expandafter{#3}%
+}%
+\def\XINT@assignarray@@@@end #1#2#3#4%
+{%
+    \def #4##1%
+    {\romannumeral0%
+        \expandafter\expandafter\expandafter
+          #1%
+        \expandafter\expandafter\expandafter
+          {##1}%
+    }%
+    \def #1##1%
+    {%
+        \ifnum ##1< 0
+            \xint@afterfi {\xintError:ArrayIndexIsNegative
+                           \expandafter\space 0}%
+        \else
+            \xint@afterfi {%
+              \ifnum ##1> #2
+                  \xint@afterfi {\xintError:ArrayIndexBeyondLimit
+                                 \expandafter\space 0}%
+              \else
+                  \xint@afterfi
+                  {\expandafter\expandafter\expandafter
+                   \space\csname #3##1\endcsname}%
+              \fi}%
+        \fi
+     }%
+}%
+\let\xintDigitsOf\xintAssignArray
+%    \end{macrocode}
+% \subsection{\ch{xintSgn}}
+%    \begin{macrocode}
+\def\xintSgn {\romannumeral0\xintsgn }%
+\def\xintsgn #1%
+{%
+    \expandafter\expandafter\expandafter
+    \XINT@sgn #1\Z%
+}%
+\def\XINT@Sgn #1{\romannumeral0\XINT@sgn #1\Z }%
+\def\XINT@sgn #1%
+{%
+    \xint@xpxp@andstop
+    \xint@UDzerominusfork
+      #1-\dummy  {\expandafter0}%  zero
+      0#1\dummy  {\expandafter-\expandafter1}% n\'egatif
+       0-\dummy  {\expandafter1}%  positif
+    \xint@UDforkminuszero
+    \xint@z
+}%
+%    \end{macrocode}
+% \subsection{\ch{xintOpp}}
+%    \begin{macrocode}
+\def\xintOpp {\romannumeral0\xintopp }%
+\def\xintopp #1%
+{%
+    \expandafter\expandafter\expandafter
+        \XINT@opp #1%
+}%
+\def\XINT@Opp #1{\romannumeral0\XINT@opp #1}%
+\def\XINT@opp #1%
+{%
+    \expandafter\space
+    \xint@UDzerominusfork
+      #1-\dummy  0%      zero
+      0#1\dummy  {}%     negative
+       0-\dummy  {-#1}%  positive
+    \xint@UDforkminuszero
+}%
+%    \end{macrocode}
+% \subsection{\ch{xintAbs}}
+%    \begin{macrocode}
+\def\xintAbs {\romannumeral0\xintabs }%
+\def\xintabs #1%
+{%
+    \expandafter\expandafter\expandafter
+    \XINT@abs #1%
+}%
+\def\XINT@Abs {\romannumeral0\XINT@abs }%
+\def\XINT@abs #1%
+{%
+    \xint@UDsignfork
+      #1\dummy  \XINT@abs@isnegative
+       -\dummy  \XINT@abs@isnonnegative
+    \xint@UDforksign
+    #1%
+}%
+\def\XINT@abs@isnegative    #1{ }%
+\def\XINT@abs@isnonnegative #1{ #1}%
+%    \end{macrocode}
+% \begin{verbatim}
+%-----------------------------------------------------------------
+%-----------------------------------------------------------------
+% ARITHMETIC OPERATIONS: ADDITION, SUBTRACTION, SUMS, 
+% MULTIPLICATION, PRODUCTS, FACTORIAL, POWERS, EUCLIDEAN DIVISION.
+% \end{verbatim}
+% \vspace*{-2\baselineskip}
+% \subsection{\ch{xintAdd}}
+%    \begin{macrocode}
+\def\xintAdd {\romannumeral0\xintadd }%
+\def\xintadd #1%
+{%
+    \expandafter\expandafter\expandafter
+           \xint@add
+    \expandafter\expandafter\expandafter
+           {#1}%
+}%
+\def\xint@add #1#2%
+{%
+    \expandafter\expandafter\expandafter
+    \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 
+% 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}
+%    \begin{macrocode}
+\def\XINT@add@fork #1#2\Z #3#4\Z
+{%
+    \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@UDforksigns}%
+    \xint@UDforkzero
+    {#2}{#4}#1#3%
+}%
+\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}
+%    \begin{macrocode}
+\def\XINT@add@minusminus #1#2#3#4%
+{%
+    \expandafter\space\expandafter-%
+    \romannumeral0\XINT@add@pre {#2}{#1}%
+}%
+\def\XINT@add@minusplus #1#2#3#4%
+{%
+    \XINT@sub@pre {#4#2}{#1}%
+}%
+\def\XINT@add@plusminus #1#2#3#4%
+{%
+    \XINT@sub@pre {#3#1}{#2}%
+}%
+\def\XINT@add@plusplus #1#2#3#4%
+{%
+    \XINT@add@pre {#4#2}{#3#1}%
+}%
+\def\XINT@add@pre #1%
+{%
+  \expandafter\XINT@add@@pre\expandafter{%
+  \romannumeral0\XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z
+  }%
+}%
+\def\XINT@add@@pre #1#2%
+{% 
+    \expandafter\XINT@add@A
+        \expandafter0\expandafter{\expandafter}%
+    \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}
+% ADDITION \XINT@add@A
+% INPUT:
+% \romannumeral0\XINT@add@A <N1>\W\X\Y\Z <N2>\W\X\Y\Z
+% avec: N1 et N2 sur **4n**, et **renversés**, et le plus long ne
+% doit pas se terminer par 0000. [Donc on peut avoir 0000 comme
+% input si l'autre est >0 et ne se termine pas en 0000 bien sûr].
+% OUTPUT:
+% La somme N1+N2, *PAS* sur 4n, dans l'ordre *normal*, et *sans
+% leading zeros*
+% La procédure est plus rapide lorsque la longueur de N2 est
+% supérieure à celle de N1
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\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}% 
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% 1er nombre fini.
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\xint@add@az\W\XINT@add@AB #1#2%  
+{%
+    \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
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\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 
+}%
+\def\XINT@add@ABE #1#2#3#4#5#6%
+{\expandafter
+    \XINT@add@ABEA\the\numexpr #1+10#5#4#3#2+#6\relax.%
+}%
+\def\XINT@add@ABEA #1#2#3.#4%  
+{%
+    \XINT@add@A  #2{#3#4}%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% 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}
+%    \begin{macrocode}
+\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.%
+}%
+\def\XINT@add@CC #1#2#3.#4%  
+{%
+    \XINT@add@AC@checkcarry  #2{#3#4}% on va examiner et \'eliminer #2
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% 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}
+%    \begin{macrocode}
+\def\XINT@add@AC@checkcarry #1%
+{%
+    \xint@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
+{%
+    \expandafter
+    \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
+    #1%
+}%
+\def\XINT@add@C #1#2#3#4#5%  
+{%
+    \xint@w 
+    #2\xint@add@cz 
+    \W\XINT@add@CD {#5#4#3#2}{#1}%
+}%
+\def\XINT@add@CD #1%
+{\expandafter
+    \XINT@add@CC\the\numexpr 1+10#1\relax.%
+}%
+\def\xint@add@cz\W\XINT@add@CD #1#2{ 1#2}%
+%    \end{macrocode}
+% \subsection{\ch{xintSub}}
+%    \begin{macrocode}
+\def\xintSub {\romannumeral0\xintsub }%
+\def\xintsub #1%
+{%
+    \expandafter\expandafter\expandafter
+           \xint@sub
+    \expandafter\expandafter\expandafter
+           {#1}%
+}%
+\def\xint@sub #1#2%
+{%
+    \expandafter\expandafter\expandafter
+    \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}
+% SOUSTRACTION
+% #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@UDforkzero}%
+    \xint@UDforksigns
+    {#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%
+{%
+    \XINT@sub@pre {#4#2}{#3#1}%
+}%
+\def\XINT@sub@minusminus #1#2#3#4%
+{%
+    \XINT@sub@pre {#1}{#2}%
+}%
+\def\XINT@sub@minusplus #1#2#3#4% 
+{%
+    \xint@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% 
+{%
+    \xint@zero #3\xint@sub@pm0\expandafter\space\expandafter-%
+    \romannumeral0\XINT@add@pre {#2}{#3#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
+  }%
+}%
+\def\XINT@sub@@pre #1#2%
+{% 
+    \expandafter\XINT@sub@A
+        \expandafter1\expandafter{\expandafter}%
+    \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@subA 1{}<N1>\W\X\Y\Z<N2>\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
+% Elle donne le résultat dans le **bon ordre**, avec le bon signe,
+% et sans zéros superflus.
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\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 
+}%
+\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}%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% 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}
+%    \begin{macrocode}
+\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.%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% ON PRODUIT LE RÉSULTAT DANS LE BON ORDRE
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@sub@backtoA #1#2#3.#4%
+{%
+    \XINT@sub@A #2{#3#4}%
+}%
+\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@UDforkzero
+    {#7}#2#3#4#5%
+}%
+\def\XINT@sub@D #1#2\W\X\Y\Z
+{%
+    \expandafter
+    \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
+    #1%
+}%
+\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}%
+}%
+\def\XINT@sub@AC@onestep #1%
+{\expandafter
+    \XINT@sub@backtoC\the\numexpr 11#1-1\relax.%
+}%
+\def\XINT@sub@backtoC #1#2#3.#4%
+{%
+    \XINT@sub@AC@checkcarry #2{#3#4}% la retenue va \^etre examin\'ee
+}%
+\def\XINT@sub@AC@checkcarry #1%
+{%
+    \xint@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
+{%
+    \expandafter
+    \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
+    #1\W\W\W\W\W\W\W\Z
+}%
+\def\xint@sub@cz\W\XINT@sub@AC@onestep #1%
+{%
+    \XINT@cuz
+}%
+\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%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% le premier nombre continue, le résultat sera < 0.
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@sub@Eenter #1#2%
+{%
+    \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
+    \W\X\Y\Z #1%
+}%
+\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}%
+}%
+\def\XINT@sub@Eonestep #1#2%
+{\expandafter
+    \XINT@sub@backtoE\the\numexpr 110000-#2+#1-1\relax.%
+}%
+\def\XINT@sub@backtoE #1#2#3.#4%
+{%
+    \XINT@sub@E #2{#3#4}%
+}%
+\def\xint@sub@F\W\XINT@sub@Eonestep #1#2#3#4%
+{%
+    \xint@sub@Fthreewayfork
+      #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@sub@Fforkthreeway
+    {#3}%
+}%
+\def\xint@sub@Fthreewayfork #110\dummy #2#3\xint@sub@Fforkthreeway {#2}%
+\def\XINT@sub@DD
+{\expandafter\space\expandafter-\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}%
+}%
+\def\XINT@sub@Fdec@onestep #1#2%
+{\expandafter
+    \XINT@sub@backtoFdec\the\numexpr 11#2+#1-1\relax.%
+}%
+\def\XINT@sub@backtoFdec #1#2#3.#4%
+{%
+    \XINT@sub@Fdec #2{#3#4}%
+}%
+\def\xint@sub@Fdec@finish\W\XINT@sub@Fdec@onestep #1#2%
+{%
+    \expandafter\space\expandafter-\romannumeral0\XINT@cuz
+}%
+\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}%
+}%
+\def\XINT@sub@Finc@onestep #1#2%
+{\expandafter
+    \XINT@sub@backtoFinc\the\numexpr 10#2+#1\relax.%
+}%
+\def\XINT@sub@backtoFinc #1#2#3.#4%
+{%
+    \XINT@sub@Finc #2{#3#4}%
+}%
+\def\xint@sub@Finc@finish\W\XINT@sub@Finc@onestep #1#2#3%
+{%
+    \xint@UDzerofork
+     #1\dummy {\expandafter\space\expandafter-%
+               \xint@cleanupzeros@nospace}%
+      0\dummy { -1}%
+    \xint@UDforkzero
+    #3%
+}%
+\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@UDforkzero
+}%
+\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}%
+    \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
+}%
+\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}%
+}%
+\def\XINT@sub@KK@onestep #1#2%
+{\expandafter
+    \XINT@sub@backtoKK\the\numexpr 110000-#2+#1-1\relax.%
+}%
+\def\XINT@sub@backtoKK #1#2#3.#4%
+{%
+    \XINT@sub@KK #2{#3#4}%
+}%
+\def\xint@sub@KK@finish\W\XINT@sub@KK@onestep #1#2#3%
+{%
+    \expandafter\space\expandafter-\romannumeral
+    0\XINT@cuz@loop #3\W\W\W\W\W\W\W\Z
+}%
+%    \end{macrocode}
+% \subsection{\ch{xintCmp}}
+%    \begin{macrocode}
+\def\xintCmp {\romannumeral0\xintcmp }%
+\def\xintcmp #1%
+{%
+    \expandafter\expandafter\expandafter
+        \xint@cmp
+    \expandafter\expandafter\expandafter
+        {#1}%
+}%
+\def\xint@cmp #1#2%
+{%
+    \expandafter\expandafter\expandafter
+    \XINT@cmp@fork #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@UDforkzeros}%
+    \xint@UDforksigns
+    {#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%
+{%
+    \XINT@cmp@pre {#4#2}{#3#1}%
+}%
+\def\XINT@cmp@minusminus #1#2#3#4%
+{%
+    \XINT@cmp@pre {#1}{#2}%
+}%
+\def\XINT@cmp@pre #1%
+{%
+  \expandafter\XINT@cmp@@pre\expandafter{%
+  \romannumeral0\XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z
+  }%
+}%
+\def\XINT@cmp@@pre #1#2%
+{% 
+    \expandafter\XINT@cmp@A
+    \expandafter1\expandafter{\expandafter}%
+    \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
+% 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{}<N1>\W\X\Y\Z<N2>\W\X\Y\Z
+% ATTENTION RENVOIE 1 SI N1 < N2, 0 si N1 = N2, -1 si N1 > N2
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\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 
+}%
+\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}%
+}%
+\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.%
+}%
+\def\XINT@cmp@backtoA #1#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%  
+{%
+    \xint@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%
+{%
+    \xint@UDzerofork
+      #1\dummy \XINT@cmp@K             %     il y a une retenue
+       0\dummy \XINT@cmp@L             %     pas de retenue
+    \xint@UDforkzero
+}%
+\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%
+}%
+\def\XINT@OneIfPositive@main #1#2#3#4%
+{%
+    \xint@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%
+{%
+    \expandafter
+    \XINT@OneIfPositive@check
+    \the\numexpr #1#2#3#4\relax
+}%
+\def\XINT@OneIfPositive@check #1%
+{%
+    \xint@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 }%
+%    \end{macrocode}
+% \subsection{\ch{xintGeq}}
+% \begin{verbatim}
+%    PLUS GRAND OU ÉGAL
+% attention compare les **valeurs absolues**
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\xintGeq {\romannumeral0\xintgeq }%
+\def\xintgeq #1%
+{%
+    \expandafter\expandafter\expandafter
+      \xint@geq
+    \expandafter\expandafter\expandafter
+      {#1}%
+}%
+\def\xint@geq #1#2%
+{\expandafter\expandafter\expandafter
+       \XINT@geq@fork #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@UDforksigns}%
+    \xint@UDforkzero
+    {#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%
+{%
+  \expandafter\XINT@geq@@pre\expandafter{%
+  \romannumeral0\XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z
+  }%
+}%
+\def\XINT@geq@@pre #1#2%
+{% 
+    \expandafter\XINT@geq@A
+    \expandafter1\expandafter{\expandafter}%
+    \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
+% 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{}<N1>\W\X\Y\Z<N2>\W\X\Y\Z
+% ATTENTION RENVOIE 1 SI N1 < N2 ou N1 = N2 et 0 si N1 > N2
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\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 
+}%
+\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}%
+}%
+\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.%
+}%
+\def\XINT@geq@backtoA #1#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%  
+{%
+    \xint@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%
+{%
+    \xint@UDzerofork
+      #1\dummy { 0}             %     il y a une retenue
+       0\dummy { 1}             %     pas de retenue
+    \xint@UDforkzero
+}%
+%    \end{macrocode}
+% \subsection{\ch{xintMax}}
+%    \begin{macrocode}
+\def\xintMax {\romannumeral0\xintmax }%
+\def\xintmax #1%
+{%
+    \expandafter\expandafter\expandafter
+        \xint@max
+    \expandafter\expandafter\expandafter
+        {#1}%
+}%
+\def\xint@max #1#2%
+{%
+    \expandafter\expandafter\expandafter
+      \XINT@max@fork #2\Z #1\Z
+}%
+\def\XINT@Max #1#2{\romannumeral0\XINT@max@fork #2\Z #1\Z }%
+%    \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@UDforkzeros}%
+    \xint@UDforksigns
+    {#2}{#4}#1#3%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% A = #4#2, B = #3#1
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@max@zerozero #1#2#3#4{ 0}%
+\def\XINT@max@zeroplus #1#2#3#4{ #4#2}%
+\def\XINT@max@pluszero #1#2#3#4{ #3#1}%
+\def\XINT@max@minusplus #1#2#3#4{ #4#2}%
+\def\XINT@max@plusminus #1#2#3#4{ #3#1}%
+\def\XINT@max@plusplus #1#2#3#4%
+{%
+    \ifodd\XINT@Geq {#4#2}{#3#1}
+      \xint@afterfi { #4#2}%
+    \else
+      \xint@afterfi { #3#1}%
+    \fi
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #3=-, #4=-, #1 = |B| = -B, #2 = |A| = -A
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@max@minusminus #1#2#3#4%
+{%
+    \ifodd\XINT@Geq {#1}{#2}
+      \xint@afterfi { -#2}%
+    \else
+      \xint@afterfi { -#1}%
+    \fi
+}%
+%    \end{macrocode}
+% \subsection{\ch{xintMin}}
+%    \begin{macrocode}
+\def\xintMin {\romannumeral0\xintmin }%
+\def\xintmin #1%
+{%
+    \expandafter\expandafter\expandafter
+        \xint@min
+    \expandafter\expandafter\expandafter
+        {#1}%
+}%
+\def\xint@min #1#2%
+{%
+    \expandafter\expandafter\expandafter
+      \XINT@min@fork #2\Z #1\Z
+}%
+\def\XINT@Min #1#2{\romannumeral0\XINT@min@fork #2\Z #1\Z }%
+%    \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@UDforkzeros}%
+    \xint@UDforksigns
+    {#2}{#4}#1#3%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% A = #4#2, B = #3#1
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@min@zerozero #1#2#3#4{ 0}%
+\def\XINT@min@zeroplus #1#2#3#4{ 0}%
+\def\XINT@min@pluszero #1#2#3#4{ 0}%
+\def\XINT@min@minusplus #1#2#3#4{ #3#1}%
+\def\XINT@min@plusminus #1#2#3#4{ #4#2}%
+\def\XINT@min@plusplus #1#2#3#4%
+{%
+    \ifodd\XINT@Geq {#4#2}{#3#1}
+      \xint@afterfi { #3#1}%
+    \else
+      \xint@afterfi { #4#2}%
+    \fi
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #3=-, #4=-, #1 = |B| = -B, #2 = |A| = -A
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@min@minusminus #1#2#3#4%
+{%
+    \ifodd\XINT@Geq {#1}{#2}
+      \xint@afterfi { -#1}%
+    \else
+      \xint@afterfi { -#2}%
+    \fi
+}%
+%    \end{macrocode}
+% \subsection{\ch{xintSum}, \ch{xintSumExpr}}
+% \begin{verbatim}
+% \xintSum {{a}{b}...{z}}
+% \xintSumExpr {a}{b}...{z}\relax
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@psum #1%
+{%
+    \romannumeral0\XINT@psum@checkifemptysum #1\Z
+}%
+\def\XINT@psum@checkifemptysum #1%
+{%
+    \xint@relax #1\XINT@psum@returnzero\relax \XINT@psum@RQfirst #1%
+}%
+\def\XINT@psum@returnzero #1\Z { 0}%
+\def\XINT@psum@RQfirst #1\Z 
+{%
+    \expandafter\XINT@psum@loop\expandafter
+    {\romannumeral0\XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z}%   avant: #1\Z
+}%
+\def\XINT@psum@loop #1#2%
+{%
+    \xint@relax #2\XINT@psum@end\relax
+    \expandafter
+    \XINT@psum@loop\expandafter
+    {\romannumeral0\expandafter\XINT@sum@A
+        \expandafter0\expandafter{\expandafter}%
+    \romannumeral0\XINT@RQ {}#2\R\R\R\R\R\R\R\R\Z
+    \W\X\Y\Z #1\W\X\Y\Z }%
+}%
+\def\XINT@psum@end\relax\expandafter
+                  \XINT@psum@loop\expandafter #1%
+         {\XINT@psum@end@ #1}%
+\def\XINT@psum@end@ #1\W\X\Y\Z #2\W\X\Y\Z
+{%
+    \expandafter
+    \xint@cleanupzeros@andstop\romannumeral0\XINT@rev {#2}%
+}%
+\def\xintSumExpr {\romannumeral0\xintsumexpr }%
+\def\xintSum {\romannumeral0\xintsum }%
+\def\xintsum #1%
+{%
+    \expandafter\expandafter\expandafter
+    \xintsumexpr #1\relax
+}%
+\def\xintsumexpr #1%
+{%
+    \expandafter\expandafter\expandafter
+    \XINT@sum@checkifempty #1\Z {\XINT@psum }{\XINT@psum }%
+}%
+\def\XINT@sum@checkifempty #1%
+{%
+    \xint@relax #1\XINT@sum@returnzero\relax 
+    \XINT@sum@checksign #1%
+}%
+\def\XINT@sum@returnzero #1\Z #2#3{ 0}%
+\def\XINT@sum@checksign #1%
+{%
+    \xint@zero #1\XINT@sum@skipzeroinput0%
+    \xint@UDsignfork
+      #1\dummy \XINT@sum@pushneg
+       -\dummy \XINT@sum@pushpos
+    \xint@UDforksign
+    #1%
+}%
+\def\XINT@sum@skipzeroinput #1\xint@UDforksign #2\Z #3#4%
+{%
+    \XINT@sum@xpxpnext {#3}{#4}%
+}%
+\def\XINT@sum@pushpos #1#2\Z #3#4%
+{%
+    \XINT@sum@xpxpnext {#3{#1#2}}{#4}%
+}%
+\def\XINT@sum@pushneg #1#2\Z #3#4%
+{%
+    \XINT@sum@xpxpnext  {#3}{#4{#2}}%
+}%
+\def\XINT@sum@xpxpnext #1#2#3%
+{%
+    \expandafter\expandafter\expandafter
+    \XINT@sum@checkiffinished #3\Z {#1}{#2}%
+}%
+\def\XINT@sum@checkiffinished #1%
+{%
+    \xint@relax #1\XINT@sum@end\relax 
+    \XINT@sum@checksign #1%
+}%
+\def\XINT@sum@end\relax\XINT@sum@checksign\relax #1\Z #2#3%
+      {\xintsub{#2\relax}{#3\relax}}%
+\def\XINT@sum@A #1#2#3#4#5#6%  
+{%
+    \xint@w 
+    #3\xint@sum@az 
+    \W\XINT@sum@B #1{#3#4#5#6}{#2}% 
+}%
+\def\xint@sum@az\W\XINT@sum@B #1#2%  
+{%
+    \XINT@sum@AC@checkcarry #1%
+}%
+\def\XINT@sum@B #1#2#3#4\W\X\Y\Z #5#6#7#8%  
+{%
+    \xint@w 
+    #5\xint@sum@bz 
+    \W\XINT@sum@E #1#2{#8#7#6#5}{#3}#4\W\X\Y\Z 
+}%
+\def\XINT@sum@E #1#2#3#4#5#6%
+{\expandafter
+    \XINT@sum@ABEA\the\numexpr #1+10#5#4#3#2+#6\relax
+}%
+\def\XINT@sum@ABEA #1#2#3#4#5#6#7%  
+{%
+    \XINT@sum@A  #2{#7#6#5#4#3}%
+}%
+\def\xint@sum@bz\W\XINT@sum@E #1#2#3#4#5#6%
+{\expandafter
+    \XINT@sum@CC\the\numexpr #1+10#5#4#3#2\relax
+}%
+\def\XINT@sum@CC #1#2#3#4#5#6#7%  
+{%
+    \XINT@sum@AC@checkcarry  #2{#7#6#5#4#3}%
+}%
+\def\XINT@sum@AC@checkcarry #1%
+{%
+    \xint@zero #1\xint@sum@AC@nocarry 0\XINT@sum@C 
+}%
+\def\xint@sum@AC@nocarry 0\XINT@sum@C #1#2\W\X\Y\Z { #1#2}%
+\def\XINT@sum@C #1#2#3#4#5%  
+{%
+    \xint@w 
+    #2\xint@sum@cz 
+    \W\XINT@sum@D {#5#4#3#2}{#1}%
+}%
+\def\XINT@sum@D #1%
+{\expandafter
+    \XINT@sum@CC\the\numexpr 1+10#1\relax
+}%
+\def\xint@sum@cz\W\XINT@sum@D #1#2{ #21000}%
+%    \end{macrocode}
+% \subsection{\ch{xintMul}}
+%    \begin{macrocode}
+\def\xintMul {\romannumeral0\xintmul }%
+\def\xintmul #1%
+{%
+    \expandafter\expandafter\expandafter
+        \xint@mul
+    \expandafter\expandafter\expandafter
+        {#1}%
+}%
+\def\xint@mul #1#2%
+{\expandafter\expandafter\expandafter
+       \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
+% Algorithme plus efficace pour #3#4 plus long que #1#2
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@mul@fork #1#2\Z #3#4\Z
+{%
+    \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           % #1 = -
+           #3-\dummy \XINT@mul@plusminus           % #3 = -
+            --\dummy \XINT@mul@plusplus
+         \xint@UDforksigns}%
+    \xint@UDforkzero
+    {#2}{#4}#1#3%
+}%
+\def\XINT@mul@zero #1#2#3#4{ 0}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% Dans ce qui suit #3#1 vient du #1#2 initial correspondant au 
+% ** 2e ** input.
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@mul@minusminus #1#2#3#4%
+{%
+      \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@mul@minusplus #1#2#3#4%
+{%
+      \expandafter\space\expandafter-%
+      \romannumeral0\expandafter
+          \XINT@mul@enter\romannumeral0%
+          \XINT@RQ {}#4#2\R\R\R\R\R\R\R\R\Z
+          \W\X\Y\Z #1\W\X\Y\Z 
+}%
+\def\XINT@mul@plusminus #1#2#3#4%
+{%
+      \expandafter\space\expandafter-%
+      \romannumeral0\expandafter
+          \XINT@mul@enter\romannumeral0%
+          \XINT@RQ {}#2\R\R\R\R\R\R\R\R\Z
+          \W\X\Y\Z #3#1\W\X\Y\Z 
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% Ici #3#1 correspond au **2e input** celui censé être
+% pyschologiquement plus petit
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@mul@plusplus #1#2#3#4%
+{%
+      \expandafter
+          \XINT@mul@enter\romannumeral0%
+          \XINT@RQ {}#4#2\R\R\R\R\R\R\R\R\Z
+          \W\X\Y\Z #3#1\W\X\Y\Z 
+}%
+\def\XINT@mul@add@A #1#2#3#4#5#6%  
+{%
+    \xint@w 
+    #3\xint@mul@add@az 
+    \W\XINT@mul@add@AB #1{#3#4#5#6}{#2}% 
+}%
+\def\xint@mul@add@az\W\XINT@mul@add@AB #1#2%  
+{%
+    \XINT@mul@add@AC@checkcarry #1%
+}%
+\def\XINT@mul@add@AB #1#2#3#4\W\X\Y\Z #5#6#7#8%  
+{%
+    \XINT@mul@add@ABE #1#2{#8#7#6#5}{#3}#4\W\X\Y\Z 
+}%
+\def\XINT@mul@add@ABE #1#2#3#4#5#6%
+{\expandafter
+    \XINT@mul@add@ABEA\the\numexpr #1+10#5#4#3#2+#6\relax.%
+}%
+\def\XINT@mul@add@ABEA #1#2#3.#4%  
+{%
+    \XINT@mul@add@A  #2{#3#4}%
+}%
+\def\XINT@mul@add@AC@checkcarry #1%
+{%
+    \xint@zero #1\xint@mul@add@AC@nocarry 0\XINT@mul@add@C 
+}%
+\def\xint@mul@add@AC@nocarry 0\XINT@mul@add@C #1#2\W\X\Y\Z
+{%
+    \expandafter
+    \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
+    #1%
+}%
+\def\XINT@mul@add@C #1#2#3#4#5%  
+{%
+    \xint@w 
+    #5\xint@mul@add@cw
+    #4\xint@mul@add@cx 
+    #3\xint@mul@add@cy 
+    #2\xint@mul@add@cz 
+    \W\XINT@mul@add@CD {#5#4#3#2}{#1}%
+}%
+\def\XINT@mul@add@CD #1%
+{\expandafter
+    \XINT@mul@add@CC\the\numexpr 1+10#1\relax.%
+}%
+\def\XINT@mul@add@CC #1#2#3.#4%  
+{%
+    \XINT@mul@add@AC@checkcarry  #2{#3#4}%
+}%
+\def\xint@mul@add@cw 
+    #1\xint@mul@add@cx
+    #2\xint@mul@add@cy
+    #3\xint@mul@add@cz
+    \W\XINT@mul@add@CD 
+{\expandafter
+    \XINT@mul@add@CDw\the\numexpr 1+#1#2#3\relax.%
+}%
+\def\XINT@mul@add@CDw #1.#2#3\X\Y\Z 
+{%
+    \XINT@mul@add@end #1#3%
+}%
+\def\xint@mul@add@cx 
+    #1\xint@mul@add@cy
+    #2\xint@mul@add@cz
+    \W\XINT@mul@add@CD 
+{\expandafter
+    \XINT@mul@add@CDx\the\numexpr 1+#1#2\relax.%
+}%
+\def\XINT@mul@add@CDx   #1.#2#3\Y\Z 
+{%
+    \XINT@mul@add@end #1#3%
+}%
+\def\xint@mul@add@cy 
+    #1\xint@mul@add@cz
+    \W\XINT@mul@add@CD
+{\expandafter
+    \XINT@mul@add@CDy\the\numexpr 1+#1\relax.%
+}%
+\def\XINT@mul@add@CDy  #1.#2#3\Z 
+{%
+    \XINT@mul@add@end #1#3%
+}%
+\def\xint@mul@add@cz\W\XINT@mul@add@CD #1#2#3{\XINT@mul@add@end #1#3}%
+\def\XINT@mul@add@end #1#2#3#4#5%
+{\expandafter\space
+  \the\numexpr #1#2#3#4#5\relax 
+}%
+\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}% 
+}%
+\def\xint@mul@br\Z\XINT@mul@Br #1#2%  
+{%
+     \XINT@sum@AC@checkcarry #1%
+}%
+\def\XINT@mul@Br #1#2#3#4\W\X\Y\Z #5#6#7#8%
+{\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%
+{%
+    \XINT@mul@Ar #2{#7#6#5#4#3}%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% Mr renvoie le résultat ***à l'envers***, sur ***4n chiffres***
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@mul@Mr #1%
+{%
+    \expandafter
+    \XINT@mul@Mr@checkifzeroorone
+    \expandafter{\the\numexpr #1\relax}%
+}%
+\def\XINT@mul@Mr@checkifzeroorone #1%
+{%
+    \ifcase #1
+      \expandafter\XINT@mul@Mr@zero
+    \or 
+      \expandafter\XINT@mul@Mr@one
+    \else
+      \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%
+{% 
+    \xint@z #4\xint@mul@pr\Z\XINT@mul@Pr {#1}{#3}{#7#6#5#4}{#2}{#3}%
+}%
+\def\XINT@mul@Pr #1#2#3%
+{\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%
+{%
+    \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%
+{%
+    \xint@quatrezeros #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@M #1%
+{\expandafter
+    \XINT@mul@M@checkifzeroorone
+    \expandafter{\the\numexpr #1\relax}%
+}%
+\def\XINT@mul@M@checkifzeroorone #1%
+{%
+    \ifcase #1
+      \expandafter\XINT@mul@M@zero
+    \or 
+      \expandafter\XINT@mul@M@one
+    \else
+      \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 {%
+    \expandafter
+       \xint@cleanupzeros@andstop
+    \romannumeral0\XINT@rev{#4}%
+}%
+\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}%
+}%
+\def\XINT@mul@P #1#2#3%
+{\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%
+{%
+    \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%
+{%
+    \XINT@mul@M@end #1#4%
+}%
+\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}
+% Routine de multiplication principale
+% 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 <N1>\W\X\Y\Z <N2>\W\X\Y\Z
+% avec N1: *renversé*, *longueur 4n* (zéros éventuellement ajoutés
+% au-delà du chiffre le plus significatif)
+% et N2 = dans l'ordre *normal*, et pas forcément longueur 4n, 
+% et N2 est *non nul*.
+% pas de signes
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\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 
+}%
+\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 
+}%
+\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 
+}%
+\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 
+}%
+\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 
+}%
+\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 
+}%
+\def\XINT@mul@compute #1#2#3\W\X\Y\Z 
+{\expandafter 
+    \XINT@mul@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
+            }#3\W\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@mul@add@A \expandafter0\expandafter{\expandafter}%
+          \romannumeral0%
+    \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 
+{%
+    \expandafter
+    \XINT@mul@add@A \expandafter0\expandafter{\expandafter}%
+          \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 
+{%
+    \expandafter
+    \XINT@mul@add@A \expandafter0\expandafter{\expandafter}%
+          \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 
+{%
+    \expandafter
+    \xint@cleanupzeros@andstop\romannumeral0\XINT@rev{#1}%
+}%
+%    \end{macrocode}
+% \subsection{\ch{xintSqr}}
+%    \begin{macrocode}
+\def\xintSqr {\romannumeral0\xintsqr }%
+\def\xintsqr #1%
+{%
+    \expandafter\expandafter\expandafter
+    \XINT@sqr
+    \expandafter\expandafter\expandafter
+    {\xintAbs{#1}}% fait l'expansion de #1 et se d\'ebarrasse du signe
+}%
+\def\XINT@sqr #1%
+{\expandafter
+          \XINT@mul@enter
+          \romannumeral0%
+          \XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z
+          \W\X\Y\Z #1\W\X\Y\Z 
+}%
+%    \end{macrocode}
+% \subsection{\ch{xintPrd}, \ch{xintProductExpr}}
+% \begin{verbatim}
+% \xintPrd {{a}...{z}}
+% \xintProductExpr {a}...{z}\relax
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@posprod #1%
+{%
+    \XINT@pprod@checkifempty #1\Z
+}%
+\def\XINT@pprod@checkifempty #1%
+{%
+    \xint@relax #1\XINT@pprod@emptyproduct\relax 
+    \XINT@pprod@RQfirst #1%
+}%
+\def\XINT@pprod@emptyproduct #1\Z { 1}%
+\def\XINT@pprod@RQfirst #1\Z
+{%
+    \expandafter\XINT@pprod@getnext\expandafter
+    {\romannumeral0\XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z}%
+}%
+\def\XINT@pprod@getnext #1#2%
+{%
+    \XINT@pprod@checkiffinished #2\Z {#1}%
+}%
+\def\XINT@pprod@checkiffinished #1%
+{%
+    \xint@relax #1\XINT@pprod@end\relax 
+    \XINT@pprod@compute #1%
+}%
+\def\XINT@pprod@compute #1\Z #2%
+{%
+    \expandafter
+        \XINT@pprod@getnext 
+    \expandafter
+    {\romannumeral0\XINT@prod@mul@enter #2\W\X\Y\Z #1\W\X\Y\Z}%
+}%
+\def\XINT@pprod@end\relax\XINT@pprod@compute #1\Z #2%
+{%
+    \expandafter
+    \xint@cleanupzeros@andstop
+    \romannumeral0\XINT@rev {#2}%
+}%
+\def\xintProductExpr {\romannumeral0\xintproductexpr }%
+\def\xintPrd {\romannumeral0\xintprd }%
+\def\xintprd #1%
+{%
+    \expandafter\expandafter\expandafter
+    \xintproductexpr #1\relax
+}%
+\def\xintproductexpr #1%
+{%
+    \expandafter\expandafter\expandafter
+    \XINT@prod@checkifempty #1\Z
+}%
+\def\XINT@prod@checkifempty #1%
+{%
+    \xint@relax #1\XINT@prod@emptyproduct\relax 
+    \XINT@prod@checkfirstsign #1%
+}%
+\def\XINT@prod@emptyproduct #1\Z { 1}%
+\def\XINT@prod@checkfirstsign #1%
+{%
+    \xint@zero #1\XINT@prod@returnzero0%
+    \xint@UDsignfork
+      #1\dummy \XINT@prod@firstisneg
+       -\dummy \XINT@prod@firstispos
+    \xint@UDforksign
+    #1%
+}%
+\def\XINT@prod@returnzero #1\relax { 0}%
+\def\XINT@prod@firstisneg #1#2\Z
+{%
+    \expandafter\XINT@prod@xpxpnext\expandafter
+    0\expandafter{\romannumeral0\XINT@RQ {}#2\R\R\R\R\R\R\R\R\Z}% 
+}%
+\def\XINT@prod@firstispos #1\Z
+{%
+    \expandafter\XINT@prod@xpxpnext\expandafter
+    1\expandafter{\romannumeral0\XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z }%
+}%
+\def\XINT@prod@xpxpnext #1#2#3%
+{%
+    \expandafter\expandafter\expandafter
+    \XINT@prod@checkiffinished #3\Z {#2}#1%
+}%
+\def\XINT@prod@checkiffinished #1%
+{%
+    \xint@relax #1\XINT@prod@end\relax 
+    \XINT@prod@checksign #1%
+}%
+\def\XINT@prod@checksign #1%
+{%
+    \xint@zero #1\XINT@prod@returnzero0%
+    \xint@UDsignfork
+      #1\dummy \XINT@prod@neg
+       -\dummy \XINT@prod@pos
+    \xint@UDforksign
+    #1%
+}%
+\def\XINT@prod@pos #1\Z #2#3%
+{%
+    \expandafter
+       \XINT@prod@xpxpnext
+    \expandafter
+       #3%
+    \expandafter
+       {\romannumeral0\XINT@prod@mul@enter #2\W\X\Y\Z #1\W\X\Y\Z }%
+}%
+\def\XINT@prod@neg #1#2\Z #3#4%
+{%
+    \expandafter
+      \XINT@prod@xpxpnext
+    \expandafter
+      {\the\numexpr 1-#4\expandafter}%
+    \expandafter
+    {\romannumeral0\XINT@prod@mul@enter #3\W\X\Y\Z #2\W\X\Y\Z }%
+}%
+\def\XINT@prod@end\relax\XINT@prod@checksign #1\Z #2#3%
+{%
+    \expandafter
+       \xint@prod@cleanupzeros
+    \romannumeral0\XINT@rev {#2#3}%
+}%
+\def\xint@prod@cleanupzeros #1#2#3#4#5%
+{%
+    \expandafter\space\the\numexpr (2*#1-1)*#2#3#4#5\relax 
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+%    MULTIPLICATION ET ADDITION POUR LES PRODUITS
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@prod@add@A #1#2#3#4#5#6%  
+{%
+    \xint@w 
+    #3\xint@prod@add@az 
+    \W\XINT@prod@add@AB #1{#3#4#5#6}{#2}% 
+}%
+\def\xint@prod@add@az\W\XINT@prod@add@AB #1#2%  
+{%
+    \XINT@prod@add@AC@checkcarry #1%
+}%
+\def\XINT@prod@add@AC@checkcarry #1%
+{%
+    \xint@zero #1\xint@prod@add@AC@nocarry 0\XINT@prod@add@C 
+}%
+\def\xint@prod@add@AC@nocarry 0\XINT@prod@add@C 
+{%
+    \XINT@prod@add@F
+}%
+\def\XINT@prod@add@AB #1#2#3#4\W\X\Y\Z #5#6#7#8%  
+{%
+    \XINT@prod@add@ABE #1#2{#8#7#6#5}{#3}#4\W\X\Y\Z 
+}%
+\def\XINT@prod@add@ABE #1#2#3#4#5#6%
+{\expandafter
+    \XINT@prod@add@ABEA\the\numexpr #1+10#5#4#3#2+#6\relax
+}%
+\def\XINT@prod@add@ABEA #1#2#3#4#5#6#7%  
+{% 
+   \XINT@prod@add@A  #2{#7#6#5#4#3}%<-- attention on met donc \`a droite
+}%
+\def\XINT@prod@add@C #1#2#3#4#5%  
+{%
+    \xint@w 
+    #5\xint@prod@add@cw
+    #4\xint@prod@add@cx 
+    #3\xint@prod@add@cy 
+    #2\xint@prod@add@cz 
+    \W\XINT@prod@add@CD   {#5#4#3#2}{#1}%
+}%
+\def\XINT@prod@add@CD #1%
+{\expandafter
+    \XINT@prod@add@CC\the\numexpr 1+10#1\relax
+}%
+\def\XINT@prod@add@CC #1#2#3#4#5#6#7%
+{%
+    \XINT@prod@add@AC@checkcarry  #2{#7#6#5#4#3}%
+}%
+\def\xint@prod@add@cw 
+    #1\xint@prod@add@cx
+    #2\xint@prod@add@cy
+    #3\xint@prod@add@cz
+    \W\XINT@prod@add@CD 
+{\expandafter
+    \XINT@prod@add@CDw\the\numexpr 1+10#1#2#3\relax
+}%
+\def\XINT@prod@add@CDw #1#2#3#4#5#6%  
+{%
+    \xint@quatrezeros #2#3#4#5\XINT@prod@add@endDw@zeros 
+                          0000\XINT@prod@add@endDw #2#3#4#5%
+}%
+\def\XINT@prod@add@endDw@zeros 0000\XINT@prod@add@endDw 0000#1\X\Y\Z{ #1}%
+\def\XINT@prod@add@endDw #1#2#3#4#5\X\Y\Z{ #5#4#3#2#1}%
+\def\xint@prod@add@cx 
+    #1\xint@prod@add@cy
+    #2\xint@prod@add@cz
+    \W\XINT@prod@add@CD 
+{\expandafter
+    \XINT@prod@add@CDx\the\numexpr 1+100#1#2\relax
+}%
+\def\XINT@prod@add@CDx #1#2#3#4#5#6%  
+{%
+    \xint@quatrezeros #2#3#4#5\XINT@prod@add@endDx@zeros
+                          0000\XINT@prod@add@endDx #2#3#4#5%
+}%
+\def\XINT@prod@add@endDx@zeros 0000\XINT@prod@add@endDx 0000#1\Y\Z{ #1}%
+\def\XINT@prod@add@endDx #1#2#3#4#5\Y\Z{ #5#4#3#2#1}%
+\def\xint@prod@add@cy 
+    #1\xint@prod@add@cz
+    \W\XINT@prod@add@CD 
+{\expandafter
+    \XINT@prod@add@CDy\the\numexpr 1+1000#1\relax
+}%
+\def\XINT@prod@add@CDy #1#2#3#4#5#6%  
+{%
+    \xint@quatrezeros #2#3#4#5\XINT@prod@add@endDy@zeros
+                          0000\XINT@prod@add@endDy #2#3#4#5%
+}%
+\def\XINT@prod@add@endDy@zeros 0000\XINT@prod@add@endDy 0000#1\Z{ #1}%
+\def\XINT@prod@add@endDy #1#2#3#4#5\Z{ #5#4#3#2#1}%
+\def\xint@prod@add@cz\W\XINT@prod@add@CD #1#2{ #21000}%
+\def\XINT@prod@add@F #1#2#3#4#5%  
+{%
+    \xint@w 
+    #5\xint@prod@add@Gw
+    #4\xint@prod@add@Gx 
+    #3\xint@prod@add@Gy 
+    #2\xint@prod@add@Gz 
+    \W\XINT@prod@add@G   {#2#3#4#5}{#1}%
+}%
+\def\XINT@prod@add@G #1#2%
+{%
+    \XINT@prod@add@F {#2#1}%
+}%
+\def\xint@prod@add@Gw 
+    #1\xint@prod@add@Gx
+    #2\xint@prod@add@Gy
+    #3\xint@prod@add@Gz
+    \W\XINT@prod@add@G #4%
+{%
+    \xint@quatrezeros  #3#2#10\XINT@prod@add@endGw@zeros 
+                          0000\XINT@prod@add@endGw #3#2#10%
+}%
+\def\XINT@prod@add@endGw@zeros 0000\XINT@prod@add@endGw 0000#1\X\Y\Z{ #1}%
+\def\XINT@prod@add@endGw #1#2#3#4#5\X\Y\Z{ #5#1#2#3#4}%
+\def\xint@prod@add@Gx
+    #1\xint@prod@add@Gy
+    #2\xint@prod@add@Gz
+    \W\XINT@prod@add@G #3%
+{%
+    \xint@quatrezeros  #2#100\XINT@prod@add@endGx@zeros 
+                         0000\XINT@prod@add@endGx #2#100%
+}%
+\def\XINT@prod@add@endGx@zeros 0000\XINT@prod@add@endGx 0000#1\Y\Z{ #1}%
+\def\XINT@prod@add@endGx #1#2#3#4#5\Y\Z{ #5#1#2#3#4}%
+\def\xint@prod@add@Gy
+    #1\xint@prod@add@Gz
+    \W\XINT@prod@add@G #2%
+{%
+    \xint@quatrezeros   #1000\XINT@prod@add@endGy@zeros 
+                         0000\XINT@prod@add@endGy #1000%
+}%
+\def\XINT@prod@add@endGy@zeros 0000\XINT@prod@add@endGy 0000#1\Z{ #1}%
+\def\XINT@prod@add@endGy #1#2#3#4#5\Z{ #5#1#2#3#4}%
+\def\xint@prod@add@Gz\W\XINT@prod@add@G #1#2{ #2}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+%--- multiplication spéciale
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@prod@mul@enter #1\W\X\Y\Z #2#3#4#5%
+{% 
+    \xint@w          
+    #5\xint@prod@mul@enterw 
+    #4\xint@prod@mul@enterx 
+    #3\xint@prod@mul@entery 
+    #2\xint@prod@mul@enterz 
+    \W\XINT@prod@mul@start {#2#3#4#5}#1\W\X\Y\Z 
+}%
+\def\xint@prod@mul@enterw 
+    #1\xint@prod@mul@enterx 
+    #2\xint@prod@mul@entery 
+    #3\xint@prod@mul@enterz
+    \W\XINT@prod@mul@start  #4#5\W\X\Y\Z \X\Y\Z 
+{%
+    \XINT@mul@Mr {#3#2#1}#5\Z\Z\Z\Z 
+}%
+\def\xint@prod@mul@enterx 
+    #1\xint@prod@mul@entery 
+    #2\xint@prod@mul@enterz
+    \W\XINT@prod@mul@start  #3#4\W\X\Y\Z \Y\Z 
+{%
+    \XINT@mul@Mr {#2#1}#4\Z\Z\Z\Z 
+}%
+\def\xint@prod@mul@entery 
+    #1\xint@prod@mul@enterz
+    \W\XINT@prod@mul@start  #2#3\W\X\Y\Z \Z 
+{%
+    \XINT@mul@Mr {#1}#3\Z\Z\Z\Z 
+}%
+\def\XINT@prod@mul@start #1#2\W\X\Y\Z 
+{\expandafter 
+    \XINT@prod@mul@main \expandafter
+          {\romannumeral0%
+           \XINT@mul@Mr {#1}#2\Z\Z\Z\Z 
+          }#2\W\X\Y\Z 
+}%
+\def\XINT@prod@mul@main #1#2\W\X\Y\Z #3#4#5#6%
+{%
+    \xint@w 
+    #6\xint@prod@mul@mainw
+    #5\xint@prod@mul@mainx 
+    #4\xint@prod@mul@mainy 
+    #3\xint@prod@mul@mainz 
+    \W\XINT@prod@mul@compute {#1}{#3#4#5#6}#2\W\X\Y\Z 
+}%
+\def\XINT@prod@mul@compute #1#2#3\W\X\Y\Z 
+{\expandafter 
+    \XINT@prod@mul@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 
+            }#3\W\X\Y\Z 
+}%
+\def\xint@prod@mul@mainw 
+    #1\xint@prod@mul@mainx 
+    #2\xint@prod@mul@mainy 
+    #3\xint@prod@mul@mainz
+    \W\XINT@prod@mul@compute  #4#5#6\W\X\Y\Z \X\Y\Z 
+{%
+    \expandafter
+    \XINT@prod@add@A \expandafter0\expandafter{\expandafter}%
+          \romannumeral0%
+    \XINT@mul@Mr  {#3#2#1}#6\Z\Z\Z\Z
+                            \W\X\Y\Z 000#4\W\X\Y\Z
+}%
+\def\xint@prod@mul@mainx 
+    #1\xint@prod@mul@mainy 
+    #2\xint@prod@mul@mainz
+    \W\XINT@prod@mul@compute  #3#4#5\W\X\Y\Z \Y\Z 
+{%
+    \expandafter
+    \XINT@prod@add@A \expandafter0\expandafter{\expandafter}%
+          \romannumeral0%
+    \XINT@mul@Mr   {#2#1}#5\Z\Z\Z\Z 
+                           \W\X\Y\Z  00#3\W\X\Y\Z
+}%
+\def\xint@prod@mul@mainy 
+    #1\xint@prod@mul@mainz
+    \W\XINT@prod@mul@compute  #2#3#4\W\X\Y\Z \Z 
+{%
+    \expandafter
+    \XINT@prod@add@A \expandafter0\expandafter{\expandafter}%
+          \romannumeral0%
+    \XINT@mul@Mr    {#1}#4\Z\Z\Z\Z 
+                          \W\X\Y\Z 0#2\W\X\Y\Z
+}%
+\def\xint@prod@mul@mainz\W\XINT@prod@mul@compute #1#2#3\W\X\Y\Z 
+{ #1}%
+%    \end{macrocode}
+% \subsection{\ch{xintFac}}
+%    \begin{macrocode}
+\def\xintFac {\romannumeral0\xintfac }%
+\def\xintfac #1%
+{%
+    \expandafter\expandafter\expandafter
+        \XINT@fac@fork
+    \expandafter\expandafter\expandafter
+        {#1}%
+}%
+\def\XINT@Fac {\romannumeral0\XINT@fac@fork }%
+\def\XINT@fac@fork #1%
+{%
+    \ifcase\xintSgn {#1}
+       \xint@afterfi{\expandafter\space\expandafter 1\xint@gobble }%
+    \or
+       \expandafter\XINT@fac@checklength
+    \else
+       \xint@afterfi{\xintError:FactorialOfNegativeNumber
+                \expandafter\space\expandafter 1\xint@gobble }%
+    \fi
+    {#1}%
+}%
+\def\XINT@fac@checklength #1%
+{%
+    \ifnum\xintLen {#1} > 9
+       \xint@afterfi{\xintError:FactorialOfTooBigNumber
+           \expandafter\space\expandafter 1\xint@gobble@three }%
+    \else
+       \expandafter\XINT@fac@loop
+    \fi
+    {1}{#1}{}%
+}%
+\def\XINT@fac@loop #1#2#3%
+{%
+    \ifnum #1<#2
+        \expandafter
+            \XINT@fac@loop
+        \expandafter
+           {\the\numexpr #1+1\expandafter }%
+    \else
+        \expandafter\XINT@fac@docomputation
+    \fi
+    {#2}{#3{#1}}%
+}%
+\def\XINT@fac@docomputation #1#2%
+{%
+    \XINT@posprod #2\relax
+}%
+%    \end{macrocode}
+% \subsection{\ch{xintPow}}
+%    \begin{macrocode}
+\def\xintPow {\romannumeral0\xintpow }%
+\def\xintpow #1%
+{%
+    \expandafter\expandafter\expandafter
+       \xint@pow
+       #1\Z%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #1#2 = A
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\xint@pow #1#2\Z 
+{% 
+    \xint@UDsignfork
+      #1\dummy \XINT@pow@Aneg
+       -\dummy \XINT@pow@Anonneg
+    \xint@UDforksign
+       #1{#2}%
+}%
+\def\XINT@pow@Aneg #1#2#3%
+{%
+   \expandafter\expandafter\expandafter
+      \XINT@pow@Aneg@
+   \expandafter\expandafter\expandafter
+      {#3}{#2}%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% B = #1, xpxp déjà fait
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@pow@Aneg@ #1%
+{%
+   \ifcase\XINT@Odd{#1}
+   \or \expandafter\XINT@pow@Aneg@Bodd
+   \fi
+   \XINT@pow@Anonneg@ {#1}%
+}%
+\def\XINT@pow@Aneg@Bodd #1%
+{%
+    \expandafter\XINT@opp\romannumeral0\XINT@pow@Anonneg@ 
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% B = #3, faire le xpxp
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@pow@Anonneg #1#2#3%
+{%
+   \expandafter\expandafter\expandafter
+      \XINT@pow@Anonneg@
+   \expandafter\expandafter\expandafter
+   {#3}{#1#2}%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #1 = B, #2 = |A|
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@pow@Anonneg@ #1#2%
+{%
+    \ifcase\XINT@Cmp {#2}{1}
+        \expandafter\XINT@pow@AisOne
+    \or 
+        \expandafter\XINT@pow@AatleastTwo
+    \else
+        \expandafter\XINT@pow@AisZero
+    \fi
+    {#1}{#2}%
+}%
+\def\XINT@pow@AisOne #1#2{ 1}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #1 = B
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@pow@AisZero #1#2%
+{%
+     \ifcase\XINT@Sgn {#1}
+         \xint@afterfi { 1}%
+     \or
+         \xint@afterfi { 0}%
+     \else
+         \xint@afterfi {\xintError:DivisionByZero\space 0}%
+     \fi
+}%
+\def\XINT@pow@AatleastTwo #1%
+{%
+    \ifcase\XINT@Sgn {#1}
+        \expandafter\XINT@pow@BisZero
+    \or
+        \expandafter\XINT@pow@checkBlength
+    \else
+        \expandafter\XINT@pow@BisNegative
+    \fi
+    {#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
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@pow@checkBlength #1#2%
+{%
+    \ifnum\xintLen{#1} >9 
+        \expandafter\XINT@pow@BtooBig
+    \else
+        \expandafter\XINT@pow@loop
+    \fi
+    {#1}{#2}\XINT@posprod
+      \xint@UNDEF
+        \xint@undef\xint@undef\xint@undef\xint@undef
+        \xint@undef\xint@undef\xint@undef\xint@undef
+      \xint@UNDEF
+}%
+\def\XINT@pow@BtooBig #1\xint@UNDEF #2\xint@UNDEF
+               {\xintError:ExponentTooBig\space 0}%
+\def\XINT@pow@loop #1#2%
+{%
+    \ifnum #1 = 1
+        \expandafter\XINT@pow@loop@end 
+    \else
+        \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\xintsqr{#2}}}%
+    \fi
+    {{#2}}%
+}%
+\def\XINT@pow@loop@end {\romannumeral0\XINT@rord@main {}\relax }%
+\def\XINT@pow@loop@a #1%
+{%
+    \ifnum #1 = 1
+        \expandafter\XINT@pow@loop
+    \else
+        \expandafter\XINT@pow@loop@throwaway
+    \fi
+}%
+\def\XINT@pow@loop@throwaway #1#2#3%
+{%
+   \XINT@pow@loop {#1}{#2}% 
+}%
+%    \end{macrocode}
+% \subsection{\ch{xintDivision}, \ch{xintQuo}, \ch{xintRem}}
+%    \begin{macrocode}
+\def\xintQuo {\romannumeral0\xintquo }%
+\def\xintRem {\romannumeral0\xintrem }%
+\def\xintquo {%
+               \expandafter
+                  \xint@firstoftwo@andstop
+               \romannumeral0\xintdivision }%
+\def\xintrem {%
+               \expandafter
+                  \xint@secondoftwo@andstop
+               \romannumeral0\xintdivision }%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #1 = A, #2 = B. On calcule le quotient de A par B
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\xintDivision {\romannumeral0\xintdivision }%
+\def\xintdivision #1%
+{%
+    \expandafter\expandafter\expandafter
+        \xint@division
+    \expandafter\expandafter\expandafter
+        {#1}%
+}%
+\def\xint@division #1#2%
+{%
+    \expandafter\expandafter\expandafter
+    \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}
+%    \begin{macrocode}
+\def\XINT@div@fork #1#2\Z #3#4\Z
+{%
+    \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@UDforksign }%
+    \xint@UDforkzero
+    {#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}}%
+%    \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
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@div@plusplus #1#2#3#4%
+{%
+    \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}
+%    \begin{macrocode}
+\def\XINT@div@BisNegative #1#2#3#4%
+{%
+    \expandafter\XINT@div@BisNegative@post
+    \romannumeral0\XINT@div@fork #1\Z #4#2\Z
+}%
+\def\XINT@div@BisNegative@post #1#2%
+{%
+    \expandafter\space\expandafter
+        {\romannumeral0\XINT@opp #1}{#2}%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% B = #3#1 > 0, A =-#2< 0
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@div@AisNegative #1#2#3#4%
+{%
+    \expandafter\XINT@div@AisNegative@post
+    \romannumeral0\XINT@div@prepare {#3#1}{#2}{#3#1}%
+}%
+\def\XINT@div@AisNegative@post #1#2%
+{%
+    \ifcase\xintSgn {#2}
+       \expandafter \XINT@div@AisNegative@zerorem
+    \or
+       \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}
+%    \begin{macrocode}
+\def\XINT@div@AisNegative@zerorem #1#2#3%
+{%
+    \expandafter\space\expandafter
+       {\romannumeral0\XINT@opp #1}{0}%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #1 = quotient, #2 = reste, #3 = diviseur initial (à l'endroit)
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@div@AisNegative@posrem #1%
+{%
+    \expandafter
+        \XINT@div@AisNegative@posrem@b
+    \expandafter
+       {\romannumeral0\xintopp {\XINT@Add{#1}{1}}}%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% 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}
+%    \begin{macrocode}
+\def\XINT@div@AisNegative@posrem@b #1#2#3%
+{%
+    \expandafter
+        \xint@exchangetwo@keepbraces@andstop
+    \expandafter
+    {\romannumeral0\XINT@sub {#3}{#2}}{#1}%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% par la suite A et B sont > 0.
+% #1 = B. Pour le moment à l'endroit.
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@div@prepare #1%
+{%
+    \expandafter
+      \XINT@div@prepareB@a
+    \expandafter
+    {\romannumeral0\XINT@length {#1}}{#1}% B > 0 ici
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% Calcul du plus petit K = 4n >= longueur de B
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@div@prepareB@a #1%
+{%
+    \expandafter\XINT@div@prepareB@b\expandafter
+    {\the\numexpr 4*((#1+1)/4)\relax}{#1}%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #1 = K
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@div@prepareB@b #1#2%
+{%
+    \expandafter\XINT@div@prepareB@c \expandafter
+       {\the\numexpr #1-#2\relax}{#1}%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #1 = c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@div@prepareB@c #1%
+{%
+    \ifcase #1
+          \expandafter\XINT@div@prepareB@di
+    \or   \expandafter\XINT@div@prepareB@dii
+    \or   \expandafter\XINT@div@prepareB@diii
+    \else \expandafter\XINT@div@prepareB@div
+    \fi
+}%
+\def\XINT@div@prepareB@di   {\XINT@div@prepareB@e {}{0}}%
+\def\XINT@div@prepareB@dii  {\XINT@div@prepareB@e {0}{1}}%
+\def\XINT@div@prepareB@diii {\XINT@div@prepareB@e {00}{2}}%
+\def\XINT@div@prepareB@div  {\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}
+%    \begin{macrocode}
+\def\XINT@div@prepareB@e #1#2#3#4%
+{%
+    \XINT@div@prepareB@f #4#1\Z {#3}{#2}{#1}%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% 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}
+%    \begin{macrocode}
+\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}%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #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}
+%    \begin{macrocode}
+\def\XINT@div@prepareB@g #1#2#3#4#5#6%
+{%
+    \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}
+%    \begin{macrocode}
+\def\XINT@div@prepareA@a #1%
+{%
+    \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}
+%    \begin{macrocode}
+\def\XINT@div@prepareA@b #1%
+{%
+    \expandafter\XINT@div@prepareA@c\expandafter
+    {\the\numexpr 4*((#1+1)/4)\relax}{#1}%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% L, L0, A, x, K, B,...
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@div@prepareA@c #1#2%
+{%
+    \expandafter\XINT@div@prepareA@d \expandafter
+       {\the\numexpr #1-#2\relax}{#1}%
+}%
+\def\XINT@div@prepareA@d #1%
+{%
+    \ifcase #1
+          \expandafter\XINT@div@prepareA@di
+    \or   \expandafter\XINT@div@prepareA@dii
+    \or   \expandafter\XINT@div@prepareA@diii
+    \else \expandafter\XINT@div@prepareA@div
+    \fi
+}%
+\def\XINT@div@prepareA@di   {\XINT@div@prepareA@e {}}%
+\def\XINT@div@prepareA@dii  {\XINT@div@prepareA@e {0}}%
+\def\XINT@div@prepareA@diii {\XINT@div@prepareA@e {00}}%
+\def\XINT@div@prepareA@div  {\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}
+%    \begin{macrocode}
+\def\XINT@div@prepareA@e #1#2#3%
+{%
+    \XINT@div@startswitch {#1#3}{#2}% 
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% A, L, x, K, B, ...
+% A, L, x, K, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@div@startswitch #1#2#3#4%
+{%
+    \ifnum #2 > #4
+      \expandafter\XINT@div@body@a
+    \else
+    \ifnum #2 = #4
+      \expandafter\expandafter\expandafter
+          \XINT@div@final@a
+    \else
+      \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}
+%    \begin{macrocode}
+\def\XINT@div@finished@a #1#2#3%
+{%
+    \expandafter
+      \XINT@div@finished@b
+    \expandafter
+      {\romannumeral0\XINT@cuz {#1}}%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% A, Q, L, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@div@finished@b #1#2#3#4#5%
+{%
+    \ifcase \XINT@Sgn {#1}
+       \xint@afterfi {\XINT@div@finished@c {0}}%
+    \or
+       \xint@afterfi {\expandafter\XINT@div@finished@c
+                      \expandafter
+         {\romannumeral0\XINT@dsh@preparegobble {#1}{#5}}}%
+    \fi
+    {#2}%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% Reste Final, Q à renverser 
+% #2 = Quotient, #1 = Reste.
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@div@finished@c #1#2%
+{%
+    \expandafter
+         \space
+    \expandafter
+        {\romannumeral0\expandafter\xint@cleanupzeros@andstop
+         \romannumeral0\XINT@rev {#2}}{#1}%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% ---- "Final"
+% A, K, x, Q, L, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@div@final@a #1%
+{%
+    \XINT@div@final@b #1\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}%
+}%
+\def\xint@div@final@c0000\XINT@div@final@c #1%
+                            {\XINT@div@finished@a }%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% a, A, K, x, Q, L, B ,c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@div@final@c #1#2#3#4%
+{%
+    \expandafter
+    \XINT@div@final@d
+    \expandafter
+    {\the\numexpr #1/#4\relax}{#2}%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% q, A, Q, L, B à l'envers sur 4n, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@div@final@d #1#2#3#4#5%
+{% 
+    \expandafter
+       \XINT@div@final@e
+    \expandafter
+    {\romannumeral0\xintsub {\xint@cleanupzeros@nospace #2}%
+              {\romannumeral0\XINT@mul@M {#1}#5\Z\Z\Z\Z }}%
+    {#1}{#2}{#3}{#4}{#5}% 
+}%
+\def\XINT@div@final@e #1#2%
+{%
+    \ifnum\xintSgn{#1} < 0
+        \expandafter\XINT@div@final@d  % en arri\`ere toute
+        \expandafter{\the\numexpr #2-1\expandafter
+                          \expandafter\expandafter }%
+        \expandafter\xint@gobble@two
+    \else
+        \expandafter\XINT@div@final@f
+    \fi
+    {#1}{#2}%
+}%
+\def\XINT@div@final@f #1#2#3#4#5#6#7%
+{%
+    \ifcase \XINT@Sgn {#1}
+       \xint@afterfi {\XINT@div@final@end {0}}%
+    \or
+       \xint@afterfi {\expandafter\XINT@div@final@end
+                      \expandafter
+                      {\romannumeral0\XINT@dsh@preparegobble {#1}{#7}}}%
+    \fi
+    {\romannumeral0\xintadd {\XINT@Rev@andcleanupzeros{#4}}{#2}}%
+}%
+\def\XINT@div@final@end #1#2%
+{%
+    \expandafter\space\expandafter
+      {#2}{#1}%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% Boucle Principale
+% A, K, x, Q, L, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@div@body@a #1%
+{%
+    \XINT@div@body@b #1\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#9}%
+    {#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}
+%    \begin{macrocode}
+\def\XINT@div@body@c #1#2#3%
+{%
+    \XINT@div@body@d {#3}{}#1\Z {#2}{#3}%
+}%
+\def\XINT@div@body@d #1#2#3#4#5#6%
+{%
+    \ifnum #1 > 0
+        \expandafter
+        \XINT@div@body@d
+        \expandafter
+        {\the\numexpr #1-4\expandafter }%
+    \else
+        \expandafter
+        \XINT@div@body@e
+    \fi
+    {#6#5#4#3#2}%
+}%
+\def\XINT@div@body@e #1#2\Z #3%
+{%
+    \XINT@div@body@f {#3}{#1}{#2}%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% a, alpha, alpha', K, x, Q, L, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@div@body@f #1#2#3#4#5#6#7#8%
+{%
+    \expandafter\XINT@div@body@g
+    \expandafter
+    {\the\numexpr (#1+(#5+1)/2)/(#5+1)-1\relax }%
+    {#2}{#8}{#4}{#5}{#3}{#6}{#7}{#8}%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% q1, alpha, B, K, x, alpha', Q, L, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@div@body@g #1#2#3%
+{%
+    \expandafter
+       \XINT@div@body@h 
+    \romannumeral0\XINT@div@sub@xpxp
+       {\romannumeral0\XINT@prod@mul@enter #3\W\X\Y\Z #1\W\X\Y\Z }%
+       {#2}\Z
+    {#3}{#1}%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% alpha1 = alpha-q1 B, \Z, B, q1, K, x, alpha', Q, L, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\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}}%
+    \else
+        \expandafter\XINT@div@body@k
+    \fi
+    {#1#2#3#4#5#6#7#8#9}%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% a1, alpha1, B, q1, K, x, alpha', Q, L, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@div@body@i #1#2#3#4#5#6%
+{%
+    \expandafter\XINT@div@body@j
+    \expandafter{\the\numexpr (#1+(#6+1)/2)/(#6+1)-1\relax }%
+       {#2}{#3}{#4}{#5}{#6}%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% q2, alpha1, B, q1, K, x, alpha', Q, L, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@div@body@j #1#2#3#4%
+{%
+    \expandafter
+       \XINT@div@body@l
+    \expandafter{\romannumeral0\XINT@div@sub@xpxp
+       {\romannumeral0\XINT@prod@mul@enter #3\W\X\Y\Z #1\W\X\Y\Z }%
+       {\XINT@Rev{#2}}}%
+    {#4+#1}%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% alpha2, q1+q2, K, x, alpha', Q, L, B, c
+% attention body@j -> body@l
+% alpha1, B, q=q1, K, x, alpha', Q, L, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@div@body@k #1#2%
+{%
+    \XINT@div@body@l {#1}%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% alpha2, q= q1+q2, K, x, alpha', Q, L, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@div@body@l #1#2#3#4#5#6#7%
+{%
+   \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', x, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\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}}%
+    \else
+       \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}
+%    \begin{macrocode}
+\def\XINT@div@body@n #1#2%
+{%
+    \expandafter\XINT@div@body@o\expandafter
+    {\romannumeral0\XINT@sum@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}
+%    \begin{macrocode}
+\def\XINT@div@body@o #1#2#3#4%
+{%
+    \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}
+%    \begin{macrocode}
+\def\XINT@div@body@p #1#2#3#4#5#6#7%
+{%
+    \ifnum #1 > #2
+        \xint@afterfi
+        {\ifnum #4#5#6#7 > 0
+           \expandafter\XINT@div@body@q
+         \else
+           \expandafter\XINT@div@body@repeatp
+         \fi }%
+    \else
+        \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}
+%    \begin{macrocode}
+\def\XINT@div@body@repeatp #1#2#3#4#5#6#7%
+{%
+    \expandafter
+        \XINT@div@body@p
+    \expandafter
+        {\the\numexpr #1-4\relax}{#2}{0000#3}%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% 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, Q+q, x, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@div@body@q #1#2#3#4\Z #5#6%
+{%
+    \XINT@div@body@a {#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}
+%    \begin{macrocode}
+\def\XINT@div@gotofinal@a #1#2#3#4\Z %
+{%
+    \XINT@div@gotofinal@b #3\Z {#4}{#1}%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% zeros\Z, A, L=K, Q, x, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@div@gotofinal@b 0000#1\Z #2#3#4#5%
+{%
+    \XINT@div@final@a {#2}{#3}{#5}{#1#4}{#3}%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% A, L=K, x, Q avec zéros, L, B, c
+% La soustraction spéciale. Étendre deux fois les arguments
+% pour \XINT@div@sub@enter longueur multiple de 4 on sait que #2>#1, 
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@div@sub@xpxp #1%
+{%
+    \expandafter
+        \XINT@div@sub@xpxp@ 
+    \expandafter
+    {#1}%
+}%
+\def\XINT@div@sub@xpxp@ #1#2%
+{%
+    \expandafter\expandafter\expandafter
+        \XINT@div@sub@xpxp@@
+     #2\W\X\Y\Z #1\W\X\Y\Z
+}%
+\def\XINT@div@sub@xpxp@@
+{%
+    \XINT@div@sub@A 1{}%
+}%
+\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}% 
+}%
+\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 
+}%
+\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.%
+}%
+\def\XINT@div@sub@backtoA #1#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%
+{%
+    \xint@UDzerofork
+      #1\dummy  \XINT@div@sub@C   %
+       0\dummy  \XINT@div@sub@D   % pas de retenue
+    \xint@UDforkzero
+    {#7}#2#3#4#5%
+}%
+\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
+    #1%
+}%
+\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}%
+}%
+\def\XINT@div@sub@AC@onestep #1%
+{\expandafter
+    \XINT@div@sub@backtoC\the\numexpr 11#1-1\relax.%
+}%
+\def\XINT@div@sub@backtoC #1#2#3.#4%
+{%
+    \XINT@div@sub@AC@checkcarry #2{#3#4}% la retenue va \^etre examin\'ee
+}%
+\def\XINT@div@sub@AC@checkcarry #1%
+{%
+    \xint@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
+{%
+    \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
+    #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}%
+%    \end{macrocode}
+% \begin{verbatim}
+%-----------------------------------------------------------------
+%-----------------------------------------------------------------
+% 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}
+% \subsection{\ch{xintFDg}}
+% \begin{verbatim}
+%    FIRST DIGIT
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\xintFDg {\romannumeral0\xintfdg }%
+\def\xintfdg #1%
+{%
+    \expandafter\expandafter\expandafter
+    \XINT@fdg #1\W\Z
+}%
+\def\XINT@FDg #1{\romannumeral0\XINT@fdg #1\W\Z }%
+\def\XINT@fdg #1#2%
+{%
+    \xint@xpxp@andstop
+    \xint@UDzerominusfork
+      #1-\dummy  {\expandafter 0}%      zero
+      0#1\dummy  {\expandafter #2}%     negative
+       0-\dummy  {\expandafter #1}%  positive
+    \xint@UDforkminuszero
+    \xint@z
+}%
+%    \end{macrocode}
+% \subsection{\ch{xintLDg}}
+% \begin{verbatim}
+%    LAST DIGIT
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\xintLDg {\romannumeral0\xintldg }%
+\def\xintldg #1%
+{%
+    \expandafter\expandafter\expandafter
+        \XINT@ldg
+    \expandafter\expandafter\expandafter
+    {#1}%
+}%
+\def\XINT@LDg #1{\romannumeral0\XINT@ldg {#1}}%
+\def\XINT@ldg #1%
+{%
+    \expandafter
+    \XINT@ldg@
+    \romannumeral0\XINT@rev {#1}\Z
+}%
+\def\XINT@ldg@ #1%
+{%
+    \expandafter\space\expandafter #1\xint@z
+}%
+%    \end{macrocode}
+% \subsection{\ch{xintOdd}}
+% \begin{verbatim}
+%     ODDNESS
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\xintOdd {\romannumeral0\xintodd }%
+\def\xintodd #1%
+{%
+    \ifodd\xintLDg{#1}
+        \xint@afterfi{ 1}%
+    \else
+        \xint@afterfi{ 0}%
+    \fi
+}%
+\def\XINT@Odd #1%
+{\romannumeral0%
+    \ifodd\XINT@LDg{#1}
+        \xint@afterfi{ 1}%
+    \else
+        \xint@afterfi{ 0}%
+    \fi
+}%
+%    \end{macrocode}
+% \subsection{\ch{xintDSL}}
+% \begin{verbatim}
+%    DECIMAL SHIFT LEFT (=MULTIPLICATION PAR 10)
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\xintDSL {\romannumeral0\xintdsl }%
+\def\xintdsl #1%
+{%
+    \expandafter\expandafter\expandafter
+      \XINT@dsl #1\Z
+}%
+\def\XINT@DSL #1{\romannumeral0\XINT@dsl #1\Z }%
+\def\XINT@dsl #1%
+{%
+    \xint@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}%
+%    \end{macrocode}
+% \subsection{\ch{xintDSR}}
+% \begin{verbatim}
+%    DECIMAL SHIFT RIGHT (=DIVISION PAR 10)
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\xintDSR {\romannumeral0\xintdsr }%
+\def\xintdsr #1%
+{%
+    \expandafter\expandafter\expandafter
+       \XINT@dsr@a
+    \expandafter\expandafter\expandafter
+         {#1}\W\Z
+}%
+\def\XINT@DSR #1{\romannumeral0\XINT@dsr@a {#1}\W\Z }%
+\def\XINT@dsr@a
+{%
+    \expandafter
+       \XINT@dsr@b
+    \romannumeral0\XINT@rev
+}%
+\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}%
+}%
+\def\xint@dsr@onedigit #1\XINT@rev #2{ 0}%
+\def\XINT@dsr@removew #1\W { }%
+%    \end{macrocode}
+% \subsection{\ch{xintDSH}}
+% \begin{verbatim}
+%     DECIMAL SHIFTS
+%    \xintDSH {x}{A}
+% si x <= 0, fait A -> A.10^(|x|)
+% 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)
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\xintDSH {\romannumeral0\xintdsh }%
+\def\xintdsh #1%
+{%
+    \expandafter\expandafter\expandafter
+        \xint@dsh
+    \expandafter\expandafter\expandafter
+    {#1}%
+}%
+\def\xint@dsh #1#2%
+{%
+    \expandafter\expandafter\expandafter\expandafter
+    \expandafter\expandafter\expandafter
+        \XINT@dsh@checkxsize
+    \expandafter\expandafter\expandafter
+        \xint@exchangetwo@keepbraces
+    \expandafter\expandafter\expandafter
+        {#2}{#1}%
+}%
+\def\XINT@DSH {\romannumeral0\XINT@dsh@checkxsize }%
+\def\XINT@dsh@checkxsize #1%
+{%
+    \ifnum\XINT@Len {#1} > 9  
+       \expandafter\XINT@dsh@bigx
+    \else
+       \expandafter\XINT@dsh
+    \fi
+    {#1}%
+}%
+\def\XINT@dsh@bigx  #1#2%
+{%
+    \ifcase\XINT@Sgn {#1}
+    \or \xint@afterfi { 0}%
+    \else  \xint@afterfi
+          {%
+            \ifodd\XINT@Sgn {#2}
+              \xint@afterfi{\xintError:TooBigDecimalShift
+                            \space0}%
+            \else \xint@afterfi { 0}%
+            \fi
+          }%
+    \fi
+}%
+\def\XINT@dsh #1#2{\XINT@dsh@checkAsign #2\Z {#1}}%
+\def\XINT@dsh@checkAsign #1%
+{%
+    \xint@UDzerominusfork
+      #1-\dummy  \XINT@dsh@AisZero
+      0#1\dummy  \XINT@dsh@AisNeg
+       0-\dummy  {\XINT@dsh@directionfork #1}%
+    \xint@UDforkminuszero
+}%
+\def\XINT@dsh@AisZero #1\Z #2{ 0}%
+\def\XINT@dsh@AisNeg {\expandafter\XINT@dsh@neg@checkifreturnedzero
+                      \romannumeral0\XINT@dsh@directionfork }%
+\def\XINT@dsh@neg@checkifreturnedzero #1%
+{%
+    \expandafter\space
+    \xint@UDzerofork
+      #1\dummy {0}%
+       0\dummy {-#1}%
+    \xint@UDforkzero
+}%
+\def\XINT@dsh@directionfork #1\Z #2%
+{% 
+    \XINT@dsh@checkxsign #2\Z {#1}%
+}%
+\def\XINT@dsh@checkxsign #1%
+{%
+    \xint@UDzerominusfork
+      #1-\dummy  \XINT@dsh@donothing
+      0#1\dummy  \XINT@dsh@shiftleft
+       0-\dummy  {\XINT@dsh@shiftright #1}%
+    \xint@UDforkminuszero
+}%
+\def\XINT@dsh@donothing #1\Z #2{ #2}%
+\def\XINT@dsh@shiftright #1\Z #2%
+{%
+    \ifnum \XINT@Length {#2} > #1              
+        \expandafter\XINT@dsh@preparegobble
+    \else
+        \expandafter\XINT@dsh@returnzero
+    \fi
+    {#2}{#1}%
+}%
+\def\XINT@dsh@returnzero #1#2{ 0}%
+\def\XINT@dsh@preparegobble #1%
+{%
+    \expandafter
+        \XINT@dsh@preparegobble@
+    \expandafter
+    {\romannumeral0\XINT@rev{#1}}%
+}%
+\def\XINT@dsh@preparegobble@ #1#2{\XINT@dsh@gobbleloop {#2}#1\Z }%
+\def\XINT@dsh@gobbleloop #1%
+{%
+    \ifcase #1
+        \expandafter\XINT@dsh@endgobble
+    \or
+        \expandafter\XINT@dsh@gobble@one@andend
+    \or
+        \expandafter\XINT@dsh@gobble@two@andend
+    \or
+        \expandafter\XINT@dsh@gobble@three@andend
+    \or
+        \expandafter\XINT@dsh@gobble@four@andend
+    \or
+        \expandafter\XINT@dsh@gobble@five@andend
+    \or
+        \expandafter\XINT@dsh@gobble@six@andend
+    \or
+        \expandafter\XINT@dsh@gobble@seven@andend
+    \else
+        \expandafter \XINT@dsh@gobbleloop
+        \expandafter
+            {\the\numexpr
+            #1-8\expandafter\expandafter\expandafter }%
+        \expandafter
+        \xint@gobble@eight
+    \fi
+}%
+\def\XINT@dsh@gobble@one@andend 
+   {\expandafter\XINT@dsh@endgobble\xint@gobble@one }%
+\def\XINT@dsh@gobble@two@andend 
+   {\expandafter\XINT@dsh@endgobble\xint@gobble@two }%
+\def\XINT@dsh@gobble@three@andend 
+   {\expandafter\XINT@dsh@endgobble\xint@gobble@three }%
+\def\XINT@dsh@gobble@four@andend 
+   {\expandafter\XINT@dsh@endgobble\xint@gobble@four }%
+\def\XINT@dsh@gobble@five@andend 
+   {\expandafter\XINT@dsh@endgobble\xint@gobble@five }%
+\def\XINT@dsh@gobble@six@andend 
+   {\expandafter\XINT@dsh@endgobble\xint@gobble@six }%
+\def\XINT@dsh@gobble@seven@andend 
+   {\expandafter\XINT@dsh@endgobble\xint@gobble@seven }%
+\def\XINT@dsh@endgobble #1\Z 
+{%
+    \XINT@rev{#1}%
+}%
+\def\XINT@dsh@shiftleft #1\Z 
+{%
+    \XINT@dsh@zeroloop {#1}\Z
+}%
+\def\XINT@dsh@zeroloop #1%
+{%
+    \ifcase #1
+        \expandafter \XINT@dsh@exit
+    \or
+        \expandafter \XINT@dsh@exiti
+    \or
+        \expandafter \XINT@dsh@exitii
+    \or
+        \expandafter \XINT@dsh@exitiii
+    \or
+        \expandafter \XINT@dsh@exitiv
+    \or
+        \expandafter \XINT@dsh@exitv
+    \or
+        \expandafter \XINT@dsh@exitvi
+    \or
+        \expandafter \XINT@dsh@exitvii
+    \else
+        \expandafter \XINT@dsh@zeroloop
+        \expandafter
+            {\the\numexpr
+            #1-8\expandafter\expandafter\expandafter }%
+        \expandafter
+        \XINT@dsh@addeightzeros
+    \fi
+}%
+\def\XINT@dsh@addeightzeros {00000000}%
+\def\XINT@dsh@exit #1\Z 
+               {\XINT@dsh@addzeros {#1}}%
+\def\XINT@dsh@exiti #1\Z
+               {\XINT@dsh@addzeros {0#1}}%
+\def\XINT@dsh@exitii #1\Z
+               {\XINT@dsh@addzeros {00#1}}%
+\def\XINT@dsh@exitiii #1\Z
+               {\XINT@dsh@addzeros {000#1}}%
+\def\XINT@dsh@exitiv #1\Z
+               {\XINT@dsh@addzeros {0000#1}}%
+\def\XINT@dsh@exitv #1\Z
+               {\XINT@dsh@addzeros {00000#1}}%
+\def\XINT@dsh@exitvi #1\Z
+               {\XINT@dsh@addzeros {000000#1}}%
+\def\XINT@dsh@exitvii #1\Z
+               {\XINT@dsh@addzeros {0000000#1}}%
+\def\XINT@dsh@addzeros #1#2{ #2#1}%
+%    \end{macrocode}
+% \subsection{\ch{xintDecSplit}, \ch{xintDecSplitL}, \ch{xintDecSplitR}}
+% \begin{verbatim}
+%     DECIMAL SPLIT
+% Elle commence par remplacer A par |A|
+% si x = 0 elle renvoie {A}{0}
+% si x > 0, elle fait A -> [A/10^x], R est le reste SANS leading zeros.
+% et si x = ou > longueur de A ça donne {0}{A}
+% si x < 0, on part de la gauche. On découpe en deux. si |x| = ou >
+% longueur de A tout A est mis dans Q et R est **vide** (pas 0 !!)
+% R PEUT AVOIR DES LEADING ZEROS DANS CE CAS x <0.
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\xintDecSplitL {\romannumeral0\xintdecsplitl }%
+\def\xintDecSplitR {\romannumeral0\xintdecsplitr }%
+\def\xintdecsplitl 
+{%
+               \expandafter
+                  \xint@firstoftwo@andstop
+               \romannumeral0\xintdecsplit 
+}%
+\def\xintdecsplitr 
+{%
+               \expandafter
+                  \xint@secondoftwo@andstop
+               \romannumeral0\xintdecsplit 
+}%
+\def\xintDecSplit {\romannumeral0\xintdecsplit }%
+\def\xintdecsplit #1%
+{%
+    \expandafter\expandafter\expandafter
+        \xint@split
+    \expandafter\expandafter\expandafter
+    {#1}%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% ON REMPLACE A PAR |A| !!
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\xint@split #1#2%
+{%
+    \expandafter
+        \XINT@split@checkifAzero
+    \expandafter
+    {\romannumeral0\xintabs {#2}}{#1}% fait expansion de A
+}%
+\def\XINT@split@checkifAzero #1#2%
+{%
+    \ifcase \XINT@Sgn {#1}
+      \expandafter\XINT@split@AisZero 
+    \fi
+    \XINT@split@checkxsize {#2}{#1}%
+}%
+\def\XINT@split@AisZero\XINT@split@checkxsize #1#2{ {0}{0}}%
+\def\XINT@split@checkxsize #1%
+{%
+    \ifnum\XINT@Len {#1} > 9  
+       \expandafter\XINT@split@bigx
+    \else
+       \expandafter\XINT@split@xfork
+    \fi
+    #1\Z
+}%
+\def\XINT@split@bigx  #1\Z #2%
+{%
+    \ifcase\XINT@Sgn {#1}
+    \or \xint@afterfi { {0}{#2}}%
+    \else  
+        \xint@afterfi
+          {\expandafter\xintError:TooBigDecimalSplit
+           \space{0}{0}}%
+    \fi
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% si x > 0 division par 10^x
+% si x < 0 division par 10^{longueur(A)-|x|}
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@split@xfork #1%
+{%
+    \xint@UDzerominusfork
+      #1-\dummy  \XINT@split@donothing
+      0#1\dummy  \XINT@split@fromleft
+       0-\dummy  {\XINT@split@splitright #1}%
+    \xint@UDforkminuszero
+}%
+\def\XINT@split@donothing #1\Z #2{ {#2}{0}}%
+\def\XINT@split@fromleft #1\Z #2%
+{%
+    \XINT@split@fromleft@loop {#1}{}#2\W\W\W\W\W\W\W\W\Z % 
+}%
+\def\XINT@split@fromleft@loop #1%
+{%
+    \ifcase #1
+        \expandafter\XINT@split@fromleft@endsplit
+    \or
+        \expandafter\XINT@split@fromleft@one@andend
+    \or
+        \expandafter\XINT@split@fromleft@two@andend
+    \or
+        \expandafter\XINT@split@fromleft@three@andend
+    \or
+        \expandafter\XINT@split@fromleft@four@andend
+    \or
+        \expandafter\XINT@split@fromleft@five@andend
+    \or
+        \expandafter\XINT@split@fromleft@six@andend
+    \or
+        \expandafter\XINT@split@fromleft@seven@andend
+    \else
+        \expandafter \XINT@split@fromleft@loop@perhaps
+        \expandafter
+            {\the\numexpr
+            #1-8\expandafter\expandafter\expandafter }%
+        \expandafter
+        \XINT@split@fromleft@eight
+    \fi
+}%
+\def\XINT@split@fromleft@endsplit #1#2\W #3\Z
+    { {#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}%
+}%
+\def\XINT@split@fromleft@toofar\W \XINT@split@fromleft@loop #1#2#3\Z
+{%
+    \XINT@split@fromleft@toofar@b #2\Z
+}%
+\def\XINT@split@fromleft@toofar@b #1\W #2\Z
+{%
+    \space {#1}{}%
+}%
+\def\XINT@split@fromleft@one@andend 
+   {\expandafter\XINT@split@fromleft@checkiftoofar\XINT@split@fromleft@one }%
+\def\XINT@split@fromleft@one #1#2{#2{#1#2}}%
+\def\XINT@split@fromleft@two@andend 
+   {\expandafter\XINT@split@fromleft@checkiftoofar\XINT@split@fromleft@two }%
+\def\XINT@split@fromleft@two #1#2#3{#3{#1#2#3}}%
+\def\XINT@split@fromleft@three@andend 
+   {\expandafter\XINT@split@fromleft@checkiftoofar\XINT@split@fromleft@three }%
+\def\XINT@split@fromleft@three #1#2#3#4{#4{#1#2#3#4}}%
+\def\XINT@split@fromleft@four@andend 
+   {\expandafter\XINT@split@fromleft@checkiftoofar\XINT@split@fromleft@four }%
+\def\XINT@split@fromleft@four #1#2#3#4#5{#5{#1#2#3#4#5}}%
+\def\XINT@split@fromleft@five@andend 
+   {\expandafter\XINT@split@fromleft@checkiftoofar\XINT@split@fromleft@five }%
+\def\XINT@split@fromleft@five #1#2#3#4#5#6{#6{#1#2#3#4#5#6}}%
+\def\XINT@split@fromleft@six@andend 
+   {\expandafter\XINT@split@fromleft@checkiftoofar\XINT@split@fromleft@six }%
+\def\XINT@split@fromleft@six #1#2#3#4#5#6#7{#7{#1#2#3#4#5#6#7}}%
+\def\XINT@split@fromleft@seven@andend 
+   {\expandafter\XINT@split@fromleft@checkiftoofar\XINT@split@fromleft@seven }%
+\def\XINT@split@fromleft@seven #1#2#3#4#5#6#7#8{#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}%
+}%
+\def\XINT@split@fromleft@wenttoofar\W\space #1%
+{%
+    \XINT@split@fromleft@wenttoofar@b #1\Z
+}%
+\def\XINT@split@fromleft@wenttoofar@b #1\W #2\Z
+{%
+    \space {#1}%
+}%
+\def\XINT@split@splitright #1\Z #2%
+{%
+    \ifnum \XINT@Length {#2} > #1              
+        \expandafter\XINT@split@pre
+    \else
+        \expandafter\XINT@split@quotientiszero
+    \fi
+    {#2}{#1}%
+}%
+\def\XINT@split@quotientiszero #1#2{ {0}{#1}}%
+\def\XINT@split@pre #1%
+{%
+    \expandafter
+        \XINT@split@@pre
+    \expandafter
+    {\romannumeral0\XINT@rev{#1}}%
+}%
+\def\XINT@split@@pre #1#2%
+{%
+    \XINT@split@loop {#2}{}#1\Z 
+}%
+\def\XINT@split@loop #1%
+{%
+    \ifcase #1
+        \expandafter\XINT@split@endsplit
+    \or
+        \expandafter\XINT@split@one@andend
+    \or
+        \expandafter\XINT@split@two@andend
+    \or
+        \expandafter\XINT@split@three@andend
+    \or
+        \expandafter\XINT@split@four@andend
+    \or
+        \expandafter\XINT@split@five@andend
+    \or
+        \expandafter\XINT@split@six@andend
+    \or
+        \expandafter\XINT@split@seven@andend
+    \else
+        \expandafter \XINT@split@loop
+        \expandafter
+            {\the\numexpr
+            #1-8\expandafter\expandafter\expandafter }%
+        \expandafter
+        \XINT@split@eight
+    \fi
+}%
+\def\XINT@split@eight #1#2#3#4#5#6#7#8#9{{#1#2#3#4#5#6#7#8#9}}%
+\def\XINT@split@one@andend 
+   {\expandafter\XINT@split@endsplit\XINT@split@one }%
+\def\XINT@split@one #1#2{{#1#2000}}%
+\def\XINT@split@two@andend 
+   {\expandafter\XINT@split@endsplit\XINT@split@two }%
+\def\XINT@split@two #1#2#3{{#1#2#300}}%
+\def\XINT@split@three@andend 
+   {\expandafter\XINT@split@endsplit\XINT@split@three }%
+\def\XINT@split@three #1#2#3#4{{#1#2#3#40}}%
+\def\XINT@split@four@andend 
+   {\expandafter\XINT@split@endsplit\XINT@split@four }%
+\def\XINT@split@four #1#2#3#4#5{{#1#2#3#4#5}}%
+\def\XINT@split@five@andend 
+   {\expandafter\XINT@split@endsplit\XINT@split@five }%
+\def\XINT@split@five #1#2#3#4#5#6{{#1#2#3#4#5#6000}}%
+\def\XINT@split@six@andend 
+   {\expandafter\XINT@split@endsplit\XINT@split@six }%
+\def\XINT@split@six #1#2#3#4#5#6#7{{#1#2#3#4#5#6#700}}%
+\def\XINT@split@seven@andend 
+   {\expandafter\XINT@split@endsplit\XINT@split@seven }%
+\def\XINT@split@seven #1#2#3#4#5#6#7#8{{#1#2#3#4#5#6#7#80}}%
+\def\XINT@split@endsplit #1#2\Z 
+{%
+    \expandafter\expandafter\expandafter\XINT@split@endsplit@
+    \expandafter\expandafter\expandafter
+    {\romannumeral0\XINT@rev
+       {\Z\W\W\W\W\W\W\W #1\XINT@cuz@loop0\romannumeral}}%
+    {\romannumeral0\XINT@rev{#2}}%
+}%
+\def\XINT@split@endsplit@ #1#2%
+{%
+    \expandafter\space\expandafter {#2}{#1}%
+}%
+\XINT@restorecatcodes@endinput%
+%    \end{macrocode}
+%</package>
+%<*gcd>
+% \section{Package \xintgcdname implementation}
+% 
+% The commenting is currently (\docdate) very sparse.
+%
+% \subsection{Catcodes, \eTeX{} detection, reload detection}
+%
+% The code for reload detection is copied from \textsc{Heiko
+% Oberdiek}'s packages, and adapted here to check for previous
+% loading of the master \xintname package.
+%
+% The method for catcodes is slightly different, but still
+% directly inspired by these packages.
+%
+%    \begin{macrocode}
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+  \catcode13=5    % ^^M
+  \endlinechar=13 %
+  \catcode123=1   % {
+  \catcode125=2   % }
+  \catcode64=11   % @
+  \catcode35=6    % #
+  \catcode44=12   % ,
+  \catcode45=12   % -
+  \catcode46=12   % .
+  \catcode58=12   % :
+  \def\space { }%
+  \let\z\endgroup
+  \expandafter\let\expandafter\x\csname ver@xintgcd.sty\endcsname
+  \expandafter\let\expandafter\w\csname ver@xint.sty\endcsname
+  \expandafter
+    \ifx\csname PackageInfo\endcsname\relax
+      \def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}%
+    \else
+      \def\y#1#2{\PackageInfo{#1}{#2}}%
+    \fi
+  \expandafter
+  \ifx\csname numexpr\endcsname\relax
+     \y{xintgcd}{\numexpr not available, aborting input}%
+     \aftergroup\endinput
+  \else
+    \ifx\x\relax   % plain-TeX, first loading of xintgcd.sty
+      \ifx\w\relax % but xint.sty not yet loaded.
+         \y{xintgcd}{Package xint is required}%
+         \y{xintgcd}{Will try \string\input\space xint.sty}%
+         \def\z{\endgroup\input xint.sty\relax}%
+      \fi
+    \else
+      \def\empty {}%
+      \ifx\x\empty % LaTeX, first loading,
+      % variable is initialized, but \ProvidesPackage not yet seen
+          \ifx\w\relax % xint.sty not yet loaded.
+            \y{xintgcd}{Package xint is required}%
+            \y{xintgcd}{Will try \string\RequirePackage{xint}}%
+            \def\z{\endgroup\RequirePackage{xint}}%
+          \fi
+      \else
+        \y{xintgcd}{I was already loaded, aborting input}%
+        \aftergroup\endinput
+      \fi
+    \fi
+  \fi
+\z%
+%    \end{macrocode}
+% \subsection{Validation of \xintname loading}
+%    \begin{macrocode}
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+  \catcode13=5    % ^^M
+  \endlinechar=13 %
+  \catcode123=1   % {
+  \catcode125=2   % }
+  \catcode64=11   % @
+  \catcode35=6    % #
+  \catcode44=12   % ,
+  \catcode45=12   % -
+  \catcode46=12   % .
+  \catcode58=12   % :
+  \expandafter
+    \ifx\csname PackageInfo\endcsname\relax
+      \def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}%
+    \else
+      \def\y#1#2{\PackageInfo{#1}{#2}}%
+    \fi
+  \def\empty {}%
+  \expandafter\let\expandafter\w\csname ver@xint.sty\endcsname
+  \ifx\w\relax % Plain TeX, user gave a file name at the prompt
+      \y{xintgcd}{Loading of package xint failed, aborting input}%
+      \aftergroup\endinput
+  \fi
+  \ifx\w\empty % LaTeX, user gave a file name at the prompt
+      \y{xintgcd}{Loading of package xint failed, aborting input}%
+      \aftergroup\endinput
+  \fi
+\endgroup%
+%    \end{macrocode}
+% \subsection{Catcodes}
+%
+% 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|.
+%
+%    \begin{macrocode}
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+  \catcode13=5    % ^^M
+  \endlinechar=13 %
+  \catcode123=1   % {
+  \catcode125=2   % }
+  \catcode64=11   % @
+  \def\x
+  {%
+      \endgroup
+      \edef\XINT@gcd@restorecatcodes@endinput
+      {%
+        \catcode36=\the\catcode36   % $
+        \catcode47=\the\catcode47   % /
+        \catcode41=\the\catcode41   % )
+        \catcode40=\the\catcode40   % (
+        \catcode42=\the\catcode42   % *
+        \catcode43=\the\catcode43   % +
+        \catcode62=\the\catcode62   % >
+        \catcode60=\the\catcode60   % <
+        \catcode58=\the\catcode58   % :
+        \catcode46=\the\catcode46   % .
+        \catcode45=\the\catcode45   % -
+        \catcode44=\the\catcode44   % ,
+        \catcode35=\the\catcode35   % #
+        \catcode64=\the\catcode64   % @
+        \catcode125=\the\catcode125 % }
+        \catcode123=\the\catcode123 % {
+        \endlinechar=\the\endlinechar
+        \catcode13=\the\catcode13   % ^^M
+        \catcode32=\the\catcode32   % 
+        \catcode61=\the\catcode61   % =
+        \noexpand\endinput
+      }%
+      \XINT@setcatcodes
+      \catcode36=3  % $
+  }%
+\x
+%    \end{macrocode}
+% \subsection{Package identification}
+%    \begin{macrocode}
+\begingroup
+  \catcode91=12 % [
+  \catcode93=12 % ]
+  \catcode58=12 % :
+  \expandafter\ifx\csname ProvidesPackage\endcsname\relax
+    \def\x#1#2#3[#4]{\endgroup
+      \immediate\write-1{Package: #3 #4}%
+      \xdef#1{#4}%
+    }%
+  \else
+    \def\x#1#2[#3]{\endgroup
+      #2[{#3}]%
+      \ifx#1\@undefined
+        \xdef#1{#3}%
+      \fi
+      \ifx#1\relax
+        \xdef#1{#3}%
+      \fi
+    }%
+  \fi
+\expandafter\x\csname ver@xintgcd.sty\endcsname
+\ProvidesPackage{xintgcd}%
+  [2013/03/28 v1.0 Euclide algorithm with xint package (jfB)]%
+%    \end{macrocode}
+% \subsection{\ch{xintGCD}}
+%    \begin{macrocode}
+\def\xintGCD {\romannumeral0\xintgcd }%
+\def\xintgcd #1%
+{%
+    \expandafter
+      \XINT@gcd
+    \expandafter
+      {\romannumeral0\xintabs {#1}}%
+}%
+\def\XINT@gcd #1#2%
+{%
+    \expandafter
+      \XINT@gcd@fork
+    \romannumeral0\xintabs {#2}\Z #1\Z
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% Ici #3#4=A, #1#2=B
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\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@UDforkzero
+    {#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
+{%
+    \xint@zero #1\xint@gcd@end0\XINT@gcd@loop {#1#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}
+%    \begin{macrocode}
+\def\XINT@gcd@loop #1#2%
+{%
+    \expandafter\expandafter\expandafter
+        \XINT@gcd@CheckRem
+    \expandafter\xint@secondoftwo
+    \romannumeral0\XINT@div@prepare {#1}{#2}\Z 
+    {#1}%
+}%
+%    \end{macrocode}
+% \subsection{\ch{xintBezout}}
+%    \begin{macrocode}
+\def\xintBezout {\romannumeral0\xintbezout }%
+\def\xintbezout #1%
+{%
+    \expandafter\expandafter\expandafter
+      \xint@bezout
+    \expandafter\expandafter\expandafter
+      {#1}%
+}%
+\def\xint@bezout #1#2%
+{\expandafter\expandafter\expandafter
+    \XINT@bezout@fork #2\Z #1\Z
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #3#4 = A, #1#2=B
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\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
+       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@UDforksigns }%
+    \xint@UDforkzeros
+    {#2}{#4}#1#3{#3#4}{#1#2}% #1#2=B, #3#4=A
+}%
+\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}
+%    \begin{macrocode}
+\def\XINT@bezout@firstiszero #1#2#3#4#5#6%
+{%
+    \xint@UDsignfork
+      #3\dummy { {0}{#3#1}{0}{1}{#1}}%
+       -\dummy { {0}{#3#1}{0}{-1}{#1}}%
+    \xint@UDforksign
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #4#2= A, B = #3#1 = 0
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@bezout@secondiszero #1#2#3#4#5#6%
+{%
+    \xint@UDsignfork
+       #4\dummy{ {#4#2}{0}{-1}{0}{#2}}%
+        -\dummy{ {#4#2}{0}{1}{0}{#2}}%
+    \xint@UDforksign
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #4#2= A < 0, #3#1 = B < 0
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@bezout@minusminus #1#2#3#4%
+{%
+    \expandafter\XINT@bezout@mm@post
+    \romannumeral0\XINT@bezout@loop@a 1{#1}{#2}1001%
+}%
+\def\XINT@bezout@mm@post #1#2%
+{%
+    \expandafter
+        \XINT@bezout@mm@postb
+    \expandafter
+        {\romannumeral0\xintopp{#2}}{\romannumeral0\xintopp{#1}}%
+}%
+\def\XINT@bezout@mm@postb #1#2%
+{%
+    \expandafter
+        \XINT@bezout@mm@postc
+    \expandafter {#2}{#1}%
+}%
+\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}
+%    \begin{macrocode}
+\def\XINT@bezout@minusplus #1#2#3#4%
+{%
+    \expandafter\XINT@bezout@mp@post
+    \romannumeral0\XINT@bezout@loop@a 1{#1}{#4#2}1001%
+}%
+\def\XINT@bezout@mp@post #1#2%
+{%
+    \expandafter
+      \XINT@bezout@mp@postb
+    \expandafter
+      {\romannumeral0\xintopp {#2}}{#1}%
+}%
+\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}
+%    \begin{macrocode}
+\def\XINT@bezout@plusminus #1#2#3#4%
+{%
+    \expandafter\XINT@bezout@pm@post
+    \romannumeral0\XINT@bezout@loop@a 1{#3#1}{#2}1001%
+}%
+\def\XINT@bezout@pm@post #1%
+{%
+    \expandafter
+        \XINT@bezout@pm@postb
+    \expandafter
+        {\romannumeral0\xintopp{#1}}%
+}%
+\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}
+%    \begin{macrocode}
+\def\XINT@bezout@plusplus #1#2#3#4%
+{%
+    \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}
+%    \begin{macrocode}
+\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)
+% 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}
+%    \begin{macrocode}
+\def\XINT@bezout@loop@a #1#2#3%
+{%
+    \expandafter\XINT@bezout@loop@b
+    \expandafter{\the\numexpr -#1\expandafter }%
+    \romannumeral0\XINT@div@prepare {#2}{#3}{#2}%
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% 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}
+%    \begin{macrocode}
+\def\XINT@bezout@loop@b #1#2#3#4#5#6#7#8%
+{%
+    \expandafter
+        \XINT@bezout@loop@c
+    \expandafter
+        {\romannumeral0\xintadd{\XINT@Mul{#5}{#2}}{#7}}%
+        {\romannumeral0\xintadd{\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}
+%    \begin{macrocode}
+\def\XINT@bezout@loop@c #1#2%
+{%
+    \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}
+%    \begin{macrocode}
+\def\XINT@bezout@loop@d #1#2#3#4#5%
+{%
+    \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}
+%    \begin{macrocode}
+\def\XINT@bezout@loop@e #1#2\Z 
+{%
+    \xint@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}
+%    \begin{macrocode}
+\def\XINT@bezout@loop@f #1#2%
+{%
+    \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}
+%    \begin{macrocode}
+\def\xint@bezout@loop@exit0\XINT@bezout@loop@f #1#2%
+{%
+    \ifcase #2
+    \or  \expandafter\XINT@bezout@exiteven
+    \else\expandafter\XINT@bezout@exitodd
+    \fi
+}%
+\def\XINT@bezout@exiteven #1#2#3#4#5%
+{%
+    \space {#5}{#4}{#1}%
+}%
+\def\XINT@bezout@exitodd #1#2#3#4#5%
+{%
+    \space {-#5}{-#4}{#1}%
+}%
+%    \end{macrocode}
+% \subsection{\ch{xintEuclideAlgorithm}}
+% \begin{verbatim}
+% 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}
+%    \begin{macrocode}
+\def\xintEuclideAlgorithm {\romannumeral0\xinteuclidealgorithm }%
+\def\xinteuclidealgorithm #1%
+{%
+    \expandafter
+      \XINT@euc
+    \expandafter
+      {\romannumeral0\xintabs {#1}}%
+}%
+\def\XINT@euc #1#2%
+{%
+    \expandafter
+      \XINT@euc@fork
+    \romannumeral0\xintabs {#2}\Z #1\Z
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% Ici #3#4=A, #1#2=B
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\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@UDforkzero
+    {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}
+%    \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}}%
+%    \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}
+%    \begin{macrocode}
+\def\XINT@euc@a #1#2#3%
+{%
+    \expandafter
+        \XINT@euc@b
+    \expandafter {\the\numexpr #1+1\expandafter }%
+    \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}
+%    \begin{macrocode}
+\def\XINT@euc@b #1#2#3#4%
+{%
+    \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}
+%    \begin{macrocode}
+\def\XINT@euc@c #1#2\Z 
+{%
+    \xint@zero #1\xint@euc@end0\XINT@euc@a
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% {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}
+%    \begin{macrocode}
+\def\xint@euc@end0\XINT@euc@a #1#2#3#4\Z%
+{%
+      \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
+}%
+\def\xint@euc@end@ #1#2#3%
+{%
+    \space {#1}{#3}{#2}%
+}%
+%    \end{macrocode}
+% \subsection{\ch{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=B/D}{betaN=B/D}
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\xintBezoutAlgorithm {\romannumeral0\xintbezoutalgorithm }%
+\def\xintbezoutalgorithm #1%
+{%
+    \expandafter
+      \XINT@bezalg
+    \expandafter
+      {\romannumeral0\xintabs {#1}}%
+}%
+\def\XINT@bezalg #1#2%
+{%
+    \expandafter
+      \XINT@bezalg@fork
+    \romannumeral0\xintabs {#2}\Z #1\Z
+}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% Ici #3#4=A, #1#2=B
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\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@UDforkzero
+    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}}%
+%    \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% 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)}
+%                    {{q(n)}{r(n)}{alpha(n)}{beta(n)}}...
+% division de #3 par #2
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\XINT@bezalg@a #1#2#3%
+{%
+    \expandafter
+        \XINT@bezalg@b
+    \expandafter {\the\numexpr #1+1\expandafter }%
+    \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}
+%    \begin{macrocode}
+\def\XINT@bezalg@b #1#2#3#4#5#6#7#8%
+{%
+    \expandafter\XINT@bezalg@c\expandafter
+     {\romannumeral0\xintadd {\xintMul {#6}{#2}}{#8}}%
+     {\romannumeral0\xintadd {\xintMul {#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}
+%    \begin{macrocode}
+\def\XINT@bezalg@c #1#2#3#4#5#6%
+{%
+    \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}
+%    \begin{macrocode}
+\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}}%
+}%
+%    \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}
+%    \begin{macrocode}
+\def\XINT@bezalg@e #1#2\Z
+{%
+    \xint@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=B/D}{betaN=B/D}
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\xint@bezalg@end0\XINT@bezalg@a #1#2#3#4#5#6#7#8\Z 
+{%
+      \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
+}%
+%    \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=B/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=B/D}{betaN=B/D}
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+%    \begin{macrocode}
+\def\xint@bezalg@end@ #1#2#3#4%
+{%
+    \space {#1}{#3}{0}{1}{#2}{#4}{1}{0}%
+}%
+%    \end{macrocode}
+% \subsection{\ch{xintTypesetEuclideAlgorithm}}
+% \begin{verbatim}
+% TYPESETTING
+% Organisation: 
+% {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)
+% \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}
+%    \begin{macrocode}
+\def\xintTypesetEuclideAlgorithm #1#2%
+{% l'algo remplace #1 et #2 par |#1| et |#2|
+  \par
+  \begingroup
+    \xintAssignArray\xintEuclideAlgorithm {#1}{#2}\to\U
+    \edef\A{\U2}\edef\B{\U4}\edef\N{\U1}%
+    \setbox 0 \vbox{\halign {$##$\cr \A\cr \B \cr}}%
+    \noindent
+    \count 255 1
+    \loop
+      \hbox to \wd 0 {\hfil$\U{\the\numexpr 2*\count 255\relax}$}%
+      ${} =  \U{\the\numexpr 2*\count 255 + 3\relax}
+      \times \U{\the\numexpr 2*\count 255 + 2\relax}
+          +  \U{\the\numexpr 2*\count 255 + 4\relax}$%
+    \ifnum \count 255 < \N
+      \hfill\break
+      \advance \count 255 1
+    \repeat
+  \par
+  \endgroup
+}%
+%    \end{macrocode}
+% \subsection{\ch{xintTypesetBezoutAlgorithm}}
+% \begin{verbatim}
+% Pour Bezout on a: 
+% {N}{A}{0}{1}{D=r(n)}{B}{1}{0}{q1}{r1}{alpha1=q1}{beta1=1}
+%             {q2}{r2}{alpha2}{beta2}....{qN}{rN=0}{alphaN=B/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}
+%    \begin{macrocode}
+\def\xintTypesetBezoutAlgorithm #1#2%
+{%
+  \par
+  \begingroup
+    \parindent0pt
+    \xintAssignArray\xintBezoutAlgorithm {#1}{#2}\to\BEZ
+    \edef\A{\BEZ2}\edef\B{\BEZ6}\edef\N{\BEZ1}% A = |#1|, B = |#2|
+    \setbox 0 \vbox{\halign {$##$\cr \A\cr \B \cr}}%
+    \count 255 1
+    \loop
+      \noindent
+      \hbox to \wd 0 {\hfil$\BEZ{\the\numexpr 4*\count 255 - 2\relax}$}%
+      ${} =  \BEZ{\the\numexpr 4*\count 255 + 5\relax}
+      \times \BEZ{\the\numexpr 4*\count 255 + 2\relax}
+          +  \BEZ{\the\numexpr 4*\count 255 + 6\relax}$\hfill\break
+      \hbox to \wd 0 {\hfil$\BEZ{\the\numexpr 4*\count 255 +7\relax}$}%
+      ${} = \BEZ{\the\numexpr 4*\count 255 + 5\relax}
+      \times \BEZ{\the\numexpr 4*\count 255 + 3\relax}
+          +  \BEZ{\the\numexpr 4*\count 255 - 1\relax}$\hfill\break
+      \hbox to \wd 0 {\hfil$\BEZ{\the\numexpr 4*\count 255 +8\relax}$}% 
+      ${} =  \BEZ{\the\numexpr 4*\count 255 + 5\relax}
+      \times \BEZ{\the\numexpr 4*\count 255 + 4\relax}
+          +  \BEZ{\the\numexpr 4*\count 255 \relax}$
+      \endgraf
+    \ifnum \count 255 < \N
+    \advance \count 255 1
+  \repeat
+  \par
+    \edef\U{\BEZ{\the\numexpr 4*\N + 4\relax}}%
+    \edef\V{\BEZ{\the\numexpr 4*\N + 3\relax}}%
+    \edef\D{\BEZ5}%
+    \ifodd\N\relax
+       $\U\times\A  - \V\times \B = -\D$%
+    \else
+       $\U\times\A - \V\times\B = \D$%
+    \fi
+  \par
+  \endgroup
+}%
+\XINT@gcd@restorecatcodes@endinput%
+%    \end{macrocode}
+% \DeleteShortVerb{\|}
+%</gcd>
+%<*none>
+% \MakePercentComment
+\CharacterTable
+ {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+  Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+  Digits        \0\1\2\3\4\5\6\7\8\9
+  Exclamation   \!     Double quote  \"     Hash (number) \#
+  Dollar        \$     Percent       \%     Ampersand     \&
+  Acute accent  \'     Left paren    \(     Right paren   \)
+  Asterisk      \*     Plus          \+     Comma         \,
+  Minus         \-     Point         \.     Solidus       \/
+  Colon         \:     Semicolon     \;     Less than     \<
+  Equals        \=     Greater than  \>     Question mark \?
+  Commercial at \@     Left bracket  \[     Backslash     \\
+  Right bracket \]     Circumflex    \^     Underscore    \_
+  Grave accent  \`     Left brace    \{     Vertical bar  \|
+  Right brace   \}     Tilde         \~}
+
+\CheckSum{6418}
+
+\Finale
+%%
+%% End of file `xint.dtx'.
+
-- 
cgit v1.2.3

