diff options
Diffstat (limited to 'Master/texmf-dist/tex/generic/xint/xint.sty')
-rw-r--r-- | Master/texmf-dist/tex/generic/xint/xint.sty | 203 |
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: |