summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/xint/xint.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/generic/xint/xint.sty')
-rw-r--r--Master/texmf-dist/tex/generic/xint/xint.sty203
1 files changed, 132 insertions, 71 deletions
diff --git a/Master/texmf-dist/tex/generic/xint/xint.sty b/Master/texmf-dist/tex/generic/xint/xint.sty
index 33a477c63d2..9280d4fedc2 100644
--- a/Master/texmf-dist/tex/generic/xint/xint.sty
+++ b/Master/texmf-dist/tex/generic/xint/xint.sty
@@ -21,8 +21,8 @@
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%% ---------------------------------------------------------------
-%% The xint bundle 1.3f 2019/09/10
-%% Copyright (C) 2013-2019 by Jean-Francois Burnol
+%% The xint bundle 1.4 2020/01/31
+%% Copyright (C) 2013-2020 by Jean-Francois Burnol
%% xint: Expandable operations on big integers
%% ---------------------------------------------------------------
\begingroup\catcode61\catcode48\catcode32=10\relax%
@@ -70,7 +70,7 @@
\XINTsetupcatcodes% defined in xintkernel.sty (loaded by xintcore.sty)
\XINT_providespackage
\ProvidesPackage{xint}%
- [2019/09/10 v1.3f Expandable operations on big integers (JFB)]%
+ [2020/01/31 v1.4 Expandable operations on big integers (JFB)]%
\long\def\xint_firstofthree #1#2#3{#1}%
\long\def\xint_secondofthree #1#2#3{#2}%
\long\def\xint_thirdofthree #1#2#3{#3}%
@@ -550,36 +550,37 @@
\def\xintXOR {\romannumeral0\xintxor }%
\def\xintxor #1#2{\if\xintiiIsZero{#1}\xintiiIsZero{#2}%
\xint_afterfi{ 0}\else\xint_afterfi{ 1}\fi }%
-\def\xintANDof {\romannumeral0\xintandof }%
-\def\xintandof #1{\expandafter\XINT_andof_a\romannumeral`&&@#1\xint:}%
-\def\XINT_andof_a #1{\expandafter\XINT_andof_b\romannumeral`&&@#1!}%
-\def\XINT_andof_b #1%
- {\xint_gob_til_xint: #1\XINT_andof_e\xint:\XINT_andof_c #1}%
-\def\XINT_andof_c #1!%
- {\xintifTrueAelseB {#1}{\XINT_andof_a}{\XINT_andof_no}}%
-\def\XINT_andof_no #1\xint:{ 0}%
-\def\XINT_andof_e #1!{ 1}%
-\def\xintORof {\romannumeral0\xintorof }%
-\def\xintorof #1{\expandafter\XINT_orof_a\romannumeral`&&@#1\xint:}%
-\def\XINT_orof_a #1{\expandafter\XINT_orof_b\romannumeral`&&@#1!}%
-\def\XINT_orof_b #1%
- {\xint_gob_til_xint: #1\XINT_orof_e\xint:\XINT_orof_c #1}%
-\def\XINT_orof_c #1!%
- {\xintifTrueAelseB {#1}{\XINT_orof_yes}{\XINT_orof_a}}%
-\def\XINT_orof_yes #1\xint:{ 1}%
-\def\XINT_orof_e #1!{ 0}%
-\def\xintXORof {\romannumeral0\xintxorof }%
-\def\xintxorof #1{\expandafter\XINT_xorof_a\expandafter
- 0\romannumeral`&&@#1\xint:}%
-\def\XINT_xorof_a #1#2{\expandafter\XINT_xorof_b\romannumeral`&&@#2!#1}%
-\def\XINT_xorof_b #1%
- {\xint_gob_til_xint: #1\XINT_xorof_e\xint:\XINT_xorof_c #1}%
-\def\XINT_xorof_c #1!#2%
- {\xintifTrueAelseB {#1}{\if #20\xint_afterfi{\XINT_xorof_a 1}%
- \else\xint_afterfi{\XINT_xorof_a 0}\fi}%
- {\XINT_xorof_a #2}%
- }%
-\def\XINT_xorof_e #1!#2{ #2}%
+\def\xintANDof {\romannumeral0\xintandof }%
+\def\xintandof #1{\expandafter\XINT_andof\romannumeral`&&@#1^}%
+\def\XINT_ANDof {\romannumeral0\XINT_andof}%
+\def\XINT_andof #1%
+{%
+ \xint_gob_til_^ #1\XINT_andof_yes ^%
+ \xintiiifNotZero{#1}\XINT_andof\XINT_andof_no
+}%
+\def\XINT_andof_no #1^{ 0}%
+\def\XINT_andof_yes ^#1\XINT_andof_no{ 1}%
+\def\xintORof {\romannumeral0\xintorof }%
+\def\xintorof #1{\expandafter\XINT_orof\romannumeral`&&@#1^}%
+\def\XINT_ORof {\romannumeral0\XINT_orof}%
+\def\XINT_orof #1%
+{%
+ \xint_gob_til_^ #1\XINT_orof_no ^%
+ \xintiiifNotZero{#1}\XINT_orof_yes\XINT_orof
+}%
+\def\XINT_orof_yes#1^{ 1}%
+\def\XINT_orof_no ^#1\XINT_orof{ 0}%
+\def\xintXORof {\romannumeral0\xintxorof }%
+\def\xintxorof #1{\expandafter\XINT_xorof\romannumeral`&&@#1^}%
+\def\XINT_XORof {\romannumeral0\XINT_xorof}%
+\def\XINT_xorof {\if1\the\numexpr\XINT_xorof_a}%
+\def\XINT_xorof_a #1%
+{%
+ \xint_gob_til_^ #1\XINT_xorof_e ^%
+ \xintiiifNotZero{#1}{-}{}\XINT_xorof_a
+}%
+\def\XINT_xorof_e ^#1\XINT_xorof_a
+ {1\relax\xint_afterfi{ 0}\else\xint_afterfi{ 1}\fi}%
\def\xintiiMax {\romannumeral0\xintiimax }%
\def\xintiimax #1%
{%
@@ -664,46 +665,87 @@
{%
\unless\if1\romannumeral0\XINT_geq_plusplus{}{}%
}%
-\def\xintiiMaxof {\romannumeral0\xintiimaxof }%
-\def\xintiimaxof #1{\expandafter\XINT_iimaxof_a\romannumeral`&&@#1\xint:}%
-\def\XINT_iimaxof_a #1{\expandafter\XINT_iimaxof_b\romannumeral`&&@#1!}%
-\def\XINT_iimaxof_b #1!#2%
- {\expandafter\XINT_iimaxof_c\romannumeral`&&@#2!{#1}!}%
-\def\XINT_iimaxof_c #1%
- {\xint_gob_til_xint: #1\XINT_iimaxof_e\xint:\XINT_iimaxof_d #1}%
-\def\XINT_iimaxof_d #1!%
- {\expandafter\XINT_iimaxof_b\romannumeral0\xintiimax {#1}}%
-\def\XINT_iimaxof_e #1!#2!{ #2}%
-\def\xintiiMinof {\romannumeral0\xintiiminof }%
-\def\xintiiminof #1{\expandafter\XINT_iiminof_a\romannumeral`&&@#1\xint:}%
-\def\XINT_iiminof_a #1{\expandafter\XINT_iiminof_b\romannumeral`&&@#1!}%
-\def\XINT_iiminof_b #1!#2%
- {\expandafter\XINT_iiminof_c\romannumeral`&&@#2!{#1}!}%
-\def\XINT_iiminof_c #1%
- {\xint_gob_til_xint: #1\XINT_iiminof_e\xint:\XINT_iiminof_d #1}%
-\def\XINT_iiminof_d #1!%
- {\expandafter\XINT_iiminof_b\romannumeral0\xintiimin {#1}}%
-\def\XINT_iiminof_e #1!#2!{ #2}%
+\def\xintiiMaxof {\romannumeral0\xintiimaxof }%
+\def\xintiimaxof #1{\expandafter\XINT_iimaxof\romannumeral`&&@#1^}%
+\def\XINT_iiMaxof{\romannumeral0\XINT_iimaxof}%
+\def\XINT_iimaxof#1%
+{%
+ \xint_gob_til_^ #1\XINT_iimaxof_empty ^%
+ \expandafter\XINT_iimaxof_loop\romannumeral`&&@#1\xint:
+}%
+\def\XINT_iimaxof_empty ^#1\xint:{ 0}%
+\def\XINT_iimaxof_loop #1\xint:#2%
+{%
+ \xint_gob_til_^ #2\XINT_iimaxof_e ^%
+ \expandafter\XINT_iimaxof_loop\romannumeral0\xintiimax{#1}{#2}\xint:
+}%
+\def\XINT_iimaxof_e ^#1\xintiimax #2#3\xint:{ #2}%
+\def\xintiiMinof {\romannumeral0\xintiiminof }%
+\def\xintiiminof #1{\expandafter\XINT_iiminof\romannumeral`&&@#1^}%
+\def\XINT_iiMinof{\romannumeral0\XINT_iiminof}%
+\def\XINT_iiminof#1%
+{%
+ \xint_gob_til_^ #1\XINT_iiminof_empty ^%
+ \expandafter\XINT_iiminof_loop\romannumeral`&&@#1\xint:
+}%
+\def\XINT_iiminof_empty ^#1\xint:{ 0}%
+\def\XINT_iiminof_loop #1\xint:#2%
+{%
+ \xint_gob_til_^ #2\XINT_iiminof_e ^%
+ \expandafter\XINT_iiminof_loop\romannumeral0\xintiimin{#1}{#2}\xint:
+}%
+\def\XINT_iiminof_e ^#1\xintiimin #2#3\xint:{ #2}%
\def\xintiiSum {\romannumeral0\xintiisum }%
-\def\xintiisum #1{\expandafter\XINT_sumexpr\romannumeral`&&@#1\xint:}%
-\def\XINT_sumexpr {\XINT_sum_loop_a 0\Z }%
-\def\XINT_sum_loop_a #1\Z #2%
- {\expandafter\XINT_sum_loop_b \romannumeral`&&@#2\xint:#1\xint:\Z}%
-\def\XINT_sum_loop_b #1%
- {\xint_gob_til_xint: #1\XINT_sum_finished\xint:\XINT_sum_loop_c #1}%
-\def\XINT_sum_loop_c
- {\expandafter\XINT_sum_loop_a\romannumeral0\XINT_add_fork }%
-\def\XINT_sum_finished\xint:\XINT_sum_loop_c\xint:\xint:#1\xint:\Z{ #1}%
+\def\xintiisum #1{\expandafter\XINT_iisum\romannumeral`&&@#1^}%
+\def\XINT_iiSum{\romannumeral0\XINT_iisum}%
+\def\XINT_iisum #1%
+{%
+ \expandafter\XINT_iisum_a\romannumeral`&&@#1\xint:
+}%
+\def\XINT_iisum_a #1%
+{%
+ \xint_gob_til_^ #1\XINT_iisum_empty ^%
+ \XINT_iisum_loop #1%
+}%
+\def\XINT_iisum_empty ^#1\xint:{ 0}%
+\def\XINT_iisum_loop #1#2\xint:#3%
+{%
+ \expandafter\XINT_iisum_loop_a
+ \expandafter#1\romannumeral`&&@#3\xint:#2\xint:\xint:
+}%
+\def\XINT_iisum_loop_a #1#2%
+{%
+ \xint_gob_til_^ #2\XINT_iisum_loop_end ^%
+ \expandafter\XINT_iisum_loop\romannumeral0\XINT_add_nfork #1#2%
+}%
+\def\XINT_iisum_loop_end ^#1\XINT_add_nfork #2#3\xint:#4\xint:\xint:{ #2#4}%
\def\xintiiPrd {\romannumeral0\xintiiprd }%
-\def\xintiiprd #1{\expandafter\XINT_prdexpr\romannumeral`&&@#1\xint:}%
-\def\XINT_prdexpr {\XINT_prod_loop_a 1\Z }%
-\def\XINT_prod_loop_a #1\Z #2%
- {\expandafter\XINT_prod_loop_b\romannumeral`&&@#2\xint:#1\xint:\Z}%
-\def\XINT_prod_loop_b #1%
- {\xint_gob_til_xint: #1\XINT_prod_finished\xint:\XINT_prod_loop_c #1}%
-\def\XINT_prod_loop_c
- {\expandafter\XINT_prod_loop_a\romannumeral0\XINT_mul_fork }%
-\def\XINT_prod_finished\xint:\XINT_prod_loop_c\xint:\xint:#1\xint:\Z { #1}%
+\def\xintiiprd #1{\expandafter\XINT_iiprd\romannumeral`&&@#1^}%
+\def\XINT_iiPrd{\romannumeral0\XINT_iiprd}%
+\def\XINT_iiprd #1%
+{%
+ \expandafter\XINT_iiprd_a\romannumeral`&&@#1\xint:
+}%
+\def\XINT_iiprd_a #1%
+{%
+ \xint_gob_til_^ #1\XINT_iiprd_empty ^%
+ \xint_gob_til_zero #1\XINT_iiprd_zero 0%
+ \XINT_iiprd_loop #1%
+}%
+\def\XINT_iiprd_empty ^#1\xint:{ 1}%
+\def\XINT_iiprd_zero 0#1^{ 0}%
+\def\XINT_iiprd_loop #1#2\xint:#3%
+{%
+ \expandafter\XINT_iiprd_loop_a
+ \expandafter#1\romannumeral`&&@#3\xint:#2\xint:\xint:
+}%
+\def\XINT_iiprd_loop_a #1#2%
+{%
+ \xint_gob_til_^ #2\XINT_iiprd_loop_end ^%
+ \xint_gob_til_zero #2\XINT_iiprd_zero 0%
+ \expandafter\XINT_iiprd_loop\romannumeral0\XINT_mul_nfork #1#2%
+}%
+\def\XINT_iiprd_loop_end ^#1\XINT_mul_nfork #2#3\xint:#4\xint:\xint:{ #2#4}%
\def\xintiiSquareRoot {\romannumeral0\xintiisquareroot }%
\def\xintiisquareroot #1{\expandafter\XINT_sqrt_checkin\romannumeral`&&@#1\xint:}%
\def\XINT_sqrt_checkin #1%
@@ -1444,6 +1486,22 @@
\xint:#1\xint:#2\xint:
}%
\def\XINT_lcm_end #1\xint:#2\xint:#3\xint:{\xintiimul {#2}{\xintiiQuo{#3}{#1}}}%
+\def\xintiiGCDof {\romannumeral0\xintiigcdof }%
+\def\xintiigcdof #1{\expandafter\XINT_iigcdof_a\romannumeral`&&@#1^}%
+\def\XINT_iiGCDof {\romannumeral0\XINT_iigcdof_a}%
+\def\XINT_iigcdof_a #1{\expandafter\XINT_iigcdof_b\romannumeral`&&@#1!}%
+\def\XINT_iigcdof_b #1!#2{\expandafter\XINT_iigcdof_c\romannumeral`&&@#2!{#1}!}%
+\def\XINT_iigcdof_c #1{\xint_gob_til_^ #1\XINT_iigcdof_e ^\XINT_iigcdof_d #1}%
+\def\XINT_iigcdof_d #1!{\expandafter\XINT_iigcdof_b\romannumeral0\xintiigcd {#1}}%
+\def\XINT_iigcdof_e #1!#2!{ #2}%
+\def\xintiiLCMof {\romannumeral0\xintiilcmof }%
+\def\xintiilcmof #1{\expandafter\XINT_iilcmof_a\romannumeral`&&@#1^}%
+\def\XINT_iiLCMof {\romannumeral0\XINT_iilcmof_a}%
+\def\XINT_iilcmof_a #1{\expandafter\XINT_iilcmof_b\romannumeral`&&@#1!}%
+\def\XINT_iilcmof_b #1!#2{\expandafter\XINT_iilcmof_c\romannumeral`&&@#2!{#1}!}%
+\def\XINT_iilcmof_c #1{\xint_gob_til_^ #1\XINT_iilcmof_e ^\XINT_iilcmof_d #1}%
+\def\XINT_iilcmof_d #1!{\expandafter\XINT_iilcmof_b\romannumeral0\xintiilcm {#1}}%
+\def\XINT_iilcmof_e #1!#2!{ #2}%
\def\xintRandomDigits{\romannumeral0\xintrandomdigits}%
\def\xintrandomdigits#1%
{%
@@ -1484,6 +1542,9 @@
+\xint_texuniformdeviate\xint_c_x^viii%
\relax%
}%
+\let\xintEightRandomDigits\XINT_eightrandomdigits
+\def\xintRandBit{\xint_texuniformdeviate\xint_c_ii}%
+\def\xintRandBit{\xint_texuniformdeviate\xint_c_ii}%
\def\xintXRandomDigits#1%
{%
\csname xint_gobble_\expandafter\XINT_xrandomdigits\the\numexpr#1\xint: