diff options
author | Karl Berry <karl@freefriends.org> | 2013-12-18 22:00:14 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2013-12-18 22:00:14 +0000 |
commit | e715b1673cfe57d1b73e0298497daa2ed19f17af (patch) | |
tree | 1903e5fa3cdef12995050bf0064966c1fa097713 /Master/texmf-dist/tex/generic/xint/xintfrac.sty | |
parent | dc42edf41fdf637675cb7d76876773c4ac5df883 (diff) |
xint (18dec13)
git-svn-id: svn://tug.org/texlive/trunk@32436 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/xint/xintfrac.sty')
-rw-r--r-- | Master/texmf-dist/tex/generic/xint/xintfrac.sty | 457 |
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% |