diff options
author | Karl Berry <karl@freefriends.org> | 2018-05-19 23:28:16 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2018-05-19 23:28:16 +0000 |
commit | 191a9434e66d18ae2ca926de04deeef76a693f17 (patch) | |
tree | 17aa6c5603fcb8f65fab4d8c3cc41c8f3d1fc4b9 /Master/texmf-dist/tex/generic/xint/xint.sty | |
parent | d5975620549112823d69c164a8e1d06cb83398c2 (diff) |
xint (19may18)
git-svn-id: svn://tug.org/texlive/trunk@47772 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/xint/xint.sty')
-rw-r--r-- | Master/texmf-dist/tex/generic/xint/xint.sty | 151 |
1 files changed, 149 insertions, 2 deletions
diff --git a/Master/texmf-dist/tex/generic/xint/xint.sty b/Master/texmf-dist/tex/generic/xint/xint.sty index 80548342812..428de889050 100644 --- a/Master/texmf-dist/tex/generic/xint/xint.sty +++ b/Master/texmf-dist/tex/generic/xint/xint.sty @@ -21,7 +21,7 @@ %% same distribution. (The sources need not necessarily be %% in the same archive or directory.) %% --------------------------------------------------------------- -%% The xint bundle 1.3a 2018/03/07 +%% The xint bundle 1.3b 2018/05/18 %% Copyright (C) 2013-2018 by Jean-Francois Burnol %% xint: Expandable operations on big integers %% --------------------------------------------------------------- @@ -70,13 +70,19 @@ \XINTsetupcatcodes% defined in xintkernel.sty (loaded by xintcore.sty) \XINT_providespackage \ProvidesPackage{xint}% - [2018/03/07 1.3a Expandable operations on big integers (JFB)]% + [2018/05/18 1.3b 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}% \long\def\xint_firstofthree_thenstop #1#2#3{ #1}% 1.09i \long\def\xint_secondofthree_thenstop #1#2#3{ #2}% \long\def\xint_thirdofthree_thenstop #1#2#3{ #3}% +\ifdefined\xint_texuniformdeviate + \unless\ifdefined\xint_c_nine_x^viii + \csname newcount\endcsname\xint_c_nine_x^viii + \xint_c_nine_x^viii 900000000 + \fi +\fi \def\xintiLen {\romannumeral0\xintilen }% \def\xintilen #1{\def\xintilen ##1% {% @@ -1372,6 +1378,147 @@ \def\xintBool #1{\romannumeral`&&@% \csname if#1\endcsname\expandafter1\else\expandafter0\fi }% \def\xintToggle #1{\romannumeral`&&@\iftoggle{#1}{1}{0}}% +\def\xintRandomDigits{\romannumeral0\xintrandomdigits}% +\def\xintrandomdigits#1% +{% + \csname xint_gob_andstop_\expandafter\XINT_randomdigits\the\numexpr#1\xint: +}% +\def\XINT_randomdigits#1\xint: +{% + \expandafter\XINT_randomdigits_a + \the\numexpr(#1+\xint_c_iii)/\xint_c_viii\xint:#1\xint: +}% +\def\XINT_randomdigits_a#1\xint:#2\xint: +{% + \romannumeral\numexpr\xint_c_viii*#1-#2\csname XINT_% + \romannumeral\XINT_replicate #1\endcsname \csname + XINT_rdg\endcsname +}% +\def\XINT_rdg +{% + \expandafter\XINT_rdg_aux\the\numexpr% + \xint_c_nine_x^viii% + -\xint_texuniformdeviate\xint_c_ii^vii% + -\xint_c_ii^vii*\xint_texuniformdeviate\xint_c_ii^vii% + -\xint_c_ii^xiv*\xint_texuniformdeviate\xint_c_ii^vii% + -\xint_c_ii^xxi*\xint_texuniformdeviate\xint_c_ii^vii% + +\xint_texuniformdeviate\xint_c_x^viii% + \relax% +}% +\def\XINT_rdg_aux#1{XINT_rdg\endcsname}% +\let\XINT_XINT_rdg\endcsname +\def\XINT_eightrandomdigits +{% + \expandafter\xint_gobble_i\the\numexpr% + \xint_c_nine_x^viii% + -\xint_texuniformdeviate\xint_c_ii^vii% + -\xint_c_ii^vii*\xint_texuniformdeviate\xint_c_ii^vii% + -\xint_c_ii^xiv*\xint_texuniformdeviate\xint_c_ii^vii% + -\xint_c_ii^xxi*\xint_texuniformdeviate\xint_c_ii^vii% + +\xint_texuniformdeviate\xint_c_x^viii% + \relax% +}% +\def\xintXRandomDigits#1% +{% + \csname xint_gobble_\expandafter\XINT_xrandomdigits\the\numexpr#1\xint: +}% +\def\XINT_xrandomdigits#1\xint: +{% + \expandafter\XINT_xrandomdigits_a + \the\numexpr(#1+\xint_c_iii)/\xint_c_viii\xint:#1\xint: +}% +\def\XINT_xrandomdigits_a#1\xint:#2\xint: +{% + \romannumeral\numexpr\xint_c_viii*#1-#2\expandafter\endcsname + \romannumeral`&&@\romannumeral + \XINT_replicate #1\endcsname\XINT_eightrandomdigits +}% +\def\xintiiRandRangeAtoB{\romannumeral`&&@\xintiirandrangeAtoB}% +\def\xintiirandrangeAtoB#1% +{% + \expandafter\XINT_randrangeAtoB_a\romannumeral`&&@#1\xint: +}% +\def\XINT_randrangeAtoB_a#1\xint:#2% +{% + \xintiiadd{\expandafter\XINT_randrange + \romannumeral0\xintiisub{#2}{#1}\xint:}% + {#1}% +}% +\def\xintiiRandRange{\romannumeral`&&@\xintiirandrange}% +\def\xintiirandrange#1% +{% + \expandafter\XINT_randrange\romannumeral`&&@#1\xint: +}% +\def\XINT_randrange #1% +{% + \xint_UDzerominusfork + #1-\XINT_randrange_err:empty + 0#1\XINT_randrange_err:empty + 0-\XINT_randrange_a + \krof #1% +}% +\def\XINT_randrange_err:empty#1\xint: +{% + \XINT_expandableerror{Empty range for randrange.} 0% +}% +\def\XINT_randrange_a #1\xint: +{% + \expandafter\XINT_randrange_b\romannumeral0\xintlength{#1}.#1\xint: +}% +\def\XINT_randrange_b #1.% +{% + \ifnum#1<\xint_c_x\xint_dothis{\the\numexpr\XINT_uniformdeviate{}}\fi + \xint_orthat{\XINT_randrange_c #1.}% +}% +\def\XINT_randrange_c #1.#2#3#4#5#6#7#8#9% +{% + \expandafter\XINT_randrange_d + \the\numexpr\expandafter\XINT_uniformdeviate\expandafter + {\expandafter}\the\numexpr\xint_c_i+#2#3#4#5#6#7#8#9\xint:\xint: + #2#3#4#5#6#7#8#9\xint:#1\xint: +}% +\def\XINT_randrange_d #1\xint:#2\xint: +{% + \ifnum#1=\xint_c_\xint_dothis\XINT_randrange_Z\fi + \ifnum#1=#2 \xint_dothis\XINT_randrange_A\fi + \xint_orthat\XINT_randrange_e #1\xint: +}% +\def\XINT_randrange_e #1\xint:#2\xint:#3\xint: +{% + \the\numexpr#1\expandafter\relax + \romannumeral0\xintrandomdigits{#2-\xint_c_viii}% +}% +\def\XINT_randrange_Z 0\xint:#1\xint:#2\xint: +{% + \xintinum{\xintRandomDigits{#1-\xint_c_viii}}% +}% +\def\XINT_randrange_A #1\xint:#2\xint:#3\xint: +{% + \expandafter\XINT_randrange_B + \romannumeral0\xintrandomdigits{#2-\xint_c_viii}\xint: + #3\xint:#2.#1\xint: +}% +\def\XINT_randrange_B #1\xint:#2\xint:#3.#4\xint: +{% + \xintiiifLt{#1}{#2}{\XINT_randrange_E}{\XINT_randrange_again}% + #4#1\xint:#3.#4#2\xint: +}% +\def\XINT_randrange_E #1\xint:#2\xint:{ #1}% +\def\XINT_randrange_again #1\xint:{\XINT_randrange_c}% +\ifdefined\xint_texuniformdeviate +\else + \def\xintrandomdigits#1% + {% + \XINT_expandableerror + {No uniformdeviate at engine level, returning 0.} 0% + }% + \let\xintXRandomDigits\xintRandomDigits + \def\XINT_randrange#1\xint: + {% + \XINT_expandableerror + {No uniformdeviate at engine level, returning 0.} 0% + }% +\fi \XINT_restorecatcodes_endinput% \endinput %% |