From 6574ff6201be11b02c528187bda322fe9ac79d57 Mon Sep 17 00:00:00 2001 From: Karl Berry 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/tex/generic/xint/xint.sty | 3209 ++++++++++++++++++++++++ Master/texmf-dist/tex/generic/xint/xintgcd.sty | 545 ++++ 2 files changed, 3754 insertions(+) create mode 100644 Master/texmf-dist/tex/generic/xint/xint.sty create mode 100644 Master/texmf-dist/tex/generic/xint/xintgcd.sty (limited to 'Master/texmf-dist/tex/generic/xint') diff --git a/Master/texmf-dist/tex/generic/xint/xint.sty b/Master/texmf-dist/tex/generic/xint/xint.sty new file mode 100644 index 00000000000..6e8aa246253 --- /dev/null +++ b/Master/texmf-dist/tex/generic/xint/xint.sty @@ -0,0 +1,3209 @@ +%% +%% This is file `xint.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% xint.dtx (with options: `package') +%% +%% IMPORTANT NOTICE: +%% +%% For the copyright see the source file. +%% +%% Any modified versions of this file must be renamed +%% with new filenames distinct from xint.sty. +%% +%% For distribution of the original source see the terms +%% for copying and modification in the file xint.dtx. +%% +%% This generated file may be distributed as long as the +%% original source files, as listed above, are part of the +%% same distribution. (The sources need not necessarily be +%% in the same archive or directory.) +%%---------------------------------------------------------------- +%% xint: Expandable operations on long numbers +%% xintgcd: Euclidean algorithm with xint package +%% Copyright (C) 2013 by Jean-Francois Burnol +%%---------------------------------------------------------------- +\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 +\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)]% +\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}% +\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 {}% +\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}% +\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 +}% +\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 }% +\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}% +\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}% +\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 +\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 +}% +\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 +}% +\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}% +\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 }% +\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}% +\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 +}% +\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}% +}% +\def\xint@add@az\W\XINT@add@AB #1#2% +{% + \XINT@add@AC@checkcarry #1% +}% +\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}% +}% +\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 +}% +\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}% +\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 }% +\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 +}% +\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}% +}% +\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.% +}% +\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% +}% +\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 +}% +\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 }% +\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 +}% +\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 }% +\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 }% +\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 +}% +\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 +}% +\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 }% +\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% +}% +\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 +}% +\def\XINT@max@minusminus #1#2#3#4% +{% + \ifodd\XINT@Geq {#1}{#2} + \xint@afterfi { -#2}% + \else + \xint@afterfi { -#1}% + \fi +}% +\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 }% +\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% +}% +\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 +}% +\def\XINT@min@minusminus #1#2#3#4% +{% + \ifodd\XINT@Geq {#1}{#2} + \xint@afterfi { -#1}% + \else + \xint@afterfi { -#2}% + \fi +}% +\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}% +\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 }% +\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}% +\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 +}% +\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}% +}% +\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 +}% +\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}% +}% +\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 +}% +\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 +}% +\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}% +\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}% +\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 +}% +\def\xintPow {\romannumeral0\xintpow }% +\def\xintpow #1% +{% + \expandafter\expandafter\expandafter + \xint@pow + #1\Z% +}% +\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}% +}% +\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@ +}% +\def\XINT@pow@Anonneg #1#2#3% +{% + \expandafter\expandafter\expandafter + \XINT@pow@Anonneg@ + \expandafter\expandafter\expandafter + {#3}{#1#2}% +}% +\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}% +\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}% +\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}% +}% +\def\xintQuo {\romannumeral0\xintquo }% +\def\xintRem {\romannumeral0\xintrem }% +\def\xintquo {% + \expandafter + \xint@firstoftwo@andstop + \romannumeral0\xintdivision }% +\def\xintrem {% + \expandafter + \xint@secondoftwo@andstop + \romannumeral0\xintdivision }% +\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 }% +\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}}% +\def\XINT@div@plusplus #1#2#3#4% +{% + \XINT@div@prepare {#3#1}{#4#2}% +}% +\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}% +}% +\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}% +}% +\def\XINT@div@AisNegative@zerorem #1#2#3% +{% + \expandafter\space\expandafter + {\romannumeral0\XINT@opp #1}{0}% +}% +\def\XINT@div@AisNegative@posrem #1% +{% + \expandafter + \XINT@div@AisNegative@posrem@b + \expandafter + {\romannumeral0\xintopp {\XINT@Add{#1}{1}}}% +}% +\def\XINT@div@AisNegative@posrem@b #1#2#3% +{% + \expandafter + \xint@exchangetwo@keepbraces@andstop + \expandafter + {\romannumeral0\XINT@sub {#3}{#2}}{#1}% +}% +\def\XINT@div@prepare #1% +{% + \expandafter + \XINT@div@prepareB@a + \expandafter + {\romannumeral0\XINT@length {#1}}{#1}% B > 0 ici +}% +\def\XINT@div@prepareB@a #1% +{% + \expandafter\XINT@div@prepareB@b\expandafter + {\the\numexpr 4*((#1+1)/4)\relax}{#1}% +}% +\def\XINT@div@prepareB@b #1#2% +{% + \expandafter\XINT@div@prepareB@c \expandafter + {\the\numexpr #1-#2\relax}{#1}% +}% +\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}}% +\def\XINT@div@prepareB@e #1#2#3#4% +{% + \XINT@div@prepareB@f #4#1\Z {#3}{#2}{#1}% +}% +\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}% +}% +\def\XINT@div@prepareB@g #1#2#3#4#5#6% +{% + \XINT@div@prepareA@a {#6#5}{#2}{#3}{#1}{#4}% +}% +\def\XINT@div@prepareA@a #1% +{% + \expandafter + \XINT@div@prepareA@b + \expandafter + {\romannumeral0\XINT@length {#1}}{#1}% A >0 ici +}% +\def\XINT@div@prepareA@b #1% +{% + \expandafter\XINT@div@prepareA@c\expandafter + {\the\numexpr 4*((#1+1)/4)\relax}{#1}% +}% +\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}}% +\def\XINT@div@prepareA@e #1#2#3% +{% + \XINT@div@startswitch {#1#3}{#2}% +}% +\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}% +}% +\def\XINT@div@finished@a #1#2#3% +{% + \expandafter + \XINT@div@finished@b + \expandafter + {\romannumeral0\XINT@cuz {#1}}% +}% +\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}% +}% +\def\XINT@div@finished@c #1#2% +{% + \expandafter + \space + \expandafter + {\romannumeral0\expandafter\xint@cleanupzeros@andstop + \romannumeral0\XINT@rev {#2}}{#1}% +}% +\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 }% +\def\XINT@div@final@c #1#2#3#4% +{% + \expandafter + \XINT@div@final@d + \expandafter + {\the\numexpr #1/#4\relax}{#2}% +}% +\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}% +}% +\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}% +}% +\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}% +}% +\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}% +}% +\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}% +}% +\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}% +}% +\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}% +}% +\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}% +}% +\def\XINT@div@body@k #1#2% +{% + \XINT@div@body@l {#1}% +}% +\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}% +}% +\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 +}% +\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 }% +}% +\def\XINT@div@body@o #1#2#3#4% +{% + \XINT@div@body@p {#3}{#2}{}#4\Z {#1}% +}% +\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% +}% +\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}% +}% +\def\XINT@div@body@q #1#2#3#4\Z #5#6% +{% + \XINT@div@body@a {#4}{#2}{#6}{#3#5}{#1}% +}% +\def\XINT@div@gotofinal@a #1#2#3#4\Z % +{% + \XINT@div@gotofinal@b #3\Z {#4}{#1}% +}% +\def\XINT@div@gotofinal@b 0000#1\Z #2#3#4#5% +{% + \XINT@div@final@a {#2}{#3}{#5}{#1#4}{#3}% +}% +\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}% +\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 +}% +\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 +}% +\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 +}% +\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}% +\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 { }% +\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}% +\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}% +}% +\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 +}% +\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% +\endinput +%% +%% End of file `xint.sty'. diff --git a/Master/texmf-dist/tex/generic/xint/xintgcd.sty b/Master/texmf-dist/tex/generic/xint/xintgcd.sty new file mode 100644 index 00000000000..3c7cc44b183 --- /dev/null +++ b/Master/texmf-dist/tex/generic/xint/xintgcd.sty @@ -0,0 +1,545 @@ +%% +%% This is file `xintgcd.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% xint.dtx (with options: `gcd') +%% +%% IMPORTANT NOTICE: +%% +%% For the copyright see the source file. +%% +%% Any modified versions of this file must be renamed +%% with new filenames distinct from xintgcd.sty. +%% +%% For distribution of the original source see the terms +%% for copying and modification in the file xint.dtx. +%% +%% This generated file may be distributed as long as the +%% original source files, as listed above, are part of the +%% same distribution. (The sources need not necessarily be +%% in the same archive or directory.) +%%---------------------------------------------------------------- +%% xint: Expandable operations on long numbers +%% xintgcd: Euclidean algorithm with xint package +%% Copyright (C) 2013 by Jean-Francois Burnol +%%---------------------------------------------------------------- +\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% +\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% +\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 +\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)]% +\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 +}% +\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}% +\def\XINT@gcd@loop #1#2% +{% + \expandafter\expandafter\expandafter + \XINT@gcd@CheckRem + \expandafter\xint@secondoftwo + \romannumeral0\XINT@div@prepare {#1}{#2}\Z + {#1}% +}% +\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 +}% +\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}% +}% +\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 +}% +\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 +}% +\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}% +}% +\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}% +}% +\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}% +}% +\def\XINT@bezout@plusplus #1#2#3#4% +{% + \expandafter\XINT@bezout@pp@post + \romannumeral0\XINT@bezout@loop@a 1{#3#1}{#4#2}1001% +}% +\def\XINT@bezout@pp@post #1#2#3#4#5% +{% + \space {#4}{#5}{#1}{#2}{#3}% +}% +\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}% +}% +\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}% +}% +\def\XINT@bezout@loop@c #1#2% +{% + \expandafter + \XINT@bezout@loop@d + \expandafter + {#2}{#1}% +}% +\def\XINT@bezout@loop@d #1#2#3#4#5% +{% + \XINT@bezout@loop@e #4\Z {#3}{#5}{#2}{#1}% +}% +\def\XINT@bezout@loop@e #1#2\Z +{% + \xint@zero #1\xint@bezout@loop@exit0\XINT@bezout@loop@f + {#1#2}% +}% +\def\XINT@bezout@loop@f #1#2% +{% + \XINT@bezout@loop@a {#2}{#1}% +}% +\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}% +}% +\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 +}% +\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 +}% +\def\XINT@euc@AisZero #1#2#3#4#5#6{ {1}{0}{#2}{#2}{0}{0}}% +\def\XINT@euc@BisZero #1#2#3#4#5#6{ {1}{0}{#3}{#3}{0}{0}}% +\def\XINT@euc@a #1#2#3% +{% + \expandafter + \XINT@euc@b + \expandafter {\the\numexpr #1+1\expandafter }% + \romannumeral0\XINT@div@prepare {#2}{#3}{#2}% +}% +\def\XINT@euc@b #1#2#3#4% +{% + \XINT@euc@c #3\Z {#1}{#3}{#4}{{#2}{#3}}% +}% +\def\XINT@euc@c #1#2\Z +{% + \xint@zero #1\xint@euc@end0\XINT@euc@a +}% +\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}% +}% +\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 +}% +\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}}% +\def\XINT@bezalg@a #1#2#3% +{% + \expandafter + \XINT@bezalg@b + \expandafter {\the\numexpr #1+1\expandafter }% + \romannumeral0\XINT@div@prepare {#2}{#3}{#2}% +}% +\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}% +}% +\def\XINT@bezalg@c #1#2#3#4#5#6% +{% + \expandafter\XINT@bezalg@d\expandafter + {#2}{#3}{#4}{#5}{#6}{#1}% +}% +\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}}% +}% +\def\XINT@bezalg@e #1#2\Z +{% + \xint@zero #1\xint@bezalg@end0\XINT@bezalg@a +}% +\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 +}% +\def\xint@bezalg@end@ #1#2#3#4% +{% + \space {#1}{#3}{0}{1}{#2}{#4}{1}{0}% +}% +\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 +}% +\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% +\endinput +%% +%% End of file `xintgcd.sty'. -- cgit v1.2.3