diff options
author | Karl Berry <karl@freefriends.org> | 2013-04-04 23:01:55 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2013-04-04 23:01:55 +0000 |
commit | 70fea5b516faf568355ede6880705208e8c7b81b (patch) | |
tree | c3bf9811ea43eaffe271d2727ce29a038d444fd0 /Master/texmf-dist/tex | |
parent | df46a8f34a086b257d8c3e2a744d2af10aaed9f4 (diff) |
xint (4apr13)
git-svn-id: svn://tug.org/texlive/trunk@29649 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r-- | Master/texmf-dist/tex/generic/xint/xint.sty | 635 | ||||
-rw-r--r-- | Master/texmf-dist/tex/generic/xint/xintgcd.sty | 22 |
2 files changed, 335 insertions, 322 deletions
diff --git a/Master/texmf-dist/tex/generic/xint/xint.sty b/Master/texmf-dist/tex/generic/xint/xint.sty index 6e8aa246253..44e71fb4383 100644 --- a/Master/texmf-dist/tex/generic/xint/xint.sty +++ b/Master/texmf-dist/tex/generic/xint/xint.sty @@ -4,7 +4,7 @@ %% %% The original source files were: %% -%% xint.dtx (with options: `package') +%% xint.dtx (with options: `xint') %% %% IMPORTANT NOTICE: %% @@ -20,11 +20,13 @@ %% 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 +%% Part of the xint bundle (version 1.01 of 2013/04/04) +%% xint: Expandable operations on long numbers %% Copyright (C) 2013 by Jean-Francois Burnol %%---------------------------------------------------------------- +%% \begingroup\catcode61\catcode48\catcode32=10\relax% \catcode13=5 % ^^M \endlinechar=13 % @@ -132,7 +134,7 @@ \fi \expandafter\x\csname ver@xint.sty\endcsname \ProvidesPackage{xint}% - [2013/03/28 v1.0 Expandable operations on long numbers (jfB)]% + [2013/04/04 v1.01 Expandable operations on long numbers (jfB)]% \def\xint@gobble #1{}% \def\xint@gobble@one #1{}% \def\xint@gobble@two #1#2{}% @@ -157,11 +159,12 @@ \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@UDzerofork #10\dummy #2#3\xint@UDkrof {#2}% +\def\xint@UDsignfork #1-\dummy #2#3\xint@UDkrof {#2}% +\def\xint@UDzerosfork #100\dummy #2#3\xint@UDkrof {#2}% +\def\xint@UDonezerofork #110\dummy #2#3\xint@UDkrof {#2}% +\def\xint@UDzerominusfork #10-\dummy #2#3\xint@UDkrof {#2}% +\def\xint@UDsignsfork #1--\dummy #2#3\xint@UDkrof {#2}% \def\xint@afterfi #1#2\fi {\fi #1}% \def\xintRev {\romannumeral0\xintrev }% \def\xintrev #1% @@ -180,7 +183,7 @@ \xint@UDsignfork #1\dummy \XINT@rev@negative -\dummy \XINT@rev@nonnegative - \xint@UDforksign + \xint@UDkrof #1#2% }% \def\XINT@rev@negative #1#2\Z @@ -341,7 +344,7 @@ \xint@UDsignfork #1\dummy {{0}}% -\dummy {{0}#1}% - \xint@UDforksign + \xint@UDkrof }% \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 }% @@ -410,7 +413,10 @@ }% \def\xintRelaxArray #1% {% - \edef\xint@arrayname {\expandafter\xint@gobble\string #1}% + \edef\XINT@restoreescapechar {\escapechar\the\escapechar\relax}% + \escapechar -1 + \edef\xint@arrayname {\string #1}% + \XINT@restoreescapechar \expandafter\let\expandafter\xint@temp \csname\xint@arrayname 0\endcsname \count 255 0 @@ -425,7 +431,10 @@ }% \def\xintAssignArray #1\to #2% {% - \edef\xint@arrayname {\expandafter\xint@gobble\string #2}% + \edef\XINT@restoreescapechar {\escapechar\the\escapechar\relax}% + \escapechar -1 + \edef\xint@arrayname {\string #1}% + \XINT@restoreescapechar \count 255 0 \expandafter\expandafter\expandafter \XINT@assignarray@loop #1\xint@undef @@ -500,7 +509,7 @@ #1-\dummy {\expandafter0}% zero 0#1\dummy {\expandafter-\expandafter1}% n\'egatif 0-\dummy {\expandafter1}% positif - \xint@UDforkminuszero + \xint@UDkrof \xint@z }% \def\xintOpp {\romannumeral0\xintopp }% @@ -517,7 +526,7 @@ #1-\dummy 0% zero 0#1\dummy {}% negative 0-\dummy {-#1}% positive - \xint@UDforkminuszero + \xint@UDkrof }% \def\xintAbs {\romannumeral0\xintabs }% \def\xintabs #1% @@ -529,13 +538,10 @@ \def\XINT@abs #1% {% \xint@UDsignfork - #1\dummy \XINT@abs@isnegative - -\dummy \XINT@abs@isnonnegative - \xint@UDforksign - #1% + #1\dummy \space + -\dummy { #1}% + \xint@UDkrof }% -\def\XINT@abs@isnegative #1{ }% -\def\XINT@abs@isnonnegative #1{ #1}% \def\xintAdd {\romannumeral0\xintadd }% \def\xintadd #1% {% @@ -562,8 +568,8 @@ #1-\dummy \XINT@add@minusplus % #1 = - #3-\dummy \XINT@add@plusminus % #3 = - --\dummy \XINT@add@plusplus - \xint@UDforksigns}% - \xint@UDforkzero + \xint@UDkrof }% + \xint@UDkrof {#2}{#4}#1#3% }% \def\XINT@add@secondiszero #1#2#3#4{ #4#2}% @@ -682,8 +688,8 @@ #1\dummy \XINT@sub@secondiszero #3\dummy \XINT@sub@firstiszero 0\dummy \XINT@sub@plusplus - \xint@UDforkzero}% - \xint@UDforksigns + \xint@UDkrof }% + \xint@UDkrof {#2}{#4}#1#3% }% \def\XINT@sub@secondiszero #1#2#3#4{ #4#2}% @@ -746,7 +752,7 @@ \xint@UDzerofork #1\dummy \XINT@sub@C % une retenue 0\dummy \XINT@sub@D % pas de retenue - \xint@UDforkzero + \xint@UDkrof {#7}#2#3#4#5% }% \def\XINT@sub@D #1#2\W\X\Y\Z @@ -828,14 +834,13 @@ }% \def\xint@sub@F\W\XINT@sub@Eonestep #1#2#3#4% {% - \xint@sub@Fthreewayfork + \xint@UDonezerofork #4#1\dummy {\XINT@sub@Fdec 0}% soustraire 1. Et faire signe - #1#4\dummy {\XINT@sub@Finc 1}% additionner 1. Et faire signe - 10\dummy \XINT@sub@DD % terminer. Mais avec signe - - \xint@sub@Fforkthreeway + \xint@UDkrof {#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% @@ -876,7 +881,7 @@ #1\dummy {\expandafter\space\expandafter-% \xint@cleanupzeros@nospace}% 0\dummy { -1}% - \xint@UDforkzero + \xint@UDkrof #3% }% \def\xint@sub@ez\W\XINT@sub@Eenter #1% @@ -884,7 +889,7 @@ \xint@UDzerofork #1\dummy \XINT@sub@K % il y a une retenue 0\dummy \XINT@sub@L % pas de retenue - \xint@UDforkzero + \xint@UDkrof }% \def\XINT@sub@L #1\W\X\Y\Z {\XINT@cuz@loop #1\W\W\W\W\W\W\W\Z }% @@ -943,8 +948,8 @@ #10\dummy \XINT@cmp@zeroplus #30\dummy \XINT@cmp@pluszero 00\dummy \XINT@cmp@plusplus - \xint@UDforkzeros}% - \xint@UDforksigns + \xint@UDkrof }% + \xint@UDkrof {#2}{#4}#1#3% }% \def\XINT@cmp@minusplus #1#2#3#4{ 1}% @@ -1007,7 +1012,7 @@ \xint@UDzerofork #1\dummy \XINT@cmp@K % il y a une retenue 0\dummy \XINT@cmp@L % pas de retenue - \xint@UDforkzero + \xint@UDkrof }% \def\XINT@cmp@K #1\Z { -1}% \def\XINT@cmp@L #1{\XINT@OneIfPositive@main #1}% @@ -1058,8 +1063,8 @@ #1-\dummy \XINT@geq@minusplus #3-\dummy \XINT@geq@plusminus --\dummy \XINT@geq@plusplus - \xint@UDforksigns}% - \xint@UDforkzero + \xint@UDkrof }% + \xint@UDkrof {#2}{#4}#1#3% }% \def\XINT@geq@secondiszero #1#2#3#4{ 1}% @@ -1118,7 +1123,7 @@ \xint@UDzerofork #1\dummy { 0} % il y a une retenue 0\dummy { 1} % pas de retenue - \xint@UDforkzero + \xint@UDkrof }% \def\xintMax {\romannumeral0\xintmax }% \def\xintmax #1% @@ -1145,8 +1150,8 @@ #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 + \xint@UDkrof }% + \xint@UDkrof {#2}{#4}#1#3% }% \def\XINT@max@zerozero #1#2#3#4{ 0}% @@ -1195,8 +1200,8 @@ #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 + \xint@UDkrof }% + \xint@UDkrof {#2}{#4}#1#3% }% \def\XINT@min@zerozero #1#2#3#4{ 0}% @@ -1276,10 +1281,10 @@ \xint@UDsignfork #1\dummy \XINT@sum@pushneg -\dummy \XINT@sum@pushpos - \xint@UDforksign + \xint@UDkrof #1% }% -\def\XINT@sum@skipzeroinput #1\xint@UDforksign #2\Z #3#4% +\def\XINT@sum@skipzeroinput #1\xint@UDkrof #2\Z #3#4% {% \XINT@sum@xpxpnext {#3}{#4}% }% @@ -1375,8 +1380,8 @@ #1-\dummy \XINT@mul@minusplus % #1 = - #3-\dummy \XINT@mul@plusminus % #3 = - --\dummy \XINT@mul@plusplus - \xint@UDforksigns}% - \xint@UDforkzero + \xint@UDkrof }% + \xint@UDkrof {#2}{#4}#1#3% }% \def\XINT@mul@zero #1#2#3#4{ 0}% @@ -1765,7 +1770,7 @@ \xint@UDsignfork #1\dummy \XINT@prod@firstisneg -\dummy \XINT@prod@firstispos - \xint@UDforksign + \xint@UDkrof #1% }% \def\XINT@prod@returnzero #1\relax { 0}% @@ -1795,7 +1800,7 @@ \xint@UDsignfork #1\dummy \XINT@prod@neg -\dummy \XINT@prod@pos - \xint@UDforksign + \xint@UDkrof #1% }% \def\XINT@prod@pos #1\Z #2#3% @@ -2108,7 +2113,7 @@ \xint@UDsignfork #1\dummy \XINT@pow@Aneg -\dummy \XINT@pow@Anonneg - \xint@UDforksign + \xint@UDkrof #1{#2}% }% \def\XINT@pow@Aneg #1#2#3% @@ -2215,12 +2220,10 @@ }% \def\xintQuo {\romannumeral0\xintquo }% \def\xintRem {\romannumeral0\xintrem }% -\def\xintquo {% - \expandafter +\def\xintquo {\expandafter \xint@firstoftwo@andstop \romannumeral0\xintdivision }% -\def\xintrem {% - \expandafter +\def\xintrem {\expandafter \xint@secondoftwo@andstop \romannumeral0\xintdivision }% \def\xintDivision {\romannumeral0\xintdivision }% @@ -2247,8 +2250,8 @@ #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 + \xint@UDkrof }% + \xint@UDkrof {#2}{#4}#1#3% #1#2=B, #3#4=A }% \def\XINT@div@BisZero #1#2#3#4% @@ -2407,7 +2410,7 @@ \or \xint@afterfi {\expandafter\XINT@div@finished@c \expandafter - {\romannumeral0\XINT@dsh@preparegobble {#1}{#5}}}% + {\romannumeral0\XINT@dsh@checksignx #5\Z {#1}}}% \fi {#2}% }% @@ -2437,42 +2440,59 @@ \expandafter {\the\numexpr #1/#4\relax}{#2}% }% -\def\XINT@div@final@d #1#2#3#4#5% +\def\XINT@div@final@d #1#2#3#4#5% q,A,Q,L,B puis c {% \expandafter - \XINT@div@final@e + \XINT@div@final@da \expandafter - {\romannumeral0\xintsub {\xint@cleanupzeros@nospace #2}% - {\romannumeral0\XINT@mul@M {#1}#5\Z\Z\Z\Z }}% - {#1}{#2}{#3}{#4}{#5}% + {\romannumeral0\XINT@mul@M {#1}#5\Z\Z\Z\Z }% + {\romannumeral0\xint@cleanupzeros@andstop #2}% + {#1}{#3}{#5}% }% -\def\XINT@div@final@e #1#2% +\def\XINT@div@final@da #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 + \expandafter\XINT@div@final@db\expandafter {#2}{#1}% +}% +\def\XINT@div@final@db #1#2% A,qB, puis q,Q,B,c +{% + \ifcase\XINT@Geq {#1}{#2} + \expandafter\XINT@div@final@dc % A < qB + \or\expandafter\XINT@div@final@e % A au moins qB \fi {#1}{#2}% }% -\def\XINT@div@final@f #1#2#3#4#5#6#7% +\def\XINT@div@final@e #1#2#3#4#5% A,qB,q,Q,B,puis c +{% + \expandafter\XINT@div@final@f + \expandafter{\romannumeral0\xintsub {#1}{#2}}% + {\romannumeral0\xintadd {\XINT@Rev@andcleanupzeros{#4}}{#3}}% +}% +\def\XINT@div@final@dc #1#2#3% A sans leading zeros,trash,q,Q,B,c +{% + \expandafter\XINT@div@final@dd + \expandafter{\the\numexpr #3-1\relax}{#1}% +}% +\def\XINT@div@final@dd #1#2#3#4% q,A,Q,B puis c +{% + \expandafter\XINT@div@final@f + \expandafter{\romannumeral0\xintsub + {#2}{\romannumeral0\XINT@mul@M {#1}#4\Z\Z\Z\Z }}% + {\romannumeral0\xintadd {\XINT@Rev@andcleanupzeros{#3}}{#1}}% +}% +\def\XINT@div@final@f #1#2#3% R,Q à développer,c {% \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}}}% + \expandafter % pas de leading zeros dans #1=R + {\romannumeral0\XINT@dsh@checksignx #3\Z {#1}}}% \fi - {\romannumeral0\xintadd {\XINT@Rev@andcleanupzeros{#4}}{#2}}% + {#2}% }% \def\XINT@div@final@end #1#2% {% - \expandafter\space\expandafter - {#2}{#1}% + \expandafter\space\expandafter {#2}{#1}% }% \def\XINT@div@body@a #1% {% @@ -2649,7 +2669,7 @@ \xint@UDzerofork #1\dummy \XINT@div@sub@C % 0\dummy \XINT@div@sub@D % pas de retenue - \xint@UDforkzero + \xint@UDkrof {#7}#2#3#4#5% }% \def\XINT@div@sub@D #1#2\W\X\Y\Z @@ -2708,7 +2728,7 @@ #1-\dummy {\expandafter 0}% zero 0#1\dummy {\expandafter #2}% negative 0-\dummy {\expandafter #1}% positive - \xint@UDforkminuszero + \xint@UDkrof \xint@z }% \def\xintLDg {\romannumeral0\xintldg }% @@ -2766,7 +2786,7 @@ \expandafter\expandafter\expandafter \XINT@dsr@a \expandafter\expandafter\expandafter - {#1}\W\Z + {#1}\W\Z }% \def\XINT@DSR #1{\romannumeral0\XINT@dsr@a {#1}\W\Z }% \def\XINT@dsr@a @@ -2785,234 +2805,226 @@ }% \def\xint@dsr@onedigit #1\XINT@rev #2{ 0}% \def\XINT@dsr@removew #1\W { }% +\def\xintDSHr {\romannumeral0\xintdshr }% +\def\xintdshr #1% +{\expandafter\expandafter\expandafter + \XINT@dshr@checkxpositive #1\Z +}% +\def\XINT@dshr@checkxpositive #1% +{% + \xint@UDzerominusfork + 0#1\dummy \XINT@dshr@xzeroorneg + #1-\dummy \XINT@dshr@xzeroorneg + 0-\dummy \XINT@dshr@xpositive + \xint@UDkrof #1% +}% +\def\XINT@dshr@xzeroorneg #1\Z #2{ 0}% +\def\XINT@dshr@xpositive #1\Z +{% + \expandafter + \xint@secondoftwo@andstop + \romannumeral0\xintdsx {#1}% +}% \def\xintDSH {\romannumeral0\xintdsh }% -\def\xintdsh #1% +\def\xintdsh #1#2% {% \expandafter\expandafter\expandafter - \xint@dsh + \xint@dsh \expandafter\expandafter\expandafter - {#1}% + {#2}{#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}% + \XINT@dsh@checksignx + #2\Z {#1}% }% -\def\XINT@DSH {\romannumeral0\XINT@dsh@checkxsize }% -\def\XINT@dsh@checkxsize #1% +\def\XINT@dsh@checksignx #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 + \xint@UDzerominusfork + #1-\dummy \XINT@dsh@xiszero + 0#1\dummy \XINT@dsx@xisNeg + 0-\dummy {\XINT@dsh@xisPos #1}% + \xint@UDkrof }% -\def\XINT@dsh #1#2{\XINT@dsh@checkAsign #2\Z {#1}}% -\def\XINT@dsh@checkAsign #1% +\def\XINT@dsh@xiszero #1\Z #2{ #2}% +\def\XINT@dsh@xisPos #1\Z #2% {% - \xint@UDzerominusfork - #1-\dummy \XINT@dsh@AisZero - 0#1\dummy \XINT@dsh@AisNeg - 0-\dummy {\XINT@dsh@directionfork #1}% - \xint@UDforkminuszero + \expandafter + \xint@firstoftwo@andstop + \romannumeral0\XINT@dsx@checksignA #2\Z {#1}% }% -\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% +\def\xintDSx {\romannumeral0\xintdsx }% +\def\xintdsx #1#2% {% - \expandafter\space - \xint@UDzerofork - #1\dummy {0}% - 0\dummy {-#1}% - \xint@UDforkzero + \expandafter\expandafter\expandafter + \xint@dsx + \expandafter\expandafter\expandafter + {#2}{#1}% }% -\def\XINT@dsh@directionfork #1\Z #2% +\def\xint@dsx #1#2% {% - \XINT@dsh@checkxsign #2\Z {#1}% + \expandafter\expandafter\expandafter + \XINT@dsx@checksignx + #2\Z {#1}% }% -\def\XINT@dsh@checkxsign #1% +\def\XINT@DSx #1#2{\romannumeral0\XINT@dsx@checksignx #1\Z {#2}}% +\def\XINT@dsx #1#2{\XINT@dsx@checksignx #1\Z {#2}}% +\def\XINT@dsx@checksignx #1% {% \xint@UDzerominusfork - #1-\dummy \XINT@dsh@donothing - 0#1\dummy \XINT@dsh@shiftleft - 0-\dummy {\XINT@dsh@shiftright #1}% - \xint@UDforkminuszero + #1-\dummy \XINT@dsx@xisZero + 0#1\dummy \XINT@dsx@xisNeg + 0-\dummy {\XINT@dsx@xisPos #1}% + \xint@UDkrof }% -\def\XINT@dsh@donothing #1\Z #2{ #2}% -\def\XINT@dsh@shiftright #1\Z #2% +\def\XINT@dsx@xisZero #1\Z #2{ {#2}{0}}% +\def\XINT@dsx@xisNeg #1\Z {% - \ifnum \XINT@Length {#2} > #1 - \expandafter\XINT@dsh@preparegobble + \ifnum\XINT@Len {#1} > 9 + \xint@afterfi {\xintError:TooBigDecimalShift + \XINT@dsx@toobigx }% \else - \expandafter\XINT@dsh@returnzero + \expandafter \XINT@dsx@zeroloop \fi - {#2}{#1}% -}% -\def\XINT@dsh@returnzero #1#2{ 0}% -\def\XINT@dsh@preparegobble #1% -{% - \expandafter - \XINT@dsh@preparegobble@ - \expandafter - {\romannumeral0\XINT@rev{#1}}% + {#1}\Z }% -\def\XINT@dsh@preparegobble@ #1#2{\XINT@dsh@gobbleloop {#2}#1\Z }% -\def\XINT@dsh@gobbleloop #1% +\def\XINT@dsx@toobigx #1\Z #2{ #2}% +\def\XINT@dsx@zeroloop #1% {% \ifcase #1 - \expandafter\XINT@dsh@endgobble + \expandafter \XINT@dsx@exit \or - \expandafter\XINT@dsh@gobble@one@andend + \expandafter \XINT@dsx@exiti \or - \expandafter\XINT@dsh@gobble@two@andend + \expandafter \XINT@dsx@exitii \or - \expandafter\XINT@dsh@gobble@three@andend + \expandafter \XINT@dsx@exitiii \or - \expandafter\XINT@dsh@gobble@four@andend + \expandafter \XINT@dsx@exitiv \or - \expandafter\XINT@dsh@gobble@five@andend + \expandafter \XINT@dsx@exitv \or - \expandafter\XINT@dsh@gobble@six@andend + \expandafter \XINT@dsx@exitvi \or - \expandafter\XINT@dsh@gobble@seven@andend + \expandafter \XINT@dsx@exitvii \else - \expandafter \XINT@dsh@gobbleloop - \expandafter - {\the\numexpr - #1-8\expandafter\expandafter\expandafter }% - \expandafter - \xint@gobble@eight + \xint@afterfi + {\expandafter + \XINT@dsx@zeroloop + \expandafter {\the\numexpr #1-8}00000000% + }% \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 +\def\XINT@dsx@exit #1\Z + {\XINT@dsx@addzeros {#1}}% +\def\XINT@dsx@exiti #1\Z + {\XINT@dsx@addzeros {0#1}}% +\def\XINT@dsx@exitii #1\Z + {\XINT@dsx@addzeros {00#1}}% +\def\XINT@dsx@exitiii #1\Z + {\XINT@dsx@addzeros {000#1}}% +\def\XINT@dsx@exitiv #1\Z + {\XINT@dsx@addzeros {0000#1}}% +\def\XINT@dsx@exitv #1\Z + {\XINT@dsx@addzeros {00000#1}}% +\def\XINT@dsx@exitvi #1\Z + {\XINT@dsx@addzeros {000000#1}}% +\def\XINT@dsx@exitvii #1\Z + {\XINT@dsx@addzeros {0000000#1}}% +\def\XINT@dsx@addzeros #1#2{ #2#1}% +\def\XINT@dsx@xisPos #1\Z #2% +{% + \XINT@dsx@checksignA #2\Z {#1}% +}% +\def\XINT@dsx@checksignA #1% {% - \XINT@rev{#1}% + \xint@UDzerominusfork + #1-\dummy \XINT@dsx@AisZero + 0#1\dummy \XINT@dsx@AisNeg + 0-\dummy {\XINT@dsx@AisPos #1}% + \xint@UDkrof }% -\def\XINT@dsh@shiftleft #1\Z +\def\XINT@dsx@AisZero #1\Z #2{ {0}{0}}% +\def\XINT@dsx@AisNeg #1\Z #2% {% - \XINT@dsh@zeroloop {#1}\Z + \expandafter + \XINT@dsx@AisNeg@dosplit@andcheckfirst + \romannumeral0\XINT@split@checksizex {#2}{#1}% }% -\def\XINT@dsh@zeroloop #1% +\def\XINT@dsx@AisNeg@dosplit@andcheckfirst #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 + \XINT@dsx@AisNeg@checkiffirstempty #1\Z +}% +\def\XINT@dsx@AisNeg@checkiffirstempty #1% +{% + \xint@z #1\XINT@dsx@AisNeg@finish@zero\Z + \XINT@dsx@AisNeg@finish@notzero #1% +}% +\def\XINT@dsx@AisNeg@finish@zero\Z + \XINT@dsx@AisNeg@finish@notzero\Z #1% +{% + \expandafter + \XINT@dsx@end + \expandafter {\romannumeral0\XINT@num {-#1}}{0}% +}% +\def\XINT@dsx@AisNeg@finish@notzero #1\Z #2% +{% + \expandafter + \XINT@dsx@end + \expandafter {\romannumeral0\XINT@num {#2}}{-#1}% +}% +\def\XINT@dsx@AisPos #1\Z #2% +{% + \expandafter + \XINT@dsx@AisPos@finish + \romannumeral0\XINT@split@checksizex {#2}{#1}% +}% +\def\XINT@dsx@AisPos@finish #1#2% +{% + \expandafter + \XINT@dsx@end + \expandafter {\romannumeral0\XINT@num {#2}}% + {\romannumeral0\XINT@num {#1}}% +}% +\def\XINT@dsx@end #1#2% +{% + \expandafter\space\expandafter{#2}{#1}% }% -\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 + \expandafter + \xint@firstoftwo@andstop + \romannumeral0\xintdecsplit }% \def\xintdecsplitr {% - \expandafter - \xint@secondoftwo@andstop - \romannumeral0\xintdecsplit + \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% +\def\xintdecsplit #1#2% {% \expandafter - \XINT@split@checkifAzero + \xint@split \expandafter - {\romannumeral0\xintabs {#2}}{#1}% fait expansion de A + {\romannumeral0\xintabs {#2}}{#1}% fait expansion de A }% -\def\XINT@split@checkifAzero #1#2% +\def\xint@split #1#2% {% - \ifcase \XINT@Sgn {#1} - \expandafter\XINT@split@AisZero - \fi - \XINT@split@checkxsize {#2}{#1}% + \expandafter\expandafter\expandafter + \XINT@split@checksizex + \expandafter\expandafter\expandafter + {#2}{#1}% }% -\def\XINT@split@AisZero\XINT@split@checkxsize #1#2{ {0}{0}}% -\def\XINT@split@checkxsize #1% +\def\XINT@split@checksizex #1% {% \ifnum\XINT@Len {#1} > 9 - \expandafter\XINT@split@bigx + \xint@afterfi {\xintError:TooBigDecimalSplit + \XINT@split@bigx }% \else \expandafter\XINT@split@xfork \fi @@ -3021,25 +3033,23 @@ \def\XINT@split@bigx #1\Z #2% {% \ifcase\XINT@Sgn {#1} - \or \xint@afterfi { {0}{#2}}% + \or \xint@afterfi { {}{#2}}% positive big x \else - \xint@afterfi - {\expandafter\xintError:TooBigDecimalSplit - \space{0}{0}}% + \xint@afterfi { {#2}{}}% negative big x \fi }% \def\XINT@split@xfork #1% {% \xint@UDzerominusfork - #1-\dummy \XINT@split@donothing + #1-\dummy \XINT@split@zerosplit 0#1\dummy \XINT@split@fromleft - 0-\dummy {\XINT@split@splitright #1}% - \xint@UDforkminuszero + 0-\dummy {\XINT@split@fromright #1}% + \xint@UDkrof }% -\def\XINT@split@donothing #1\Z #2{ {#2}{0}}% +\def\XINT@split@zerosplit #1\Z #2{ {#2}{}}% \def\XINT@split@fromleft #1\Z #2% {% - \XINT@split@fromleft@loop {#1}{}#2\W\W\W\W\W\W\W\W\Z % + \XINT@split@fromleft@loop {#1}{}#2\W\W\W\W\W\W\W\W\Z }% \def\XINT@split@fromleft@loop #1% {% @@ -3121,88 +3131,89 @@ {% \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% +\def\XINT@split@fromright #1\Z #2% {% \expandafter - \XINT@split@@pre + \XINT@split@fromright@a \expandafter - {\romannumeral0\XINT@rev{#1}}% + {\romannumeral0\XINT@rev {#2}}{#1}{#2}% }% -\def\XINT@split@@pre #1#2% +\def\XINT@split@fromright@a #1#2% {% - \XINT@split@loop {#2}{}#1\Z + \XINT@split@fromright@loop {#2}{}#1\W\W\W\W\W\W\W\W\Z }% -\def\XINT@split@loop #1% +\def\XINT@split@fromright@loop #1% {% \ifcase #1 - \expandafter\XINT@split@endsplit + \expandafter\XINT@split@fromright@endsplit \or - \expandafter\XINT@split@one@andend + \expandafter\XINT@split@fromright@one@andend \or - \expandafter\XINT@split@two@andend + \expandafter\XINT@split@fromright@two@andend \or - \expandafter\XINT@split@three@andend + \expandafter\XINT@split@fromright@three@andend \or - \expandafter\XINT@split@four@andend + \expandafter\XINT@split@fromright@four@andend \or - \expandafter\XINT@split@five@andend + \expandafter\XINT@split@fromright@five@andend \or - \expandafter\XINT@split@six@andend + \expandafter\XINT@split@fromright@six@andend \or - \expandafter\XINT@split@seven@andend + \expandafter\XINT@split@fromright@seven@andend \else - \expandafter \XINT@split@loop + \expandafter \XINT@split@fromright@loop@perhaps \expandafter {\the\numexpr #1-8\expandafter\expandafter\expandafter }% \expandafter - \XINT@split@eight + \XINT@split@fromright@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@fromright@endsplit #1#2\W #3\Z #4% +{% + \expandafter + \space + \expandafter {\romannumeral0\XINT@rev{#2}}{#1}% }% -\def\XINT@split@endsplit@ #1#2% +\def\XINT@split@fromright@eight #1#2#3#4#5#6#7#8#9% {% - \expandafter\space\expandafter {#2}{#1}% + #9{#9#8#7#6#5#4#3#2#1}% +}% +\def\XINT@split@fromright@loop@perhaps #1#2% +{% + \xint@w #2\XINT@split@fromright@toofar\W\XINT@split@fromright@loop + {#1}% }% +\def\XINT@split@fromright@toofar\W\XINT@split@fromright@loop #1#2#3\Z + { {}}% +\def\XINT@split@fromright@one@andend + {\expandafter\XINT@split@fromright@checkiftoofar\XINT@split@fromright@one }% +\def\XINT@split@fromright@one #1#2{#2{#2#1}}% +\def\XINT@split@fromright@two@andend + {\expandafter\XINT@split@fromright@checkiftoofar\XINT@split@fromright@two }% +\def\XINT@split@fromright@two #1#2#3{#3{#3#2#1}}% +\def\XINT@split@fromright@three@andend + {\expandafter\XINT@split@fromright@checkiftoofar\XINT@split@fromright@three }% +\def\XINT@split@fromright@three #1#2#3#4{#4{#4#3#2#1}}% +\def\XINT@split@fromright@four@andend + {\expandafter\XINT@split@fromright@checkiftoofar\XINT@split@fromright@four }% +\def\XINT@split@fromright@four #1#2#3#4#5{#5{#5#4#3#2#1}}% +\def\XINT@split@fromright@five@andend + {\expandafter\XINT@split@fromright@checkiftoofar\XINT@split@fromright@five }% +\def\XINT@split@fromright@five #1#2#3#4#5#6{#6{#6#5#4#3#2#1}}% +\def\XINT@split@fromright@six@andend + {\expandafter\XINT@split@fromright@checkiftoofar\XINT@split@fromright@six }% +\def\XINT@split@fromright@six #1#2#3#4#5#6#7{#7{#7#6#5#4#3#2#1}}% +\def\XINT@split@fromright@seven@andend + {\expandafter\XINT@split@fromright@checkiftoofar\XINT@split@fromright@seven }% +\def\XINT@split@fromright@seven #1#2#3#4#5#6#7#8{#8{#8#7#6#5#4#3#2#1}}% +\def\XINT@split@fromright@checkiftoofar #1% +{% + \xint@w #1\XINT@split@fromright@wenttoofar\W + \XINT@split@fromright@endsplit +}% +\def\XINT@split@fromright@wenttoofar\W\XINT@split@fromright@endsplit #1\Z #2% + { {}{#2}}% \XINT@restorecatcodes@endinput% \endinput %% diff --git a/Master/texmf-dist/tex/generic/xint/xintgcd.sty b/Master/texmf-dist/tex/generic/xint/xintgcd.sty index 3c7cc44b183..08993b3a5fc 100644 --- a/Master/texmf-dist/tex/generic/xint/xintgcd.sty +++ b/Master/texmf-dist/tex/generic/xint/xintgcd.sty @@ -4,7 +4,7 @@ %% %% The original source files were: %% -%% xint.dtx (with options: `gcd') +%% xint.dtx (with options: `xintgcd') %% %% IMPORTANT NOTICE: %% @@ -20,11 +20,13 @@ %% 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 +%% Part of the xint bundle (version 1.01 of 2013/04/04) %% xintgcd: Euclidean algorithm with xint package %% Copyright (C) 2013 by Jean-Francois Burnol %%---------------------------------------------------------------- +%% \begingroup\catcode61\catcode48\catcode32=10\relax% \catcode13=5 % ^^M \endlinechar=13 % @@ -160,7 +162,7 @@ \fi \expandafter\x\csname ver@xintgcd.sty\endcsname \ProvidesPackage{xintgcd}% - [2013/03/28 v1.0 Euclide algorithm with xint package (jfB)]% + [2013/04/04 v1.01 Euclide algorithm with xint package (jfB)]% \def\xintGCD {\romannumeral0\xintgcd }% \def\xintgcd #1% {% @@ -181,7 +183,7 @@ #1\dummy \XINT@gcd@BisZero #3\dummy \XINT@gcd@AisZero 0\dummy \XINT@gcd@loop - \xint@UDforkzero + \xint@UDkrof {#1#2}{#3#4}% }% \def\XINT@gcd@AisZero #1#2{ #1}% @@ -223,8 +225,8 @@ #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 + \xint@UDkrof }% + \xint@UDkrof {#2}{#4}#1#3{#3#4}{#1#2}% #1#2=B, #3#4=A }% \def\XINT@bezout@botharezero #1#2#3#4#5#6% @@ -237,14 +239,14 @@ \xint@UDsignfork #3\dummy { {0}{#3#1}{0}{1}{#1}}% -\dummy { {0}{#3#1}{0}{-1}{#1}}% - \xint@UDforksign + \xint@UDkrof }% \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 + \xint@UDkrof }% \def\XINT@bezout@minusminus #1#2#3#4% {% @@ -379,7 +381,7 @@ #1\dummy \XINT@euc@BisZero #3\dummy \XINT@euc@AisZero 0\dummy \XINT@euc@a - \xint@UDforkzero + \xint@UDkrof {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}}% @@ -433,7 +435,7 @@ #1\dummy \XINT@bezalg@BisZero #3\dummy \XINT@bezalg@AisZero 0\dummy \XINT@bezalg@a - \xint@UDforkzero + \xint@UDkrof 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}}% |