summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/xint/xintfrac.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/generic/xint/xintfrac.sty')
-rw-r--r--Master/texmf-dist/tex/generic/xint/xintfrac.sty457
1 files changed, 242 insertions, 215 deletions
diff --git a/Master/texmf-dist/tex/generic/xint/xintfrac.sty b/Master/texmf-dist/tex/generic/xint/xintfrac.sty
index acebf35e6f7..ebe00b574bc 100644
--- a/Master/texmf-dist/tex/generic/xint/xintfrac.sty
+++ b/Master/texmf-dist/tex/generic/xint/xintfrac.sty
@@ -21,7 +21,7 @@
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%%----------------------------------------------------------------
-%% The xint bundle (version 1.09h of November 28, 2013)
+%% The xint bundle (version 1.09i of December 18, 2013)
%% xintfrac: Expandable operations on fractions
%% Copyright (C) 2013 by Jean-Francois Burnol
%%----------------------------------------------------------------
@@ -103,7 +103,7 @@
\XINTsetupcatcodes%
\XINT_providespackage
\ProvidesPackage{xintfrac}%
- [2013/11/28 v1.09h Expandable operations on fractions (jfB)]%
+ [2013/12/18 v1.09i Expandable operations on fractions (jfB)]%
\chardef\xint_c_vi 6
\chardef\xint_c_vii 7
\chardef\xint_c_xviii 18
@@ -149,7 +149,7 @@
}%
\def\XINT_outfrac #1#2#3%
{%
- \ifcase\XINT_Sgn{#3}
+ \ifcase\XINT__Sgn #3\Z
\expandafter \XINT_outfrac_divisionbyzero
\or
\expandafter \XINT_outfrac_P
@@ -159,11 +159,11 @@
{#2}{#3}[#1]%
}%
\def\XINT_outfrac_divisionbyzero #1#2{\xintError:DivisionByZero\space #1/0}%
-\def\XINT_outfrac_P #1#2%
+\edef\XINT_outfrac_P #1#2%
{%
- \ifcase\XINT_Sgn{#1}
- \expandafter\XINT_outfrac_Zero
- \fi
+ \noexpand\if0\noexpand\XINT_Sgn #1\noexpand\Z
+ \noexpand\expandafter\noexpand\XINT_outfrac_Zero
+ \noexpand\fi
\space #1/#2%
}%
\def\XINT_outfrac_Zero #1[#2]{ 0/1[0]}%
@@ -184,8 +184,8 @@
\def\XINT_infrac_ #1[#2#3]#4\Z
{%
\xint_UDwfork
- #2\dummy \XINT_infrac_A
- \W\dummy \XINT_infrac_B
+ #2\XINT_infrac_A
+ \W\XINT_infrac_B
\krof
#1[#2#3]#4%
}%
@@ -201,8 +201,8 @@
\def\XINT_infrac_BC #1/#2#3\Z
{%
\xint_UDwfork
- #2\dummy \XINT_infrac_BCa
- \W\dummy {\expandafter\XINT_infrac_BCb \romannumeral-`0#2}%
+ #2\XINT_infrac_BCa
+ \W{\expandafter\XINT_infrac_BCb \romannumeral-`0#2}%
\krof
#3\Z #1\Z
}%
@@ -212,16 +212,16 @@
\def\XINT_frac #1/#2#3\Z
{%
\xint_UDwfork
- #2\dummy \XINT_frac_A
- \W\dummy {\expandafter\XINT_frac_U \romannumeral-`0#2}%
+ #2\XINT_frac_A
+ \W{\expandafter\XINT_frac_U \romannumeral-`0#2}%
\krof
#3e\W\Z #1e\W\Z
}%
\def\XINT_frac_U #1e#2#3\Z
{%
\xint_UDwfork
- #2\dummy \XINT_frac_Ua
- \W\dummy {\XINT_frac_Ub #2}%
+ #2\XINT_frac_Ua
+ \W{\XINT_frac_Ub #2}%
\krof
#3\Z #1\Z
}%
@@ -230,8 +230,8 @@
\def\XINT_frac_B #1.#2#3\Z
{%
\xint_UDwfork
- #2\dummy \XINT_frac_Ba
- \W\dummy {\XINT_frac_Bb #2}%
+ #2\XINT_frac_Ba
+ \W{\XINT_frac_Bb #2}%
\krof
#3\Z #1\Z
}%
@@ -245,8 +245,8 @@
\def\XINT_frac_T #1#2#3#4e#5#6\Z
{%
\xint_UDwfork
- #5\dummy \XINT_frac_Ta
- \W\dummy {\XINT_frac_Tb #5}%
+ #5\XINT_frac_Ta
+ \W{\XINT_frac_Tb #5}%
\krof
#6\Z #4\Z {#1}{#2}{#3}%
}%
@@ -255,8 +255,8 @@
\def\XINT_frac_C #1.#2#3\Z
{%
\xint_UDwfork
- #2\dummy \XINT_frac_Ca
- \W\dummy {\XINT_frac_Cb #2}%
+ #2\XINT_frac_Ca
+ \W{\XINT_frac_Cb #2}%
\krof
#3\Z #1\Z
}%
@@ -284,14 +284,14 @@
\def\XINT_frac_F #1%
{%
\xint_UDzerominusfork
- #1-\dummy \XINT_frac_Gdivisionbyzero
- 0#1\dummy \XINT_frac_Gneg
- 0-\dummy {\XINT_frac_Gpos #1}%
+ #1-\XINT_frac_Gdivisionbyzero
+ 0#1\XINT_frac_Gneg
+ 0-{\XINT_frac_Gpos #1}%
\krof
}%
-\def\XINT_frac_Gdivisionbyzero #1\Z #2#3%
+\edef\XINT_frac_Gdivisionbyzero #1\Z #2#3%
{%
- \xintError:DivisionByZero\space {0}{#2}{0}%
+ \noexpand\xintError:DivisionByZero\space {0}{#2}{0}%
}%
\def\XINT_frac_Gneg #1\Z #2#3%
{%
@@ -426,7 +426,7 @@
}%
\def\XINT_rawz #1%
{%
- \ifcase\XINT_Sgn {#1}
+ \ifcase\XINT__Sgn #1\Z
\expandafter\XINT_rawz_Ba
\or
\expandafter\XINT_rawz_A
@@ -452,7 +452,7 @@
}%
\def\XINT_numer #1%
{%
- \ifcase\XINT_Sgn {#1}
+ \ifcase\XINT__Sgn #1\Z
\expandafter\XINT_numer_B
\or
\expandafter\XINT_numer_A
@@ -470,7 +470,7 @@
}%
\def\XINT_denom #1%
{%
- \ifcase\XINT_Sgn {#1}
+ \ifcase\XINT__Sgn #1\Z
\expandafter\XINT_denom_B
\or
\expandafter\XINT_denom_A
@@ -492,23 +492,21 @@
{%
\xint_gob_til_zero #1\XINT_fracfrac_C 0\XINT_fracfrac_D {10^{#1#2}}%
}%
-\def\XINT_fracfrac_C #1#2#3#4#5%
+\def\XINT_fracfrac_C 0\XINT_fracfrac_D #1#2#3%
{%
- \ifcase\XINT_isOne {#5}
- \or \xint_afterfi {\expandafter\xint_firstoftwo_andstop\xint_gobble_ii }%
+ \if1\XINT_isOne {#3}%
+ \xint_afterfi {\expandafter\xint_firstoftwo_afterstop\xint_gobble_ii }%
\fi
\space
- \frac {#4}{#5}%
+ \frac {#2}{#3}%
}%
\def\XINT_fracfrac_D #1#2#3%
{%
- \ifcase\XINT_isOne {#3}
- \or \XINT_fracfrac_E
- \fi
+ \if1\XINT_isOne {#3}\XINT_fracfrac_E\fi
\space
\frac {#2}{#3}#1%
}%
-\def\XINT_fracfrac_E \fi #1#2#3#4{\fi \space #3\cdot }%
+\def\XINT_fracfrac_E \fi\space\frac #1#2{\fi \space #1\cdot }%
\def\xintSignedFrac {\romannumeral0\xintsignedfrac }%
\def\xintsignedfrac #1%
{%
@@ -521,8 +519,8 @@
\def\XINT_sgnfrac_b #1%
{%
\xint_UDsignfork
- #1\dummy \XINT_sgnfrac_N
- -\dummy {\XINT_sgnfrac_P #1}%
+ #1\XINT_sgnfrac_N
+ -{\XINT_sgnfrac_P #1}%
\krof
}%
\def\XINT_sgnfrac_P #1\Z #2%
@@ -531,7 +529,7 @@
}%
\def\XINT_sgnfrac_N
{%
- \expandafter\xint_minus_andstop\romannumeral0\XINT_sgnfrac_P
+ \expandafter\xint_minus_afterstop\romannumeral0\XINT_sgnfrac_P
}%
\def\xintFwOver {\romannumeral0\xintfwover }%
\def\xintfwover #1%
@@ -546,18 +544,14 @@
\catcode`^=11
\def\XINT_fwover_C #1#2#3#4#5%
{%
- \ifcase\XINT_isOne {#5}
- \xint_afterfi { {#4\over #5}}%
- \or
- \xint_afterfi { #4}%
+ \if0\XINT_isOne {#5}\xint_afterfi { {#4\over #5}}%
+ \else\xint_afterfi { #4}%
\fi
}%
\def\XINT_fwover_D #1#2#3%
{%
- \ifcase\XINT_isOne {#3}
- \xint_afterfi { {#2\over #3}}%
- \or
- \xint_afterfi { #2\cdot }%
+ \if0\XINT_isOne {#3}\xint_afterfi { {#2\over #3}}%
+ \else\xint_afterfi { #2\cdot }%
\fi
#1%
}%
@@ -573,8 +567,8 @@
\def\XINT_sgnfwover_b #1%
{%
\xint_UDsignfork
- #1\dummy \XINT_sgnfwover_N
- -\dummy {\XINT_sgnfwover_P #1}%
+ #1\XINT_sgnfwover_N
+ -{\XINT_sgnfwover_P #1}%
\krof
}%
\def\XINT_sgnfwover_P #1\Z #2%
@@ -583,7 +577,7 @@
}%
\def\XINT_sgnfwover_N
{%
- \expandafter\xint_minus_andstop\romannumeral0\XINT_sgnfwover_P
+ \expandafter\xint_minus_afterstop\romannumeral0\XINT_sgnfwover_P
}%
\def\xintREZ {\romannumeral0\xintrez }%
\def\xintrez
@@ -597,13 +591,13 @@
\def\XINT_rez_AB #1%
{%
\xint_UDzerominusfork
- #1-\dummy \XINT_rez_zero
- 0#1\dummy \XINT_rez_neg
- 0-\dummy {\XINT_rez_B #1}%
+ #1-\XINT_rez_zero
+ 0#1\XINT_rez_neg
+ 0-{\XINT_rez_B #1}%
\krof
}%
\def\XINT_rez_zero #1\Z #2#3{ 0/1[0]}%
-\def\XINT_rez_neg {\expandafter\xint_minus_andstop\romannumeral0\XINT_rez_B }%
+\def\XINT_rez_neg {\expandafter\xint_minus_afterstop\romannumeral0\XINT_rez_B }%
\def\XINT_rez_B #1\Z
{%
\expandafter\XINT_rez_C\romannumeral0\XINT_factortens {#1}%
@@ -627,6 +621,7 @@
{%
\expandafter\XINT_e_end\expandafter{\the\numexpr #1+#4}{#2}{#3}%
}%
+\def\XINT_e_end #1#2#3{ #2/#3[#1]}%
\def\xintfE {\romannumeral0\xintfe }%
\def\xintfe #1%
{%
@@ -636,8 +631,51 @@
{%
\expandafter\XINT_e_end\expandafter{\the\numexpr #1+\xintNum{#4}}{#2}{#3}%
}%
-\def\XINT_e_end #1#2#3{ #2/#3[#1]}%
-\let\XINTinFloatfE\xintfE
+\def\xintFloatE {\romannumeral0\xintfloate }%
+\def\xintfloate #1{\XINT_floate_chkopt #1\Z }%
+\def\XINT_floate_chkopt #1%
+{%
+ \ifx [#1\expandafter\XINT_floate_opt
+ \else\expandafter\XINT_floate_noopt
+ \fi #1%
+}%
+\def\XINT_floate_noopt #1\Z
+{%
+ \expandafter\XINT_floate_a\expandafter\XINTdigits
+ \romannumeral0\XINT_infrac {#1}%
+}%
+\def\XINT_floate_opt [\Z #1]#2%
+{%
+ \expandafter\XINT_floate_a\expandafter
+ {\the\numexpr #1\expandafter}\romannumeral0\XINT_infrac {#2}%
+}%
+\def\XINT_floate_a #1#2#3#4#5%
+{%
+ \expandafter\expandafter\expandafter\XINT_float_a
+ \expandafter\xint_exchangetwo_keepbraces\expandafter
+ {\the\numexpr #2+#5}{#1}{#3}{#4}\XINT_float_Q
+}%
+\def\XINTinFloatfE {\romannumeral0\XINT_inFloatfE }%
+\def\XINT_inFloatfE [#1]#2%
+{%
+ \expandafter\XINT_infloatfe_a\expandafter
+ {\the\numexpr #1\expandafter}\romannumeral0\XINT_infrac {#2}%
+}%
+\def\XINT_infloatfe_a #1#2#3#4#5%
+{%
+ \expandafter\expandafter\expandafter\XINT_infloat_a
+ \expandafter\xint_exchangetwo_keepbraces\expandafter
+ {\the\numexpr #2+\xintNum{#5}}{#1}{#3}{#4}\XINT_infloat_Q
+}%
+\def\xintiE {\romannumeral0\xintie }% for \xintiiexpr only
+\def\xintie #1%
+{%
+ \expandafter\XINT_ie \romannumeral0\XINT_infrac {#1}% allows 3.123e3
+}%
+\def\XINT_ie #1#2#3#4% assumes #3=1 and uses \xint_dsh with its \numexpr
+{%
+ \xint_dsh {#2}{0-(#1+#4)}% could have \xintNum{#4} for a bit more general
+}%
\def\xintIrr {\romannumeral0\xintirr }%
\def\xintirr #1%
{%
@@ -645,27 +683,27 @@
}%
\def\XINT_irr_start #1#2/#3\Z
{%
- \ifcase\XINT_isOne {#3}
+ \if0\XINT_isOne {#3}%
\xint_afterfi
{\xint_UDsignfork
- #1\dummy \XINT_irr_negative
- -\dummy {\XINT_irr_nonneg #1}%
+ #1\XINT_irr_negative
+ -{\XINT_irr_nonneg #1}%
\krof}%
- \or
+ \else
\xint_afterfi{\XINT_irr_denomisone #1}%
\fi
#2\Z {#3}%
}%
\def\XINT_irr_denomisone #1\Z #2{ #1/1}% changed in 1.08
-\def\XINT_irr_negative #1\Z #2{\XINT_irr_D #1\Z #2\Z \xint_minus_andstop}%
+\def\XINT_irr_negative #1\Z #2{\XINT_irr_D #1\Z #2\Z \xint_minus_afterstop}%
\def\XINT_irr_nonneg #1\Z #2{\XINT_irr_D #1\Z #2\Z \space}%
\def\XINT_irr_D #1#2\Z #3#4\Z
{%
\xint_UDzerosfork
- #3#1\dummy \XINT_irr_indeterminate
- #30\dummy \XINT_irr_divisionbyzero
- #10\dummy \XINT_irr_zero
- 00\dummy \XINT_irr_loop_a
+ #3#1\XINT_irr_indeterminate
+ #30\XINT_irr_divisionbyzero
+ #10\XINT_irr_zero
+ 00\XINT_irr_loop_a
\krof
{#3#4}{#1#2}{#3#4}{#1#2}%
}%
@@ -698,20 +736,19 @@
\def\XINT_irr_finish #1#2#3{#3#1/#2}% changed in 1.08
\def\xintNum {\romannumeral0\xintnum }%
\def\xintnum #1{\expandafter\XINT_intcheck\romannumeral0\xintirr {#1}\Z }%
-\def\XINT_intcheck #1/#2\Z
+\edef\XINT_intcheck #1/#2\Z
{%
- \ifcase\XINT_isOne {#2}
- \xintError:NotAnInteger
- \fi\space #1%
+ \noexpand\if 0\noexpand\XINT_isOne {#2}\noexpand\xintError:NotAnInteger
+ \noexpand\fi\space #1%
}%
\def\xintifInt {\romannumeral0\xintifint }%
\def\xintifint #1{\expandafter\XINT_ifint\romannumeral0\xintirr {#1}\Z }%
\def\XINT_ifint #1/#2\Z
{%
\if\XINT_isOne {#2}1%
- \xint_afterfi{\expandafter\space\xint_firstoftwo}%
+ \expandafter\xint_firstoftwo_afterstop
\else
- \xint_afterfi{\expandafter\space\xint_secondoftwo}%
+ \expandafter\xint_secondoftwo_afterstop
\fi
}%
\def\xintJrr {\romannumeral0\xintjrr }%
@@ -721,27 +758,26 @@
}%
\def\XINT_jrr_start #1#2/#3\Z
{%
- \ifcase\XINT_isOne {#3}
- \xint_afterfi
+ \if0\XINT_isOne {#3}\xint_afterfi
{\xint_UDsignfork
- #1\dummy \XINT_jrr_negative
- -\dummy {\XINT_jrr_nonneg #1}%
+ #1\XINT_jrr_negative
+ -{\XINT_jrr_nonneg #1}%
\krof}%
- \or
+ \else
\xint_afterfi{\XINT_jrr_denomisone #1}%
\fi
#2\Z {#3}%
}%
\def\XINT_jrr_denomisone #1\Z #2{ #1/1}% changed in 1.08
-\def\XINT_jrr_negative #1\Z #2{\XINT_jrr_D #1\Z #2\Z \xint_minus_andstop }%
+\def\XINT_jrr_negative #1\Z #2{\XINT_jrr_D #1\Z #2\Z \xint_minus_afterstop }%
\def\XINT_jrr_nonneg #1\Z #2{\XINT_jrr_D #1\Z #2\Z \space}%
\def\XINT_jrr_D #1#2\Z #3#4\Z
{%
\xint_UDzerosfork
- #3#1\dummy \XINT_jrr_indeterminate
- #30\dummy \XINT_jrr_divisionbyzero
- #10\dummy \XINT_jrr_zero
- 00\dummy \XINT_jrr_loop_a
+ #3#1\XINT_jrr_indeterminate
+ #30\XINT_jrr_divisionbyzero
+ #10\XINT_jrr_zero
+ 00\XINT_jrr_loop_a
\krof
{#3#4}{#1#2}1001%
}%
@@ -776,6 +812,30 @@
{%
\XINT_irr_finish {#3}{#4}%
}%
+\def\xintTFrac {\romannumeral0\xinttfrac }%
+\def\xinttfrac #1%
+ {\expandafter\XINT_tfrac_fork\romannumeral0\xintrawwithzeros {#1}\Z }%
+\def\XINT_tfrac_fork #1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_tfrac_zero
+ 0#1\XINT_tfrac_N
+ 0-{\XINT_tfrac_P #1}%
+ \krof
+}%
+\def\XINT_tfrac_zero #1\Z { 0/1[0]}%
+\def\XINT_tfrac_N {\expandafter\XINT_opp\romannumeral0\XINT_tfrac_P }%
+\def\XINT_tfrac_P #1/#2\Z
+{%
+ \expandafter\XINT_rez_AB\romannumeral0\xintiirem{#1}{#2}\Z {0}{#2}%
+}%
+\def\XINTinFloatFrac {\romannumeral0\XINT_inFloatFrac }%
+\def\XINT_inFloatFrac [#1]#2%
+{%
+ \expandafter\XINT_infloatfrac_a\expandafter
+ {\romannumeral0\xinttfrac{#2}}{#1}%
+}%
+\def\XINT_infloatfrac_a #1#2{\XINT_inFloat [#2]{#1}}%
\def\xintTrunc {\romannumeral0\xinttrunc }%
\def\xintiTrunc {\romannumeral0\xintitrunc }%
\def\xinttrunc #1%
@@ -810,7 +870,7 @@
\def\XINT_trunc_iszero #1#2#3#4#5{ 0\Z 0}%
\def\XINT_trunc_B #1%
{%
- \ifcase\XINT_Sgn {#1}
+ \ifcase\XINT__Sgn #1\Z
\expandafter\XINT_trunc_D
\or
\expandafter\XINT_trunc_D
@@ -833,16 +893,16 @@
\def\XINT_trunc_E #1#2\Z #3#4\Z
{%
\xint_UDsignsfork
- #1#3\dummy \XINT_trunc_minusminus
- #1-\dummy {\XINT_trunc_minusplus #3}%
- #3-\dummy {\XINT_trunc_plusminus #1}%
- --\dummy {\XINT_trunc_plusplus #3#1}%
+ #1#3\XINT_trunc_minusminus
+ #1-{\XINT_trunc_minusplus #3}%
+ #3-{\XINT_trunc_plusminus #1}%
+ --{\XINT_trunc_plusplus #3#1}%
\krof
{#4}{#2}%
}%
\def\XINT_trunc_minusminus #1#2{\xintiiquo {#1}{#2}\Z \space}%
-\def\XINT_trunc_minusplus #1#2#3{\xintiiquo {#1#2}{#3}\Z \xint_minus_andstop}%
-\def\XINT_trunc_plusminus #1#2#3{\xintiiquo {#2}{#1#3}\Z \xint_minus_andstop}%
+\def\XINT_trunc_minusplus #1#2#3{\xintiiquo {#1#2}{#3}\Z \xint_minus_afterstop}%
+\def\XINT_trunc_plusminus #1#2#3{\xintiiquo {#2}{#1#3}\Z \xint_minus_afterstop}%
\def\XINT_trunc_plusplus #1#2#3#4{\xintiiquo {#1#3}{#2#4}\Z \space}%
\def\XINT_itrunc_G #1#2\Z #3#4%
{%
@@ -944,12 +1004,11 @@
\def\XINT_round:_a {\XINT_round:_b {}}%
\def\XINT_round:_b #1#2,%
{\expandafter\XINT_round:_c\romannumeral-`0#2,{#1}}%
-\def\XINT_round:_c #1{\if #1,\expandafter\XINT_round:_f
+\def\XINT_round:_c #1{\if #1,\expandafter\XINT_:_f
\else\expandafter\XINT_round:_d\fi #1}%
\def\XINT_round:_d #1,%
{\expandafter\XINT_round:_e\romannumeral0\xintiround 0{#1},}%
\def\XINT_round:_e #1,#2{\XINT_round:_b {#2,#1}}%
-\def\XINT_round:_f ,#1#2^{\xint_gobble_i #1}%
\mathchardef\XINTdigits 16
\def\xintDigits #1#2%
{\afterassignment \xint_gobble_i \mathchardef\XINTdigits=}%
@@ -980,13 +1039,13 @@
\def\XINT_float_fork #1%
{%
\xint_UDzerominusfork
- #1-\dummy \XINT_float_zero
- 0#1\dummy \XINT_float_J
- 0-\dummy {\XINT_float_K #1}%
+ #1-\XINT_float_zero
+ 0#1\XINT_float_J
+ 0-{\XINT_float_K #1}%
\krof
}%
\def\XINT_float_zero #1\Z #2#3#4#5{ 0.e0}%
-\def\XINT_float_J {\expandafter\xint_minus_andstop\romannumeral0\XINT_float_K }%
+\def\XINT_float_J {\expandafter\xint_minus_afterstop\romannumeral0\XINT_float_K }%
\def\XINT_float_K #1\Z #2% #1=A, #2=P, #3=n, #4=B
{%
\expandafter\XINT_float_L\expandafter
@@ -1131,12 +1190,11 @@
\def\XINT_float:_a {\XINT_float:_b {}}%
\def\XINT_float:_b #1#2,%
{\expandafter\XINT_float:_c\romannumeral-`0#2,{#1}}%
-\def\XINT_float:_c #1{\if #1,\expandafter\XINT_float:_f
+\def\XINT_float:_c #1{\if #1,\expandafter\XINT_:_f
\else\expandafter\XINT_float:_d\fi #1}%
\def\XINT_float:_d #1,%
{\expandafter\XINT_float:_e\romannumeral0\xintfloat {#1},}%
\def\XINT_float:_e #1,#2{\XINT_float:_b {#2,#1}}%
-\def\XINT_float:_f ,#1#2^{\xint_gobble_i #1}%
\def\XINTinFloat {\romannumeral0\XINT_inFloat }%
\def\XINT_inFloat [#1]#2%
{%
@@ -1151,12 +1209,12 @@
\def\XINT_infloat_fork #1%
{%
\xint_UDzerominusfork
- #1-\dummy \XINT_infloat_zero
- 0#1\dummy \XINT_infloat_J
- 0-\dummy {\XINT_float_K #1}%
+ #1-\XINT_infloat_zero
+ 0#1\XINT_infloat_J
+ 0-{\XINT_float_K #1}%
\krof
}%
-\def\XINT_infloat_zero #1\Z #2#3#4#5{ 0[0]}%
+\def\XINT_infloat_zero #1\Z #2#3#4#5{ 0/1[0]}%
\def\XINT_infloat_J {\expandafter-\romannumeral0\XINT_float_K }%
\def\XINT_infloat_Q #1%
{%
@@ -1309,11 +1367,10 @@
\def\xintSum:csv #1{\expandafter\XINT_sum:_a\romannumeral-`0#1,,^}%
\def\XINT_sum:_a {\XINT_sum:_b {0/1[0]}}%
\def\XINT_sum:_b #1#2,{\expandafter\XINT_sum:_c\romannumeral-`0#2,{#1}}%
-\def\XINT_sum:_c #1{\if #1,\expandafter\XINT_sum:_e
+\def\XINT_sum:_c #1{\if #1,\expandafter\XINT_:_e
\else\expandafter\XINT_sum:_d\fi #1}%
\def\XINT_sum:_d #1,#2{\expandafter\XINT_sum:_b\expandafter
{\romannumeral0\xintadd {#2}{#1}}}%
-\def\XINT_sum:_e ,#1#2^{#1}% allows empty list
\def\xintMul {\romannumeral0\xintmul }%
\def\xintmul #1%
{%
@@ -1351,16 +1408,13 @@
\def\XINT_fpow_fork #1#2\Z
{%
\xint_UDzerominusfork
- #1-\dummy \XINT_fpow_zero
- 0#1\dummy \XINT_fpow_neg
- 0-\dummy {\XINT_fpow_pos #1}%
+ #1-\XINT_fpow_zero
+ 0#1\XINT_fpow_neg
+ 0-{\XINT_fpow_pos #1}%
\krof
{#2}%
}%
-\def\XINT_fpow_zero #1#2#3#4%
-{%
- \space 1/1[0]%
-}%
+\def\XINT_fpow_zero #1#2#3#4{ 1/1[0]}%
\def\XINT_fpow_pos #1#2#3#4#5%
{%
\expandafter\XINT_fpow_pos_A\expandafter
@@ -1407,11 +1461,10 @@
\def\xintPrd:csv #1{\expandafter\XINT_prd:_a\romannumeral-`0#1,,^}%
\def\XINT_prd:_a {\XINT_prd:_b {1/1[0]}}%
\def\XINT_prd:_b #1#2,{\expandafter\XINT_prd:_c\romannumeral-`0#2,{#1}}%
-\def\XINT_prd:_c #1{\if #1,\expandafter\XINT_prd:_e
+\def\XINT_prd:_c #1{\if #1,\expandafter\XINT_:_e
\else\expandafter\XINT_prd:_d\fi #1}%
\def\XINT_prd:_d #1,#2{\expandafter\XINT_prd:_b\expandafter
{\romannumeral0\xintmul {#2}{#1}}}%
-\def\XINT_prd:_e ,#1#2^{#1}% allows empty list
\def\xintDiv {\romannumeral0\xintdiv }%
\def\xintdiv #1%
{%
@@ -1434,8 +1487,9 @@
\def\XINT_fdiv_C #1#2{\XINT_outfrac {#2}{#1}}%
\def\xintIsOne {\romannumeral0\xintisone }%
\def\xintisone #1{\expandafter\XINT_fracisone
- \romannumeral0\xintrawwithzeros{#1}\Z }%
-\def\XINT_fracisone #1/#2\Z{\xintsgnfork{\XINT_Cmp {#1}{#2}}{0}{1}{0}}%
+ \romannumeral0\xintrawwithzeros{#1}\Z }%
+\def\XINT_fracisone #1/#2\Z
+ {\if0\XINT_Cmp {#1}{#2}\xint_afterfi{ 1}\else\xint_afterfi{ 0}\fi}%
\def\xintGeq {\romannumeral0\xintgeq }%
\def\xintgeq #1%
{%
@@ -1467,15 +1521,15 @@
}%
\def\XINT_fgeq_D #1#2#3%
{%
- \xintSgnFork
- {\xintiiSgn{\the\numexpr #2+\xintLength{#3}-\xintLength{#1}\relax}}%
+ \expandafter\XINT__SgnFork\romannumeral-`0\expandafter\XINT__Sgn
+ \the\numexpr #2+\xintLength{#3}-\xintLength{#1}\relax\Z
{ 0}{\XINT_fgeq_E #2\Z {#3}{#1}}{ 1}%
}%
\def\XINT_fgeq_E #1%
{%
\xint_UDsignfork
- #1\dummy \XINT_fgeq_Fd
- -\dummy {\XINT_fgeq_Fn #1}%
+ #1\XINT_fgeq_Fd
+ -{\XINT_fgeq_Fn #1}%
\krof
}%
\def\XINT_fgeq_Fd #1\Z #2#3%
@@ -1501,15 +1555,15 @@
\def\XINT_fmax_A #1#2/#3[#4]#5#6/#7[#8]%
{%
\xint_UDsignsfork
- #1#5\dummy \XINT_fmax_minusminus
- -#5\dummy \XINT_fmax_firstneg
- #1-\dummy \XINT_fmax_secondneg
- --\dummy \XINT_fmax_nonneg_a
+ #1#5\XINT_fmax_minusminus
+ -#5\XINT_fmax_firstneg
+ #1-\XINT_fmax_secondneg
+ --\XINT_fmax_nonneg_a
\krof
#1#5{#2/#3[#4]}{#6/#7[#8]}%
}%
\def\XINT_fmax_minusminus --%
- {\expandafter\xint_minus_andstop\romannumeral0\XINT_fmin_nonneg_b }%
+ {\expandafter\xint_minus_afterstop\romannumeral0\XINT_fmin_nonneg_b }%
\def\XINT_fmax_firstneg #1-#2#3{ #1#2}%
\def\XINT_fmax_secondneg -#1#2#3{ #1#3}%
\def\XINT_fmax_nonneg_a #1#2#3#4%
@@ -1518,9 +1572,9 @@
}%
\def\XINT_fmax_nonneg_b #1#2%
{%
- \ifcase\romannumeral0\XINT_fgeq_A #1#2
- \xint_afterfi{ #1}%
- \or \xint_afterfi{ #2}%
+ \if0\romannumeral0\XINT_fgeq_A #1#2%
+ \xint_afterfi{ #1}%
+ \else \xint_afterfi{ #2}%
\fi
}%
\def\xintMaxof {\romannumeral0\xintmaxof }%
@@ -1535,10 +1589,9 @@
\def\XINT_maxof_e #1\Z #2\Z { #2}%
\def\xintMaxof:csv #1{\expandafter\XINT_maxof:_b\romannumeral-`0#1,,}%
\def\XINT_maxof:_b #1,#2,{\expandafter\XINT_maxof:_c\romannumeral-`0#2,{#1},}%
-\def\XINT_maxof:_c #1{\if #1,\expandafter\XINT_maxof:_e
+\def\XINT_maxof:_c #1{\if #1,\expandafter\XINT_of:_e
\else\expandafter\XINT_maxof:_d\fi #1}%
\def\XINT_maxof:_d #1,{\expandafter\XINT_maxof:_b\romannumeral0\xintmax {#1}}%
-\def\XINT_maxof:_e ,#1,{#1}%
\def\XINTinFloatMaxof {\romannumeral0\XINTinfloatmaxof }%
\def\XINTinfloatmaxof #1{\expandafter\XINT_flmaxof_a\romannumeral-`0#1\relax }%
\def\XINT_flmaxof_a #1{\expandafter\XINT_flmaxof_b
@@ -1556,12 +1609,11 @@
\romannumeral0\XINT_inFloat [\XINTdigits]{#1},}%
\def\XINT_flmaxof:_b #1,#2,%
{\expandafter\XINT_flmaxof:_c\romannumeral-`0#2,{#1},}%
-\def\XINT_flmaxof:_c #1{\if #1,\expandafter\XINT_flmaxof:_e
+\def\XINT_flmaxof:_c #1{\if #1,\expandafter\XINT_of:_e
\else\expandafter\XINT_flmaxof:_d\fi #1}%
\def\XINT_flmaxof:_d #1,%
{\expandafter\XINT_flmaxof:_b\romannumeral0\xintmax
{\XINTinFloat [\XINTdigits]{#1}}}%
-\def\XINT_flmaxof:_e ,#1,{#1}%
\def\xintMin {\romannumeral0\xintmin }%
\def\xintmin #1%
{%
@@ -1574,15 +1626,15 @@
\def\XINT_fmin_A #1#2/#3[#4]#5#6/#7[#8]%
{%
\xint_UDsignsfork
- #1#5\dummy \XINT_fmin_minusminus
- -#5\dummy \XINT_fmin_firstneg
- #1-\dummy \XINT_fmin_secondneg
- --\dummy \XINT_fmin_nonneg_a
+ #1#5\XINT_fmin_minusminus
+ -#5\XINT_fmin_firstneg
+ #1-\XINT_fmin_secondneg
+ --\XINT_fmin_nonneg_a
\krof
#1#5{#2/#3[#4]}{#6/#7[#8]}%
}%
\def\XINT_fmin_minusminus --%
- {\expandafter\xint_minus_andstop\romannumeral0\XINT_fmax_nonneg_b }%
+ {\expandafter\xint_minus_afterstop\romannumeral0\XINT_fmax_nonneg_b }%
\def\XINT_fmin_firstneg #1-#2#3{ -#3}%
\def\XINT_fmin_secondneg -#1#2#3{ -#2}%
\def\XINT_fmin_nonneg_a #1#2#3#4%
@@ -1591,9 +1643,9 @@
}%
\def\XINT_fmin_nonneg_b #1#2%
{%
- \ifcase\romannumeral0\XINT_fgeq_A #1#2
- \xint_afterfi{ #2}%
- \or \xint_afterfi{ #1}%
+ \if0\romannumeral0\XINT_fgeq_A #1#2%
+ \xint_afterfi{ #2}%
+ \else \xint_afterfi{ #1}%
\fi
}%
\def\xintMinof {\romannumeral0\xintminof }%
@@ -1608,10 +1660,9 @@
\def\XINT_minof_e #1\Z #2\Z { #2}%
\def\xintMinof:csv #1{\expandafter\XINT_minof:_b\romannumeral-`0#1,,}%
\def\XINT_minof:_b #1,#2,{\expandafter\XINT_minof:_c\romannumeral-`0#2,{#1},}%
-\def\XINT_minof:_c #1{\if #1,\expandafter\XINT_minof:_e
+\def\XINT_minof:_c #1{\if #1,\expandafter\XINT_of:_e
\else\expandafter\XINT_minof:_d\fi #1}%
\def\XINT_minof:_d #1,{\expandafter\XINT_minof:_b\romannumeral0\xintmin {#1}}%
-\def\XINT_minof:_e ,#1,{#1}%
\def\XINTinFloatMinof {\romannumeral0\XINTinfloatminof }%
\def\XINTinfloatminof #1{\expandafter\XINT_flminof_a\romannumeral-`0#1\relax }%
\def\XINT_flminof_a #1{\expandafter\XINT_flminof_b
@@ -1629,12 +1680,11 @@
\romannumeral0\XINT_inFloat [\XINTdigits]{#1},}%
\def\XINT_flminof:_b #1,#2,%
{\expandafter\XINT_flminof:_c\romannumeral-`0#2,{#1},}%
-\def\XINT_flminof:_c #1{\if #1,\expandafter\XINT_flminof:_e
+\def\XINT_flminof:_c #1{\if #1,\expandafter\XINT_of:_e
\else\expandafter\XINT_flminof:_d\fi #1}%
\def\XINT_flminof:_d #1,%
{\expandafter\XINT_flminof:_b\romannumeral0\xintmin
{\XINTinFloat [\XINTdigits]{#1}}}%
-\def\XINT_flminof:_e ,#1,{#1}%
\def\xintCmp {\romannumeral0\xintcmp }%
\def\xintcmp #1%
{%
@@ -1647,10 +1697,10 @@
\def\XINT_fcmp_A #1#2/#3[#4]#5#6/#7[#8]%
{%
\xint_UDsignsfork
- #1#5\dummy \XINT_fcmp_minusminus
- -#5\dummy \XINT_fcmp_firstneg
- #1-\dummy \XINT_fcmp_secondneg
- --\dummy \XINT_fcmp_nonneg_a
+ #1#5\XINT_fcmp_minusminus
+ -#5\XINT_fcmp_firstneg
+ #1-\XINT_fcmp_secondneg
+ --\XINT_fcmp_nonneg_a
\krof
#1#5{#2/#3[#4]}{#6/#7[#8]}%
}%
@@ -1660,10 +1710,10 @@
\def\XINT_fcmp_nonneg_a #1#2%
{%
\xint_UDzerosfork
- #1#2\dummy \XINT_fcmp_zerozero
- 0#2\dummy \XINT_fcmp_firstzero
- #10\dummy \XINT_fcmp_secondzero
- 00\dummy \XINT_fcmp_pos
+ #1#2\XINT_fcmp_zerozero
+ 0#2\XINT_fcmp_firstzero
+ #10\XINT_fcmp_secondzero
+ 00\XINT_fcmp_pos
\krof
#1#2%
}%
@@ -1688,15 +1738,15 @@
}%
\def\XINT_fcmp_D #1#2#3%
{%
- \xintSgnFork
- {\xintiiSgn{\the\numexpr #2+\xintLength{#3}-\xintLength{#1}\relax}}%
+ \expandafter\XINT__SgnFork\romannumeral-`0\expandafter\XINT__Sgn
+ \the\numexpr #2+\xintLength{#3}-\xintLength{#1}\relax\Z
{ -1}{\XINT_fcmp_E #2\Z {#3}{#1}}{ 1}%
}%
\def\XINT_fcmp_E #1%
{%
\xint_UDsignfork
- #1\dummy \XINT_fcmp_Fd
- -\dummy {\XINT_fcmp_Fn #1}%
+ #1\XINT_fcmp_Fd
+ -{\XINT_fcmp_Fn #1}%
\krof
}%
\def\XINT_fcmp_Fd #1\Z #2#3%
@@ -1710,34 +1760,12 @@
\expandafter\XINT_cmp_pre\expandafter
{\romannumeral0\XINT_dsx_addzerosnofuss {#1}{#2}}{#3}%
}%
-\def\xintAbs {\romannumeral0\xintabs }%
-\def\xintabs #1%
-{%
- \expandafter\xint_fabs\romannumeral0\XINT_infrac {#1}%
-}%
-\def\xint_fabs #1#2%
-{%
- \expandafter\XINT_outfrac\expandafter
- {\the\numexpr #1\expandafter}\expandafter
- {\romannumeral0\XINT_abs #2}%
-}%
-\def\xintOpp {\romannumeral0\xintopp }%
-\def\xintopp #1%
-{%
- \expandafter\xint_fopp\romannumeral0\XINT_infrac {#1}%
-}%
-\def\xint_fopp #1#2%
-{%
- \expandafter\XINT_outfrac\expandafter
- {\the\numexpr #1\expandafter}\expandafter
- {\romannumeral0\XINT_opp #2}%
-}%
-\def\xintSgn {\romannumeral0\xintsgn }%
-\def\xintsgn #1%
-{%
- \expandafter\xint_fsgn\romannumeral0\XINT_infrac {#1}%
-}%
-\def\xint_fsgn #1#2#3{\xintiisgn {#2}}%
+\def\xintAbs {\romannumeral0\xintabs }%
+\def\xintabs #1{\expandafter\XINT_abs\romannumeral0\xintraw {#1}}%
+\def\xintOpp {\romannumeral0\xintopp }%
+\def\xintopp #1{\expandafter\XINT_opp\romannumeral0\xintraw {#1}}%
+\def\xintSgn {\romannumeral0\xintsgn }%
+\def\xintsgn #1{\expandafter\XINT_sgn\romannumeral0\xintraw {#1}\Z }%
\def\xintFloatAdd {\romannumeral0\xintfloatadd }%
\def\xintfloatadd #1{\XINT_fladd_chkopt \xintfloat #1\Z }%
\def\XINTinFloatAdd {\romannumeral0\XINTinfloatadd }%
@@ -1871,14 +1899,13 @@
{\expandafter\XINT_floatsum_b\romannumeral0\XINTinfloatadd {#1}}%
\def\XINT_floatsum_e #1\Z #2\Z { #2}%
\def\XINTinFloatSum:csv #1{\expandafter\XINT_floatsum:_a\romannumeral-`0#1,,^}%
-\def\XINT_floatsum:_a {\XINT_floatsum:_b {0[0]}}% was 0/1[0] prior to 1.09h
+\def\XINT_floatsum:_a {\XINT_floatsum:_b {0/1[0]}}%
\def\XINT_floatsum:_b #1#2,%
{\expandafter\XINT_floatsum:_c\romannumeral-`0#2,{#1}}%
-\def\XINT_floatsum:_c #1{\if #1,\expandafter\XINT_floatsum:_e
+\def\XINT_floatsum:_c #1{\if #1,\expandafter\XINT_:_e
\else\expandafter\XINT_floatsum:_d\fi #1}%
\def\XINT_floatsum:_d #1,#2{\expandafter\XINT_floatsum:_b\expandafter
{\romannumeral0\XINTinfloatadd {#2}{#1}}}%
-\def\XINT_floatsum:_e ,#1#2^{#1}% allows empty list
\def\XINTinFloatPrd {\romannumeral0\XINTinfloatprd }%
\def\XINTinfloatprd #1{\expandafter\XINT_floatprd_a\romannumeral-`0#1\relax }%
\def\XINT_floatprd_a #1{\expandafter\XINT_floatprd_b
@@ -1891,14 +1918,13 @@
{\expandafter\XINT_floatprd_b\romannumeral0\XINTinfloatmul {#1}}%
\def\XINT_floatprd_e #1\Z #2\Z { #2}%
\def\XINTinFloatPred:csv #1{\expandafter\XINT_floatprd:_a\romannumeral-`0#1,,^}%
-\def\XINT_floatprd:_a {\XINT_floatprd:_b {1[0]}}% was 1/1[0] prior to 1.09h
+\def\XINT_floatprd:_a {\XINT_floatprd:_b {1/1[0]}}%
\def\XINT_floatprd:_b #1#2,%
{\expandafter\XINT_floatprd:_c\romannumeral-`0#2,{#1}}%
-\def\XINT_floatprd:_c #1{\if #1,\expandafter\XINT_floatprd:_e
+\def\XINT_floatprd:_c #1{\if #1,\expandafter\XINT_:_e
\else\expandafter\XINT_floatprd:_d\fi #1}%
\def\XINT_floatprd:_d #1,#2{\expandafter\XINT_floatprd:_b\expandafter
{\romannumeral0\XINTinfloatmul {#2}{#1}}}%
-\def\XINT_floatprd:_e ,#1#2^{#1}% allows empty list
\def\xintFloatPow {\romannumeral0\xintfloatpow}%
\def\xintfloatpow #1{\XINT_flpow_chkopt \xintfloat #1\Z }%
\def\XINTinFloatPow {\romannumeral0\XINTinfloatpow }%
@@ -1926,9 +1952,9 @@
\def\XINT_flpow_checkB_a #1%
{%
\xint_UDzerominusfork
- #1-\dummy \XINT_flpow_BisZero
- 0#1\dummy {\XINT_flpow_checkB_b 1}%
- 0-\dummy {\XINT_flpow_checkB_b 0#1}%
+ #1-\XINT_flpow_BisZero
+ 0#1{\XINT_flpow_checkB_b 1}%
+ 0-{\XINT_flpow_checkB_b 0#1}%
\krof
}%
\def\XINT_flpow_BisZero \Z #1#2#3{#3{1/1[0]}}%
@@ -1951,9 +1977,9 @@
\def\XINT_flpow_a #1%
{%
\xint_UDzerominusfork
- #1-\dummy \XINT_flpow_zero
- 0#1\dummy {\XINT_flpow_b 1}%
- 0-\dummy {\XINT_flpow_b 0#1}%
+ #1-\XINT_flpow_zero
+ 0#1{\XINT_flpow_b 1}%
+ 0-{\XINT_flpow_b 0#1}%
\krof
}%
\def\XINT_flpow_zero [#1]#2#3#4#5%
@@ -2027,15 +2053,15 @@
\expandafter\XINT_flpow_conclude_really\expandafter
{\the\numexpr\if #41 -\fi#3\expandafter}%
\xint_UDzerofork
- #4\dummy {{#2}}%
- 0\dummy {{1/#2}}%
+ #4{{#2}}%
+ 0{{1/#2}}%
\krof #1%
}%
\def\XINT_flpow_conclude_really #1#2#3#4%
{%
\xint_UDzerofork
- #3\dummy {#4{#2[#1]}}%
- 0\dummy {#4{-#2[#1]}}%
+ #3{#4{#2[#1]}}%
+ 0{#4{-#2[#1]}}%
\krof
}%
\def\xintFloatPower {\romannumeral0\xintfloatpower}%
@@ -2065,9 +2091,9 @@
\def\XINT_flpower_checkB_a #1%
{%
\xint_UDzerominusfork
- #1-\dummy \XINT_flpower_BisZero
- 0#1\dummy {\XINT_flpower_checkB_b 1}%
- 0-\dummy {\XINT_flpower_checkB_b 0#1}%
+ #1-\XINT_flpower_BisZero
+ 0#1{\XINT_flpower_checkB_b 1}%
+ 0-{\XINT_flpower_checkB_b 0#1}%
\krof
}%
\def\XINT_flpower_BisZero \Z #1#2#3{#3{1/1[0]}}%
@@ -2090,9 +2116,9 @@
\def\XINT_flpower_a #1%
{%
\xint_UDzerominusfork
- #1-\dummy \XINT_flpower_zero
- 0#1\dummy {\XINT_flpower_b 1}%
- 0-\dummy {\XINT_flpower_b 0#1}%
+ #1-\XINT_flpower_zero
+ 0#1{\XINT_flpower_b 1}%
+ 0-{\XINT_flpower_b 0#1}%
\krof
}%
\def\XINT_flpower_zero [#1]#2#3#4#5%
@@ -2115,11 +2141,12 @@
}%
\def\XINT_flpower_loop #1#2#3%
{%
- \ifcase\XINT_isOne {#2}
- \xint_afterfi{\expandafter\XINT_flpower_loop_x\expandafter
+ \if0\XINT_isOne {#2}\xint_afterfi
+ {\expandafter\XINT_flpower_loop_x\expandafter
{\romannumeral0\XINTinfloatmul [#1]{#3}{#3}}%
- {\romannumeral0\xintdivision {#2}{2}}}%
- \or \expandafter\XINT_flpow_loop_end
+ {\romannumeral0\xintdivision {#2}{2}}%
+ }%
+ \else\expandafter\XINT_flpow_loop_end
\fi
{#1}{{#3}}%
}%
@@ -2171,13 +2198,13 @@
\def\XINT_FL_sqrt_checkifzeroorneg #1%
{%
\xint_UDzerominusfork
- #1-\dummy \XINT_FL_sqrt_iszero
- 0#1\dummy \XINT_FL_sqrt_isneg
- 0-\dummy {\XINT_FL_sqrt_b #1}%
+ #1-\XINT_FL_sqrt_iszero
+ 0#1\XINT_FL_sqrt_isneg
+ 0-{\XINT_FL_sqrt_b #1}%
\krof
}%
-\def\XINT_FL_sqrt_iszero #1[#2]{0[0]}%
-\def\XINT_FL_sqrt_isneg #1[#2]{\xintError:RootOfNegative 0[0]}%
+\def\XINT_FL_sqrt_iszero #1[#2]{0/1[0]}%
+\def\XINT_FL_sqrt_isneg #1[#2]{\xintError:RootOfNegative 0/1[0]}%
\def\XINT_FL_sqrt_b #1[#2]%
{%
\ifodd #2
@@ -2290,9 +2317,9 @@
}%
\def\XINT_flsqrt_big_j #1%
{%
- \ifcase\XINT_Sgn {#1}
+ \if0\XINT_Sgn #1\Z
\expandafter \XINT_flsqrt_big_end_a
- \or \expandafter \XINT_flsqrt_big_k
+ \else \expandafter \XINT_flsqrt_big_k
\fi {#1}%
}%
\def\XINT_flsqrt_big_k #1#2#3%