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.sty151
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
%%