summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/xint/xintfrac.sty
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2016-12-13 22:25:04 +0000
committerKarl Berry <karl@freefriends.org>2016-12-13 22:25:04 +0000
commit62b7fc3dff794893474f93a768c95f26477d5450 (patch)
treecef9bef7df69304de695cca46f601a91b54c9ac5 /Master/texmf-dist/tex/generic/xint/xintfrac.sty
parenta80c437516ee0dae0c4ba2c6113e3dbcffbd5e7e (diff)
xint (13dec16)
git-svn-id: svn://tug.org/texlive/trunk@42698 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.sty980
1 files changed, 404 insertions, 576 deletions
diff --git a/Master/texmf-dist/tex/generic/xint/xintfrac.sty b/Master/texmf-dist/tex/generic/xint/xintfrac.sty
index 4ffec9ded36..496dbca7b9c 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 1.2h 2016/11/20
+%% The xint bundle 1.2i 2016/12/13
%% Copyright (C) 2013-2016 by Jean-Francois Burnol
%% xintfrac: Expandable operations on fractions
%% ---------------------------------------------------------------
@@ -70,7 +70,7 @@
\XINTsetupcatcodes% defined in xintkernel.sty
\XINT_providespackage
\ProvidesPackage{xintfrac}%
- [2016/11/20 1.2h Expandable operations on fractions (JFB)]%
+ [2016/12/13 1.2i Expandable operations on fractions (JFB)]%
\def\XINT_cntSgnFork #1%
{%
\ifcase #1\expandafter\xint_secondofthree
@@ -86,33 +86,14 @@
\def\XINT_flen #1#2#3%
{%
\expandafter\space
- \the\numexpr -1+\XINT_Abs {#1}+\XINT_Len {#2}+\XINT_Len {#3}\relax
-}%
-\def\XINT_lenrord_loop #1.#2#3#4#5#6#7#8#9%
-{%
- \xint_gob_til_W #9\XINT_lenrord_W\W
- \expandafter\XINT_lenrord_loop\the\numexpr #1+\xint_c_vii.{#9#8#7#6#5#4#3#2}%
-}%
-\def\XINT_lenrord_W\W\expandafter\XINT_lenrord_loop #1.#2#3\Z
-{%
- \expandafter\XINT_lenrord_X #1.#2\Z
-}%
-\def\XINT_lenrord_X #1.#2\Z
-{%
- \XINT_lenrord_Y #2\R\R\R\R\R\R\T {#1}%
-}%
-\def\XINT_lenrord_Y #1#2#3#4#5#6#7#8\T
-{%
- \xint_gob_til_W
- #7\XINT_lenrord_Z \xint_c_viii
- #6\XINT_lenrord_Z \xint_c_vii
- #5\XINT_lenrord_Z \xint_c_vi
- #4\XINT_lenrord_Z \xint_c_v
- #3\XINT_lenrord_Z \xint_c_iv
- #2\XINT_lenrord_Z \xint_c_iii
- \W\XINT_lenrord_Z \xint_c_ii \Z
+ \the\numexpr \XINT_abs#1+\xint_c_viii
+ \XINT_length_loop
+ #2#3\xint_relax\xint_relax\xint_relax\xint_relax
+ \xint_relax\xint_relax\xint_relax\xint_relax\xint_relax
+ \xint_c_i\xint_c_ii\xint_c_iii\xint_c_iv
+ \xint_c_v\xint_c_vi\xint_c_vii\xint_c_viii\xint_c_ix\xint_bye
+ \relax
}%
-\def\XINT_lenrord_Z #1#2\Z #3{\the\numexpr #3-#1.}%
\def\XINT_outfrac #1#2#3%
{%
\ifcase\XINT_cntSgn #3\Z
@@ -204,10 +185,13 @@
}%
\def\XINT_frac_gen_Bd #1.#2e#3e#4\XINT_Z
{%
- \expandafter\XINT_frac_gen_C\the\numexpr #3-\romannumeral0\expandafter
- \XINT_length_loop
- 0.#1\xint_relax\xint_relax\xint_relax\xint_relax
- \xint_relax\xint_relax\xint_relax\xint_relax\xint_bye~#2#1!%
+ \expandafter\XINT_frac_gen_C\the\numexpr #3-%
+ \numexpr\xint_c_ix\XINT_length_loop
+ #1\xint_relax\xint_relax\xint_relax\xint_relax
+ \xint_relax\xint_relax\xint_relax\xint_relax\xint_relax
+ \xint_c_i\xint_c_ii\xint_c_iii\xint_c_iv
+ \xint_c_v\xint_c_vi\xint_c_vii\xint_c_viii\xint_c_ix\xint_bye
+ ~#2#1!%
}%
\def\XINT_frac_gen_C #1!#2.#3%
{%
@@ -231,10 +215,12 @@
\def\XINT_frac_gen_Cc #1.#2~#3!#4e#5e#6\XINT_T
{%
\expandafter\XINT_frac_gen_F\the\numexpr #5-#2-%
- \romannumeral0\XINT_length_loop
- 0.#1\xint_relax\xint_relax\xint_relax\xint_relax
- \xint_relax\xint_relax\xint_relax\xint_relax\xint_bye\expandafter
- ~\romannumeral0\XINT_num_loop
+ \numexpr\xint_c_ix\XINT_length_loop
+ #1\xint_relax\xint_relax\xint_relax\xint_relax
+ \xint_relax\xint_relax\xint_relax\xint_relax\xint_relax
+ \xint_c_i\xint_c_ii\xint_c_iii\xint_c_iv
+ \xint_c_v\xint_c_vi\xint_c_vii\xint_c_viii\xint_c_ix\xint_bye
+ \relax\expandafter~\romannumeral0\XINT_num_loop
#3\xint_relax\xint_relax\xint_relax\xint_relax
\xint_relax\xint_relax\xint_relax\xint_relax\Z
~#4#1~%
@@ -364,96 +350,6 @@
\xint_bye\xint_bye\xint_bye\xint_bye
\xint_relax }{#1}%
}%
-\def\XINT_addm_A #1#2#3#4#5#6%
-{%
- \xint_gob_til_W #3\XINT_addm_az\W
- \XINT_addm_AB #1{#3#4#5#6}{#2}%
-}%
-\def\XINT_addm_az\W\XINT_addm_AB #1#2%
-{%
- \XINT_addm_AC_checkcarry #1%
-}%
-\def\XINT_addm_AB #1#2#3#4\W\X\Y\Z #5#6#7#8%
-{%
- \XINT_addm_ABE #1#2{#8#7#6#5}{#3}#4\W\X\Y\Z
-}%
-\def\XINT_addm_ABE #1#2#3#4#5#6%
-{%
- \expandafter\XINT_addm_ABEA\the\numexpr #1+10#5#4#3#2+#6.%
-}%
-\def\XINT_addm_ABEA #1#2#3.#4%
-{%
- \XINT_addm_A #2{#3#4}%
-}%
-\def\XINT_addm_AC_checkcarry #1%
-{%
- \xint_gob_til_zero #1\XINT_addm_AC_nocarry 0\XINT_addm_C
-}%
-\def\XINT_addm_AC_nocarry 0\XINT_addm_C #1#2\W\X\Y\Z
-{%
- \expandafter
- \xint_cleanupzeros_andstop
- \romannumeral0%
- \XINT_rord_main {}#2%
- \xint_relax
- \xint_bye\xint_bye\xint_bye\xint_bye
- \xint_bye\xint_bye\xint_bye\xint_bye
- \xint_relax
- #1%
-}%
-\def\XINT_addm_C #1#2#3#4#5%
-{%
- \xint_gob_til_W
- #5\XINT_addm_cw
- #4\XINT_addm_cx
- #3\XINT_addm_cy
- #2\XINT_addm_cz
- \W\XINT_addm_CD {#5#4#3#2}{#1}%
-}%
-\def\XINT_addm_CD #1%
-{%
- \expandafter\XINT_addm_CC\the\numexpr 1+10#1.%
-}%
-\def\XINT_addm_CC #1#2#3.#4%
-{%
- \XINT_addm_AC_checkcarry #2{#3#4}%
-}%
-\def\XINT_addm_cw
- #1\XINT_addm_cx
- #2\XINT_addm_cy
- #3\XINT_addm_cz
- \W\XINT_addm_CD
-{%
- \expandafter\XINT_addm_CDw\the\numexpr 1+#1#2#3.%
-}%
-\def\XINT_addm_CDw #1.#2#3\X\Y\Z
-{%
- \XINT_addm_end #1#3%
-}%
-\def\XINT_addm_cx
- #1\XINT_addm_cy
- #2\XINT_addm_cz
- \W\XINT_addm_CD
-{%
- \expandafter\XINT_addm_CDx\the\numexpr 1+#1#2.%
-}%
-\def\XINT_addm_CDx #1.#2#3\Y\Z
-{%
- \XINT_addm_end #1#3%
-}%
-\def\XINT_addm_cy
- #1\XINT_addm_cz
- \W\XINT_addm_CD
-{%
- \expandafter\XINT_addm_CDy\the\numexpr 1+#1.%
-}%
-\def\XINT_addm_CDy #1.#2#3\Z
-{%
- \XINT_addm_end #1#3%
-}%
-\def\XINT_addm_cz\W\XINT_addm_CD #1#2#3{\XINT_addm_end #1#3}%
-\edef\XINT_addm_end #1#2#3#4#5%
- {\noexpand\expandafter\space\noexpand\the\numexpr #1#2#3#4#5\relax}%
\def\xintRaw {\romannumeral0\xintraw }%
\def\xintraw
{%
@@ -484,22 +380,20 @@
\def\xintRawWithZeros {\romannumeral0\xintrawwithzeros }%
\def\xintrawwithzeros
{%
- \expandafter\XINT_rawz\romannumeral0\XINT_infrac
+ \expandafter\XINT_rawz_fork\romannumeral0\XINT_infrac
}%
-\def\XINT_rawz #1%
+\def\XINT_rawz_fork #1%
{%
- \ifcase\XINT_cntSgn #1\Z
+ \ifnum#1<\xint_c_
\expandafter\XINT_rawz_Ba
- \or
- \expandafter\XINT_rawz_A
\else
- \expandafter\XINT_rawz_Ba
+ \expandafter\XINT_rawz_A
\fi
- {#1}%
+ #1.%
}%
-\def\XINT_rawz_A #1#2#3{\xint_dsh {#2}{-#1}/#3}%
-\def\XINT_rawz_Ba #1#2#3{\expandafter\XINT_rawz_Bb
- \expandafter{\romannumeral0\xint_dsh {#3}{#1}}{#2}}%
+\def\XINT_rawz_A #1.#2#3{\XINT_dsx_addzeros{#1}#2;/#3}%
+\def\XINT_rawz_Ba -#1.#2#3{\expandafter\XINT_rawz_Bb
+ \expandafter{\romannumeral0\XINT_dsx_addzeros{#1}#3;}{#2}}%
\def\XINT_rawz_Bb #1#2{ #2/#1}%
\def\xintFloor {\romannumeral0\xintfloor }%
\def\xintfloor #1% devrais-je faire \xintREZ?
@@ -528,26 +422,24 @@
\fi
{#1}%
}%
-\def\XINT_numer_A #1#2#3{\xint_dsh {#2}{-#1}}%
+\def\XINT_numer_A #1#2#3{\XINT_dsx_addzeros{#1}#2;}%
\def\XINT_numer_B #1#2#3{ #2}%
\def\xintDenominator {\romannumeral0\xintdenominator }%
\def\xintdenominator
{%
- \expandafter\XINT_denom\romannumeral0\XINT_infrac
+ \expandafter\XINT_denom_fork\romannumeral0\XINT_infrac
}%
-\def\XINT_denom #1%
+\def\XINT_denom_fork #1%
{%
- \ifcase\XINT_cntSgn #1\Z
+ \ifnum#1<\xint_c_
\expandafter\XINT_denom_B
- \or
- \expandafter\XINT_denom_A
\else
- \expandafter\XINT_denom_B
+ \expandafter\XINT_denom_A
\fi
- {#1}%
+ #1.%
}%
-\def\XINT_denom_A #1#2#3{ #3}%
-\def\XINT_denom_B #1#2#3{\xint_dsh {#3}{#1}}%
+\def\XINT_denom_A #1.#2#3{ #3}%
+\def\XINT_denom_B -#1.#2#3{\XINT_dsx_addzeros{#1}#3;}%
\def\xintFrac {\romannumeral0\xintfrac }%
\def\xintfrac #1%
{%
@@ -832,82 +724,105 @@
\def\XINT_tfrac_P #1/#2\Z {\expandafter\XINT_rez_AB
\romannumeral0\xintiirem{#1}{#2}\Z {0}{#2}}%
\def\xintTrunc {\romannumeral0\xinttrunc }%
-\def\xintiTrunc {\romannumeral0\xintitrunc }%
-\def\xinttrunc #1%
+\def\xintiTrunc {\romannumeral0\xintitrunc}%
+\def\xinttrunc #1{\expandafter\XINT_trunc\the\numexpr#1.\XINT_trunc_G}%
+\def\xintitrunc #1{\expandafter\XINT_trunc\the\numexpr#1.\XINT_itrunc_G}%
+\def\XINT_trunc #1.#2#3%
{%
- \expandafter\XINT_trunc\expandafter {\the\numexpr #1}%
+ \expandafter\XINT_trunc_a\romannumeral0\XINT_infrac{#3}#1.#2%
}%
-\def\XINT_trunc #1#2%
+\def\XINT_trunc_a #1#2#3#4.#5%
{%
- \expandafter\XINT_trunc_G
- \romannumeral0\expandafter\XINT_trunc_A
- \romannumeral0\XINT_infrac {#2}{#1}{#1}%
+ \if0\XINT_Sgn#2\Z\xint_dothis\XINT_trunc_zero\fi
+ \if1\XINT_iSone#3XY\xint_dothis\XINT_trunc_sp_b\fi
+ \xint_orthat\XINT_trunc_b #1+#4.{#2}{#3}#5#4.%
}%
-\def\xintitrunc #1%
+\def\XINT_trunc_zero #1.#2.{ 0}%
+\def\XINT_trunc_b {\expandafter\XINT_trunc_B\the\numexpr}%
+\def\XINT_trunc_sp_b {\expandafter\XINT_trunc_sp_B\the\numexpr}%
+\def\XINT_trunc_B #1%
{%
- \expandafter\XINT_itrunc\expandafter {\the\numexpr #1}%
+ \xint_UDsignfork
+ #1\XINT_trunc_C
+ -\XINT_trunc_D
+ \krof #1%
}%
-\def\XINT_itrunc #1#2%
+\def\XINT_trunc_sp_B #1%
{%
- \expandafter\XINT_itrunc_G
- \romannumeral0\expandafter\XINT_trunc_A
- \romannumeral0\XINT_infrac {#2}{#1}{#1}%
+ \xint_UDsignfork
+ #1\XINT_trunc_sp_C
+ -\XINT_trunc_sp_D
+ \krof #1%
}%
-\def\XINT_trunc_A #1#2#3#4%
+\def\XINT_trunc_C -#1.#2#3%
{%
- \expandafter\XINT_trunc_checkifzero
- \expandafter{\the\numexpr #1+#4}#2\Z {#3}%
+ \expandafter\XINT_trunc_CE
+ \romannumeral0\XINT_dsx_addzeros{#1}#3;.{#2}%
}%
-\def\XINT_trunc_checkifzero #1#2#3\Z
+\def\XINT_trunc_CE #1.#2{\XINT_trunc_E #2.{#1}}%
+\def\XINT_trunc_sp_C -#1.#2#3{\XINT_trunc_sp_Ca #2.#1.}%
+\def\XINT_trunc_sp_Ca #1%
{%
- \xint_gob_til_zero #2\XINT_trunc_iszero0\XINT_trunc_B {#1}{#2#3}%
+ \xint_UDsignfork
+ #1{\XINT_trunc_sp_Cb -}%
+ -{\XINT_trunc_sp_Cb \space#1}%
+ \krof
}%
-\def\XINT_trunc_iszero0\XINT_trunc_B #1#2#3{ 0\Z 0}%
-\def\XINT_trunc_B #1%
+\def\XINT_trunc_sp_Cb #1#2.#3.%
{%
- \ifcase\XINT_cntSgn #1\Z
- \expandafter\XINT_trunc_D
- \or
- \expandafter\XINT_trunc_D
- \else
- \expandafter\XINT_trunc_C
- \fi
- {#1}%
+ \expandafter\XINT_trunc_sp_Cc
+ \romannumeral0\expandafter\XINT_split_fromright_a
+ \the\numexpr#3-\numexpr\xint_c_ix\XINT_length_loop
+ #2\xint_relax\xint_relax\xint_relax\xint_relax
+ \xint_relax\xint_relax\xint_relax\xint_relax\xint_relax
+ \xint_c_i\xint_c_ii\xint_c_iii\xint_c_iv
+ \xint_c_v\xint_c_vi\xint_c_vii\xint_c_viii\xint_c_ix\xint_bye
+ .#2\xint_bye2345678\xint_bye..#1%
+}%
+\def\XINT_trunc_sp_Cc #1%
+{%
+ \if.#1\xint_dothis{\XINT_trunc_sp_Cd 0.}\fi
+ \xint_orthat {\XINT_trunc_sp_Cd #1}%
}%
-\def\XINT_trunc_C #1#2#3%
+\def\XINT_trunc_sp_Cd #1.#2.#3%
{%
- \expandafter\XINT_trunc_CE\expandafter
- {\romannumeral0\XINT_dsx_zeroloop -#1.{}\Z {#3}}{#2}%
+ \XINT_trunc_sp_F #3#1.%
}%
-\def\XINT_trunc_CE #1#2{\XINT_trunc_E #2.{#1}}%
-\def\XINT_trunc_D #1#2%
+\def\XINT_trunc_D #1.#2%
{%
\expandafter\XINT_trunc_E
- \romannumeral0\XINT_dsx_zeroloop #1.{}\Z {#2}.%
+ \romannumeral0\XINT_dsx_addzeros {#1}#2;.%
+}%
+\def\XINT_trunc_sp_D #1.#2#3%
+{%
+ \expandafter\XINT_trunc_sp_E
+ \romannumeral0\XINT_dsx_addzeros {#1}#2;.%
}%
\def\XINT_trunc_E #1%
{%
\xint_UDsignfork
- #1\XINT_trunc_Fneg
- -{\XINT_trunc_Fpos #1}%
+ #1{\XINT_trunc_F -}%
+ -{\XINT_trunc_F \space#1}%
\krof
}%
-\def\XINT_trunc_Fneg #1.#2{\expandafter\xint_firstoftwo_thenstop
- \romannumeral0\XINT_div_prepare {#2}{#1}\Z -}%
-\def\XINT_trunc_Fpos #1.#2{\expandafter\xint_firstoftwo_thenstop
- \romannumeral0\XINT_div_prepare {#2}{#1}\Z \space }%
-\def\XINT_itrunc_G #1#2\Z #3#4%
+\def\XINT_trunc_sp_E #1%
{%
- \xint_gob_til_zero #1\XINT_trunc_zero 0#3#1#2%
+ \xint_UDsignfork
+ #1{\XINT_trunc_sp_F -}%
+ -{\XINT_trunc_sp_F\space#1}%
+ \krof
}%
-\def\XINT_trunc_zero 0#1#20{ 0}%
-\def\XINT_trunc_G #1\Z #2#3%
+\def\XINT_trunc_F #1#2.#3#4%
+ {\expandafter#4\romannumeral`&&@\expandafter\xint_firstoftwo
+ \romannumeral0\XINT_div_prepare {#3}{#2}.#1}%
+\def\XINT_trunc_sp_F #1#2.#3{#3#2.#1}%
+\def\XINT_itrunc_G #1#2.#3#4.{\if#10\xint_dothis{ 0}\fi\xint_orthat{#3#1}#2}%
+\def\XINT_trunc_G #1.#2#3.%
{%
- \xint_gob_til_zero #2\XINT_trunc_zero 0%
- \expandafter\XINT_trunc_H\expandafter
- {\the\numexpr\romannumeral0\xintlength {#1}-#3}{#3}{#1}#2%
+ \expandafter\XINT_trunc_H
+ \the\numexpr\romannumeral0\xintlength {#1}-#3.#3.{#1}#2%
}%
-\def\XINT_trunc_H #1#2%
+\def\XINT_trunc_H #1.#2.%
{%
\ifnum #1 > \xint_c_
\xint_afterfi {\XINT_trunc_Ha {#2}}%
@@ -915,329 +830,311 @@
\xint_afterfi {\XINT_trunc_Hb {-#1}}% -0,--1,--2, ....
\fi
}%
-\def\XINT_trunc_Ha
-{%
- \expandafter\XINT_trunc_Haa\romannumeral0\xintdecsplit
-}%
-\def\XINT_trunc_Haa #1#2#3%
-{%
- #3#1.#2%
-}%
+\def\XINT_trunc_Ha{\expandafter\XINT_trunc_Haa\romannumeral0\xintdecsplit}%
+\def\XINT_trunc_Haa #1#2#3{#3#1.#2}%
\def\XINT_trunc_Hb #1#2#3%
{%
\expandafter #3\expandafter0\expandafter.%
- \romannumeral0\XINT_dsx_zeroloop #1.{}\Z {}#2% #1=-0 autoris\'e !
+ \romannumeral\xintreplicate{#1}0#2%
}%
\def\xintTTrunc {\romannumeral0\xintttrunc }%
-\def\xintttrunc #1%
-{%
- \expandafter\XINT_itrunc_G
- \romannumeral0\expandafter\XINT_ttrunc_A
- \romannumeral0\XINT_infrac {#1}0% this last 0 to let \XINT_itrunc_G be happy
-}%
-\def\XINT_ttrunc_A #1#2#3{\XINT_trunc_checkifzero {#1}#2\Z {#3}}%
+\def\xintttrunc {\xintitrunc\xint_c_}%
\let\xintNum \xintTTrunc
\let\xintnum \xintttrunc
-\def\xintRound {\romannumeral0\xintround }%
+\def\xintRound {\romannumeral0\xintround }%
\def\xintiRound {\romannumeral0\xintiround }%
-\def\xintround #1%
+\def\xintround #1{\expandafter\XINT_round\the\numexpr #1.\XINT_round_A}%
+\def\xintiround #1{\expandafter\XINT_round\the\numexpr #1.\XINT_iround_A}%
+\def\XINT_round #1.{\expandafter\XINT_round_aa\the\numexpr #1+\xint_c_i.#1.}%
+\def\XINT_round_aa #1.#2.#3#4%
{%
- \expandafter\XINT_round\expandafter {\the\numexpr #1}%
+ \expandafter\XINT_round_a\romannumeral0\XINT_infrac{#4}#1.#3#2.%
}%
-\def\XINT_round
+\def\XINT_round_a #1#2#3#4.%
{%
- \expandafter\XINT_trunc_G\romannumeral0\XINT_round_A
+ \if0\XINT_Sgn#2\Z\xint_dothis\XINT_trunc_zero\fi
+ \if1\XINT_iSone#3XY\xint_dothis\XINT_trunc_sp_b\fi
+ \xint_orthat\XINT_trunc_b #1+#4.{#2}{#3}%
}%
-\def\xintiround #1%
+\def\XINT_round_A{\expandafter\XINT_trunc_G\romannumeral0\XINT_round_B}%
+\def\XINT_iround_A{\expandafter\XINT_itrunc_G\romannumeral0\XINT_round_B}%
+\def\XINT_round_B #1.%
+ {\XINT_dsrr #1\xint_bye\xint_Bye3456789\xint_bye/\xint_c_x\relax.}%
+\def\xintXTrunc #1%#2%
{%
- \expandafter\XINT_iround\expandafter {\the\numexpr #1}%
+ \expandafter\XINT_xtrunc_a
+ \the\numexpr #1\expandafter.\romannumeral0\xintraw
}%
-\def\XINT_iround
+\def\XINT_xtrunc_a #1.% ?? faire autre chose
{%
- \expandafter\XINT_itrunc_G\romannumeral0\XINT_round_A
+ \expandafter\XINT_xtrunc_b\the\numexpr\ifnum#1<\xint_c_i \xint_c_i-\fi #1.%
}%
-\def\XINT_round_A #1#2%
+\def\XINT_xtrunc_b #1.#2{\XINT_xtrunc_c #2{#1}}%
+\def\XINT_xtrunc_c #1%
{%
- \expandafter\XINT_round_B
- \romannumeral0\expandafter\XINT_trunc_A
- \romannumeral0\XINT_infrac {#2}{#1+\xint_c_i}{#1}%
-}%
-\def\XINT_round_B #1\Z
+ \xint_UDzerominusfork
+ #1-\XINT_xtrunc_zero
+ 0#1{-\XINT_xtrunc_d {}}%
+ 0-{\XINT_xtrunc_d #1}%
+ \krof
+}%[
+\def\XINT_xtrunc_zero #1#2]{0.\romannumeral\xintreplicate{#1}0}%
+\def\XINT_xtrunc_d #1#2#3/#4[#5]%
{%
- \expandafter\XINT_round_C
- \romannumeral0\XINT_rord_main {}#1%
- \xint_relax
- \xint_bye\xint_bye\xint_bye\xint_bye
- \xint_bye\xint_bye\xint_bye\xint_bye
- \xint_relax
- \Z
+ \XINT_xtrunc_prepare_a#4\R\R\R\R\R\R\R\R {10}0000001\W !{#4};{#5}{#2}{#1#3}%
}%
-\def\XINT_round_C #1%
+\def\XINT_xtrunc_prepare_a #1#2#3#4#5#6#7#8#9%
{%
- \ifnum #1<\xint_c_v
- \expandafter\XINT_round_Daa
- \else
- \expandafter\XINT_round_Dba
- \fi
+ \xint_gob_til_R #9\XINT_xtrunc_prepare_small\R
+ \XINT_xtrunc_prepare_b #9%
}%
-\def\XINT_round_Daa #1%
+\def\XINT_xtrunc_prepare_small\R #1!#2;%
{%
- \xint_gob_til_Z #1\XINT_round_Daz\Z \XINT_round_Da #1%
+ \ifcase #2
+ \or\expandafter\XINT_xtrunc_BisOne
+ \or\expandafter\XINT_xtrunc_BisTwo
+ \or
+ \or\expandafter\XINT_xtrunc_BisFour
+ \or\expandafter\XINT_xtrunc_BisFive
+ \or
+ \or
+ \or\expandafter\XINT_xtrunc_BisEight
+ \fi\XINT_xtrunc_BisSmall {#2}%
}%
-\def\XINT_round_Daz\Z \XINT_round_Da \Z { 0\Z }%
-\def\XINT_round_Da #1\Z
+\def\XINT_xtrunc_BisOne\XINT_xtrunc_BisSmall #1#2#3#4%
+ {\XINT_xtrunc_sp_e {#2}{#4}{#3}}%
+\def\XINT_xtrunc_BisTwo\XINT_xtrunc_BisSmall #1#2#3#4%
{%
- \XINT_rord_main {}#1%
- \xint_relax
- \xint_bye\xint_bye\xint_bye\xint_bye
- \xint_bye\xint_bye\xint_bye\xint_bye
- \xint_relax \Z
+ \expandafter\XINT_xtrunc_sp_e\expandafter
+ {\the\numexpr #2-\xint_c_i\expandafter}\expandafter
+ {\romannumeral0\xintiimul 5{#4}}{#3}%
}%
-\def\XINT_round_Dba #1%
+\def\XINT_xtrunc_BisFour\XINT_xtrunc_BisSmall #1#2#3#4%
{%
- \xint_gob_til_Z #1\XINT_round_Dbz\Z \XINT_round_Db #1%
+ \expandafter\XINT_xtrunc_sp_e\expandafter
+ {\the\numexpr #2-\xint_c_ii\expandafter}\expandafter
+ {\romannumeral0\xintiimul {25}{#4}}{#3}%
}%
-\def\XINT_round_Dbz\Z \XINT_round_Db \Z { 1\Z }%
-\def\XINT_round_Db #1\Z
+\def\XINT_xtrunc_BisFive\XINT_xtrunc_BisSmall #1#2#3#4%
{%
- \XINT_addm_A 0{}1000\W\X\Y\Z #1000\W\X\Y\Z \Z
+ \expandafter\XINT_xtrunc_sp_e\expandafter
+ {\the\numexpr #2-\xint_c_i\expandafter}\expandafter
+ {\romannumeral0\xintdouble {#4}}{#3}%
}%
-\def\xintXTrunc #1#2%
+\def\XINT_xtrunc_BisEight\XINT_xtrunc_BisSmall #1#2#3#4%
{%
- \expandafter\XINT_xtrunc_a\expandafter
- {\the\numexpr #1\expandafter}\romannumeral0\xintraw {#2}%
+ \expandafter\XINT_xtrunc_sp_e\expandafter
+ {\the\numexpr #2-\xint_c_iii\expandafter}\expandafter
+ {\romannumeral0\xintiimul {125}{#4}}{#3}%
}%
-\def\XINT_xtrunc_a #1%
+\def\XINT_xtrunc_BisSmall #1%
{%
- \expandafter\XINT_xtrunc_b\expandafter
- {\the\numexpr\ifnum#1<\xint_c_i \xint_c_i-\fi #1}%
+ \expandafter\XINT_xtrunc_e\expandafter
+ {\expandafter\XINT_xtrunc_small_a
+ \the\numexpr #1/\xint_c_ii\expandafter.\the\numexpr \xint_c_x^viii+#1!}%
}%
-\def\XINT_xtrunc_b #1%
+\def\XINT_xtrunc_small_a #1.#2!#3%
{%
- \expandafter\XINT_xtrunc_c\expandafter
- {\the\numexpr (#1+\xint_c_ii^v)/\xint_c_ii^vi-\xint_c_i}{#1}%
+ \expandafter\XINT_div_small_b\the\numexpr #1\expandafter
+ .\the\numexpr #2\expandafter!%
+ \romannumeral0\XINT_div_small_ba #3\R\R\R\R\R\R\R\R{10}0000001\W
+ #3\XINT_sepbyviii_Z_end 2345678\relax
}%
-\def\XINT_xtrunc_c #1#2%
+\def\XINT_xtrunc_prepare_b
+ {\expandafter\XINT_xtrunc_prepare_c\romannumeral0\XINT_zeroes_forviii }%
+\def\XINT_xtrunc_prepare_c #1!%
{%
- \expandafter\XINT_xtrunc_d\expandafter
- {\the\numexpr #2-\xint_c_ii^vi*#1}{#1}{#2}%
+ \XINT_xtrunc_prepare_d #1.00000000!{#1}%
}%
-\def\XINT_xtrunc_d #1#2#3#4/#5[#6]%
+\def\XINT_xtrunc_prepare_d #1#2#3#4#5#6#7#8#9%
{%
- \XINT_xtrunc_e #4.{#6}{#5}{#3}{#2}{#1}%
+ \expandafter\XINT_xtrunc_prepare_e\xint_gob_til_dot #1#2#3#4#5#6#7#8#9!%
}%
-\def\XINT_xtrunc_e #1%
+\def\XINT_xtrunc_prepare_e #1!#2!#3#4%
{%
- \xint_UDzerominusfork
- #1-\XINT_xtrunc_zero
- 0#1\XINT_xtrunc_N
- 0-{\XINT_xtrunc_P #1}%
- \krof
+ \XINT_xtrunc_prepare_f #4#3\X {#1}{#3}%
}%
-\def\XINT_xtrunc_zero .#1#2#3#4#5%
+\def\XINT_xtrunc_prepare_f #1#2#3#4#5#6#7#8#9\X
{%
- 0.\romannumeral0\expandafter\XINT_dsx_zeroloop
- \the\numexpr #5.{}\Z {}%
- \xintiloop [#4+-1]
- \ifnum \xintiloopindex>\xint_c_
- 0000000000000000000000000000000000000000000000000000000000000000%
- \repeat
+ \expandafter\XINT_xtrunc_prepare_g\expandafter
+ \XINT_div_prepare_g
+ \the\numexpr #1#2#3#4#5#6#7#8+\xint_c_i\expandafter
+ .\the\numexpr (#1#2#3#4#5#6#7#8+\xint_c_i)/\xint_c_ii\expandafter
+ .\the\numexpr #1#2#3#4#5#6#7#8\expandafter
+ .\romannumeral0\XINT_sepandrev_andcount
+ #1#2#3#4#5#6#7#8#9\XINT_rsepbyviii_end_A 2345678%
+ \XINT_rsepbyviii_end_B 2345678%
+ \relax\xint_c_ii\xint_c_iii
+ \R.\xint_c_vi\R.\xint_c_v\R.\xint_c_iv\R.\xint_c_iii
+ \R.\xint_c_ii\R.\xint_c_i\R.\xint_c_\W
+ \X
}%
-\def\XINT_xtrunc_N {-\XINT_xtrunc_P }%
-\def\XINT_xtrunc_P #1.#2%
+\def\XINT_xtrunc_prepare_g #1;{\XINT_xtrunc_e {#1}}%
+\def\XINT_xtrunc_e #1#2%
{%
\ifnum #2<\xint_c_
- \expandafter\XINT_xtrunc_negN_Q
+ \expandafter\XINT_xtrunc_I
\else
- \expandafter\XINT_xtrunc_Q
- \fi {#2}{#1}.%
+ \expandafter\XINT_xtrunc_II
+ \fi #2.{#1}%
}%
-\def\XINT_xtrunc_negN_Q #1#2.#3#4#5#6%
+\def\XINT_xtrunc_I -#1.#2#3#4%
{%
- \expandafter\XINT_xtrunc_negN_R
- \romannumeral0\XINT_div_prepare {#3}{#2}{#3}{#1}{#4}%
+ \expandafter\XINT_xtrunc_I_a\romannumeral0#2{#4}{#2}{#1}{#3}%
}%
-\def\XINT_xtrunc_negN_R #1#2#3#4#5%
+\def\XINT_xtrunc_I_a #1#2#3#4#5%
{%
- \expandafter\XINT_xtrunc_negN_S\expandafter
- {\the\numexpr -#4}{#5}{#2}{#3}{#1}%
+ \expandafter\XINT_xtrunc_I_b\the\numexpr #4-#5.#4.{#5}{#2}{#3}{#1}%
}%
-\def\XINT_xtrunc_negN_S #1#2%
+\def\XINT_xtrunc_I_b #1%
{%
- \expandafter\XINT_xtrunc_negN_T\expandafter
- {\the\numexpr #2-#1}{#1}{#2}%
+ \xint_UDsignfork
+ #1\XINT_xtrunc_IA_c
+ -\XINT_xtrunc_IB_c
+ \krof #1%
}%
-\def\XINT_xtrunc_negN_T #1%
+\def\XINT_xtrunc_IA_c -#1.#2.#3#4#5#6%
{%
- \ifnum \xint_c_<#1
- \expandafter\XINT_xtrunc_negNA
- \else
- \expandafter\XINT_xtrunc_negNW
- \fi {#1}%
+ \expandafter\XINT_xtrunc_IA_d
+ \the\numexpr#2-\xintLength{#6}.{#6}%
+ \expandafter\XINT_xtrunc_IA_xd
+ \the\numexpr (#1+\xint_c_ii^v)/\xint_c_ii^vi-\xint_c_i.#1.{#5}{#4}%
}%
-\def\XINT_xtrunc_unlock #10.{ }%
-\def\XINT_xtrunc_negNA #1#2#3#4#5#6%
+\def\XINT_xtrunc_IA_d #1%
{%
- \expandafter\XINT_xtrunc_negNB\expandafter
- {\romannumeral0\expandafter\expandafter\expandafter
- \XINT_xtrunc_unlock\expandafter\string
- \csname\XINT_xtrunc_b {#1}#4/#5[0]\expandafter\endcsname
- \expandafter}\expandafter
- {\the\numexpr\xintLength{#6}-#2}{#6}%
+ \xint_UDsignfork
+ #1\XINT_xtrunc_IAA_e
+ -\XINT_xtrunc_IAB_e
+ \krof #1%
}%
-\def\XINT_xtrunc_negNB #1#2#3{\XINT_xtrunc_negNC {#2}{#3}#1}%
-\def\XINT_xtrunc_negNC #1%
+\def\XINT_xtrunc_IAA_e -#1.#2%
{%
- \ifnum \xint_c_ < #1
- \expandafter\XINT_xtrunc_negNDa
- \else
- \expandafter\XINT_xtrunc_negNE
- \fi {#1}%
+ \romannumeral0\XINT_split_fromleft
+ #1.#2\xint_gobble_i\xint_bye2345678\xint_bye..%
}%
-\def\XINT_xtrunc_negNDa #1#2%
+\def\XINT_xtrunc_IAB_e #1.#2%
{%
- \expandafter\XINT_xtrunc_negNDb%
- \romannumeral0\XINT_split_fromleft_loop #1.{}#2\W\W\W\W\W\W\W\W\Z
+ 0.\romannumeral\XINT_rep#1\endcsname0#2%
}%
-\def\XINT_xtrunc_negNDb #1.#2.{#1.#2}%
-\def\XINT_xtrunc_negNE #1#2%
+\def\XINT_xtrunc_IA_xd #1.#2.%
{%
- 0.\romannumeral0\XINT_dsx_zeroloop -#1.{}\Z {}#2%
+ \expandafter\XINT_xtrunc_IA_xe\the\numexpr #2-\xint_c_ii^vi*#1.#1.%
}%
-\def\XINT_xtrunc_negNW #1#2#3#4#5#6%
+\def\XINT_xtrunc_IA_xe #1.#2.#3#4%
{%
- \expandafter\XINT_xtrunc_negNX\expandafter
- {\romannumeral0\xintnum{\xintDecSplitL {-#1}{#6}}}{#3}%
+ \XINT_xtrunc_loop {#2}{#4}{#3}{#1}%
}%
-\def\XINT_xtrunc_negNX #1#2%
+\def\XINT_xtrunc_IB_c #1.#2.#3#4#5#6%
{%
- \expandafter\XINT_xtrunc_negNC\expandafter
- {\the\numexpr\xintLength {#1}-#2}{#1}%
+ \expandafter\XINT_xtrunc_IB_d
+ \romannumeral0\XINT_split_xfork #1.#6\xint_bye2345678\xint_bye..{#3}%
}%
-\def\XINT_xtrunc_BisOne #1#2#3#4#5#6#7%
+\def\XINT_xtrunc_IB_d #1.#2.#3%
{%
- #5.\romannumeral0\expandafter\XINT_dsx_zeroloop
- \the\numexpr #7.{}\Z {}%
- \xintiloop [#6+-1]
- \ifnum \xintiloopindex>\xint_c_
- 0000000000000000000000000000000000000000000000000000000000000000%
- \repeat
+ \expandafter\XINT_xtrunc_IA_d\the\numexpr#3-\xintLength {#1}.{#1}%
}%
-\def\XINT_xtrunc_BisTwo #1#2#3#4#5#6#7%
+\def\XINT_xtrunc_II #1.%
{%
- \xintHalf {#5}.\ifodd\xintiiLDg{#5} 5\else 0\fi
- \romannumeral0\expandafter\XINT_dsx_zeroloop
- \the\numexpr #7-\xint_c_i.{}\Z {}%
- \xintiloop [#6+-1]
- \ifnum \xintiloopindex>\xint_c_
- 0000000000000000000000000000000000000000000000000000000000000000%
- \repeat
+ \expandafter\XINT_xtrunc_II_a\romannumeral\xintreplicate{#1}0.%
}%
-\def\XINT_xtrunc_Q #1%
+\def\XINT_xtrunc_II_a #1.#2#3#4%
{%
- \expandafter\XINT_xtrunc_prepare
- \romannumeral0\XINT_dsx_zeroloop #1.{}\Z
+ \expandafter\XINT_xtrunc_II_b
+ \the\numexpr (#3+\xint_c_ii^v)/\xint_c_ii^vi-\xint_c_i\expandafter.%
+ \the\numexpr #3\expandafter.\romannumeral0#2{#4#1}{#2}%
}%
-\def\XINT_xtrunc_prepare #1.#2#3%
+\def\XINT_xtrunc_II_b #1.#2.%
{%
- \expandafter\XINT_xtrunc_Pa\expandafter
- {\romannumeral0%
- \XINT_xtrunc_prepare_a #2\R\R\R\R\R\R\R\R {10}0000001\W !{#2}}{#1}%
+ \expandafter\XINT_xtrunc_II_c\the\numexpr #2-\xint_c_ii^vi*#1.#1.%
}%
-\def\XINT_xtrunc_prepare_a #1#2#3#4#5#6#7#8#9%
+\def\XINT_xtrunc_II_c #1.#2.#3#4#5%
{%
- \xint_gob_til_R #9\XINT_xtrunc_prepare_small\R
- \XINT_xtrunc_prepare_b #9%
+ #3.\XINT_xtrunc_loop {#2}{#4}{#5}{#1}%
}%
-\def\XINT_xtrunc_prepare_small\R #1!#2%
+\def\XINT_xtrunc_loop #1%
{%
- \ifcase #2
- \or\xint_afterfi{ \XINT_div_BisOne}%
- \or\xint_afterfi{ \XINT_div_BisTwo}%
- \else\expandafter\XINT_xtrunc_small_aa
- \fi {#2}%
+ \ifnum #1=\xint_c_ \expandafter\XINT_xtrunc_transition\fi
+ \expandafter\XINT_xtrunc_loop_a\the\numexpr #1-\xint_c_i.%
}%
-\def\XINT_xtrunc_small_aa #1%
+\def\XINT_xtrunc_loop_a #1.#2#3%
{%
- \expandafter\space\expandafter\XINT_xtrunc_small_a
- \the\numexpr #1/\xint_c_ii\expandafter
- .\the\numexpr \xint_c_x^viii+#1!%
+ \expandafter\XINT_xtrunc_loop_b\romannumeral0#3%
+ {#20000000000000000000000000000000000000000000000000000000000000000}%
+ {#1}{#3}%
}%
-\def\XINT_xtrunc_small_a #1.#2!#3%
+\def\XINT_xtrunc_loop_b #1#2#3%
{%
- \expandafter\XINT_div_small_b\the\numexpr #1\expandafter
- .\the\numexpr #2\expandafter!%
- \romannumeral0\XINT_div_small_ba #3\R\R\R\R\R\R\R\R{10}0000001\W
- #3\XINT_sepbyviii_Z_end 2345678\relax
+ \romannumeral\xintreplicate{\xint_c_ii^vi-\xintLength{#1}}0#1%
+ \XINT_xtrunc_loop {#3}{#2}%
}%
-\def\XINT_xtrunc_prepare_b
- {\expandafter\XINT_xtrunc_prepare_c\romannumeral0\XINT_zeroes_forviii }%
-\def\XINT_xtrunc_prepare_c #1!%
+\def\XINT_xtrunc_transition
+ \expandafter\XINT_xtrunc_loop_a\the\numexpr #1.#2#3#4%
{%
- \XINT_xtrunc_prepare_d #1.00000000!{#1}%
+ \ifnum #4=\xint_c_ \expandafter\xint_gobble_vi\fi
+ \expandafter\XINT_xtrunc_finish\expandafter
+ {\romannumeral0\XINT_dsx_addzeros{#4}#2;}{#3}{#4}%
}%
-\def\XINT_xtrunc_prepare_d #1#2#3#4#5#6#7#8#9%
+\def\XINT_xtrunc_finish #1#2%
{%
- \expandafter\XINT_xtrunc_prepare_e\xint_gob_til_dot #1#2#3#4#5#6#7#8#9!%
+ \expandafter\XINT_xtrunc_finish_a\romannumeral0#2{#1}%
}%
-\def\XINT_xtrunc_prepare_e #1!#2!#3#4%
+\def\XINT_xtrunc_finish_a #1#2#3%
{%
- \XINT_xtrunc_prepare_f #4#3\X {#1}{#3}%
+ \romannumeral\xintreplicate{#3-\xintLength{#1}}0#1%
}%
-\def\XINT_xtrunc_prepare_f #1#2#3#4#5#6#7#8#9\X
+\def\XINT_xtrunc_sp_e #1%
{%
- \expandafter\space\expandafter\XINT_div_prepare_g
- \the\numexpr #1#2#3#4#5#6#7#8+\xint_c_i\expandafter
- .\the\numexpr (#1#2#3#4#5#6#7#8+\xint_c_i)/\xint_c_ii\expandafter
- .\the\numexpr #1#2#3#4#5#6#7#8\expandafter
- .\romannumeral0\XINT_sepandrev_andcount
- #1#2#3#4#5#6#7#8#9\XINT_rsepbyviii_end_A 2345678%
- \XINT_rsepbyviii_end_B 2345678%
- \relax\xint_c_ii\xint_c_iii
- \R.\xint_c_vi\R.\xint_c_v\R.\xint_c_iv\R.\xint_c_iii
- \R.\xint_c_ii\R.\xint_c_i\R.\xint_c_\W
- \X
+ \ifnum #1<\xint_c_
+ \expandafter\XINT_xtrunc_sp_I
+ \else
+ \expandafter\XINT_xtrunc_sp_II
+ \fi #1.%
}%
-\def\XINT_xtrunc_Pa #1#2%
+\def\XINT_xtrunc_sp_I -#1.#2#3%
{%
- \expandafter\XINT_xtrunc_Pb\romannumeral0#1{#2}{#1}%
+ \expandafter\XINT_xtrunc_sp_I_a\the\numexpr #1-#3.#1.{#3}{#2}%
}%
-\def\XINT_xtrunc_Pb #1#2#3#4{#1.\XINT_xtrunc_A {#4}{#2}{#3}}%
-\def\XINT_xtrunc_A #1%
+\def\XINT_xtrunc_sp_I_a #1%
{%
- \unless\ifnum #1>\xint_c_ \XINT_xtrunc_transition\fi
- \expandafter\XINT_xtrunc_B\expandafter{\the\numexpr #1-\xint_c_i}%
+ \xint_UDsignfork
+ #1\XINT_xtrunc_sp_IA_b
+ -\XINT_xtrunc_sp_IB_b
+ \krof #1%
}%
-\def\XINT_xtrunc_B #1#2#3%
+\def\XINT_xtrunc_sp_IA_b -#1.#2.#3#4%
{%
- \expandafter\XINT_xtrunc_D\romannumeral0#3%
- {#20000000000000000000000000000000000000000000000000000000000000000}%
- {#1}{#3}%
+ \expandafter\XINT_xtrunc_sp_IA_c
+ \the\numexpr#2-\xintLength{#4}.{#4}\romannumeral\XINT_rep#1\endcsname0%
}%
-\def\XINT_xtrunc_D #1#2#3%
+\def\XINT_xtrunc_sp_IA_c #1%
{%
- \romannumeral0\expandafter\XINT_dsx_zeroloop
- \the\numexpr \xint_c_ii^vi-\xintLength{#1}.{}\Z {}#1%
- \XINT_xtrunc_A {#3}{#2}%
+ \xint_UDsignfork
+ #1\XINT_xtrunc_sp_IAA
+ -\XINT_xtrunc_sp_IAB
+ \krof #1%
}%
-\def\XINT_xtrunc_transition\fi
- \expandafter\XINT_xtrunc_B\expandafter #1#2#3#4%
+\def\XINT_xtrunc_sp_IAA -#1.#2%
{%
- \fi
- \ifnum #4=\xint_c_ \XINT_xtrunc_abort\fi
- \expandafter\XINT_xtrunc_x\expandafter
- {\romannumeral0\XINT_dsx_zeroloop #4.{}\Z {#2}}{#3}{#4}%
+ \romannumeral0\XINT_split_fromleft
+ #1.#2\xint_gobble_i\xint_bye2345678\xint_bye..%
+}%
+\def\XINT_xtrunc_sp_IAB #1.#2%
+{%
+ 0.\romannumeral\XINT_rep#1\endcsname0#2%
+}%
+\def\XINT_xtrunc_sp_IB_b #1.#2.#3#4%
+{%
+ \expandafter\XINT_xtrunc_sp_IB_c
+ \romannumeral0\XINT_split_xfork #1.#4\xint_bye2345678\xint_bye..{#3}%
}%
-\def\XINT_xtrunc_x #1#2%
+\def\XINT_xtrunc_sp_IB_c #1.#2.#3%
{%
- \expandafter\XINT_xtrunc_y\romannumeral0#2{#1}%
+ \expandafter\XINT_xtrunc_sp_IA_c\the\numexpr#3-\xintLength {#1}.{#1}%
}%
-\def\XINT_xtrunc_y #1#2#3%
+\def\XINT_xtrunc_sp_II #1.#2#3%
{%
- \romannumeral0\expandafter\XINT_dsx_zeroloop
- \the\numexpr #3-\xintLength{#1}.{}\Z {}#1%
+ #2\romannumeral\XINT_rep#1\endcsname0.\romannumeral\XINT_rep#3\endcsname0%
}%
-\def\XINT_xtrunc_abort\fi\expandafter\XINT_xtrunc_x\expandafter #1#2#3{\fi}%
\mathchardef\XINTdigits 16
\def\xintDigits #1#2%
{\afterassignment \xint_gobble_i \mathchardef\XINTdigits=}%
@@ -1252,29 +1149,27 @@
\def\XINT_fadd_Bzero #1]#2#3#4{ #3/#4[#2]}%
\def\XINT_fadd_c #1/#2[#3]#4%
{%
- \expandafter\XINT_fadd_Aa\expandafter{\the\numexpr #4-#3}{#3}{#4}{#1}{#2}%
+ \expandafter\XINT_fadd_Aa\the\numexpr #4-#3.{#3}{#4}{#1}{#2}%
}%
\def\XINT_fadd_Aa #1%
{%
- \ifcase\XINT_cntSgn #1\Z
- \expandafter\XINT_fadd_B
- \or
- \expandafter \XINT_fadd_Ba
- \else
- \expandafter \XINT_fadd_Bb
- \fi {#1}%
+ \xint_UDzerominusfork
+ #1-\XINT_fadd_B
+ 0#1\XINT_fadd_Bb
+ 0-\XINT_fadd_Ba
+ \krof #1%
}%
-\def\XINT_fadd_B #1#2#3#4#5#6#7{\XINT_fadd_C {#4}{#5}{#7}{#6}[#3]}%
-\def\XINT_fadd_Ba #1#2#3#4#5#6#7%
+\def\XINT_fadd_B #1.#2#3#4#5#6#7{\XINT_fadd_C {#4}{#5}{#7}{#6}[#3]}%
+\def\XINT_fadd_Ba #1.#2#3#4#5#6#7%
{%
\expandafter\XINT_fadd_C\expandafter
- {\romannumeral0\XINT_dsx_zeroloop #1.{}\Z {#6}}%
+ {\romannumeral0\XINT_dsx_addzeros {#1}#6;}%
{#7}{#5}{#4}[#2]%
}%
-\def\XINT_fadd_Bb #1#2#3#4#5#6#7%
+\def\XINT_fadd_Bb -#1.#2#3#4#5#6#7%
{%
\expandafter\XINT_fadd_C\expandafter
- {\romannumeral0\XINT_dsx_zeroloop -#1.{}\Z {#4}}%
+ {\romannumeral0\XINT_dsx_addzeros {#1}#4;}%
{#5}{#7}{#6}[#3]%
}%
\def\XINT_fadd_C #1#2#3%
@@ -1579,13 +1474,13 @@
\def\XINT_fgeq_Fd #1\Z #2#3%
{%
\expandafter\XINT_fgeq_Fe\expandafter
- {\romannumeral0\XINT_dsx_addzerosnofuss {#1}{#3}}{#2}%
+ {\romannumeral0\XINT_dsx_addzeros {#1}#3;}{#2}%
}%
\def\XINT_fgeq_Fe #1#2{\XINT_geq_pre {#2}{#1}}%
\def\XINT_fgeq_Fn #1\Z #2#3%
{%
\expandafter\XINT_geq_pre\expandafter
- {\romannumeral0\XINT_dsx_addzerosnofuss {#1}{#2}}{#3}%
+ {\romannumeral0\XINT_dsx_addzeros {#1}#2;}{#3}%
}%
\def\xintMax {\romannumeral0\xintmax }%
\def\xintmax #1%
@@ -1741,13 +1636,13 @@
\def\XINT_fcmp_Fd #1\Z #2#3%
{%
\expandafter\XINT_fcmp_Fe\expandafter
- {\romannumeral0\XINT_dsx_addzerosnofuss {#1}{#3}}{#2}%
+ {\romannumeral0\XINT_dsx_addzeros {#1}#3;}{#2}%
}%
\def\XINT_fcmp_Fe #1#2{\xintiicmp {#2}{#1}}%
\def\XINT_fcmp_Fn #1\Z #2#3%
{%
\expandafter\xintiicmp\expandafter
- {\romannumeral0\XINT_dsx_addzerosnofuss {#1}{#2}}{#3}%
+ {\romannumeral0\XINT_dsx_addzeros {#1}#2;}{#3}%
}%
\def\xintAbs {\romannumeral0\xintabs }%
\def\xintabs #1{\expandafter\XINT_abs\romannumeral0\xintraw {#1}}%
@@ -1775,7 +1670,7 @@
}%
\def\XINT_float_a #1.#2#3#4%
{%
- \if\romannumeral0\XINT_isone#4XY1\expandafter\XINT_float_sp
+ \if1\XINT_iSone#4XY\expandafter\XINT_float_sp
\else\expandafter\XINT_float_fork\fi #3.{#1}{#2}{#4}%
}%
\def\XINT_float_sp #1%
@@ -1808,50 +1703,26 @@
{%
\expandafter\XINT_float_sp_done
\the\numexpr #4-#1+#3-\xint_c_i\expandafter.%
- \romannumeral0\XINT_dsx_addzerosnofuss {#1}{#2};%
+ \romannumeral0\XINT_dsx_addzeros {#1}#2;;%
}%
\def\XINT_float_sp_done #1.#2#3;{ #2.#3e#1}%
\def\XINT_float_sp_c #1.#2%
{%
\if #29\xint_dothis {\XINT_float_sp_d\XINT_float_Wb }\fi
- \xint_orthat {\XINT_float_sp_d\XINT_float_sp_Wa }#1.#2%
+ \xint_orthat {\XINT_float_sp_d\XINT_float_Wa }#1.#2%
}%
\def\XINT_float_sp_d #1#2.#3.#4.#5.%
{%
\expandafter\XINT_float_sp_e
\the\numexpr #5+#2+#4-\xint_c_i\expandafter.%
- \romannumeral0\expandafter\XINT_split_fromleft_loop
- \the\numexpr #4+\xint_c_i.{}#3\W\W\W\W\W\W\W\W\Z #1%
+ \romannumeral0\XINT_split_fromleft
+ (\xint_c_i+#4).#3\xint_bye2345678\xint_bye..#1%
}%
-\def\XINT_float_sp_e #1.#2.#3.%
+\def\XINT_float_sp_e #1.#2.#3.#4%
{%
- \expandafter\XINT_float_sp_f
- \romannumeral0\XINT_rord_main {}#2%
- \xint_relax
- \xint_bye\xint_bye\xint_bye\xint_bye
- \xint_bye\xint_bye\xint_bye\xint_bye
- \xint_relax ;#1.%
+ \expandafter#4\romannumeral0\XINT_dsrr#2%
+ \xint_bye\xint_Bye3456789\xint_bye/\xint_c_x\relax e#1%
}%
-\def\XINT_float_sp_f #1%
-{%
- \ifnum #1<\xint_c_v
- \expandafter\XINT_float_sp_ga\else\expandafter\XINT_float_sp_h\fi
-}%
-\def\XINT_float_sp_ga #1;#2.#3%
-{%
- \expandafter\XINT_float_sp_Wa
- \romannumeral0\XINT_rord_main {}#1%
- \xint_relax
- \xint_bye\xint_bye\xint_bye\xint_bye
- \xint_bye\xint_bye\xint_bye\xint_bye
- \xint_relax e#2%
-}%
-\def\XINT_float_sp_h #1;#2.#3%
-{%
- \expandafter#3%
- \romannumeral0\XINT_addm_A 0{}1000\W\X\Y\Z #1000\W\X\Y\Z e#2%
-}%
-\def\XINT_float_sp_Wa #1{ #1.}%
\def\XINT_float_fork #1%
{%
\xint_UDsignfork
@@ -1877,8 +1748,7 @@
{%
\expandafter\XINT_float_MatoN
\the\numexpr #1-#2\expandafter.%
- \romannumeral0\XINT_split_fromleft_loop #2.{}#3\W\W\W\W\W\W\W\W\Z
- {#2}%
+ \romannumeral0\XINT_split_fromleft#2.#3\xint_bye2345678\xint_bye..{#2}%
}%
\def\XINT_float_MatoN #1.#2.#3.#4#5#6#7%
{%
@@ -1902,7 +1772,7 @@
{%
\expandafter\XINT_float_NaP
\the\numexpr #2-#1+#3\expandafter.%
- \romannumeral0\XINT_split_fromleft_loop #3.{}#4\W\W\W\W\W\W\W\W\Z {#3}%
+ \romannumeral0\XINT_split_fromleft#3.#4\xint_bye2345678\xint_bye..{#3}%
}%
\def\XINT_float_NaP #1.#2.#3.#4{\XINT_float_P #4.#1.#4.{#2}}%
\def\XINT_float_P #1.#2.#3.#4#5#6#7#8%
@@ -1912,7 +1782,7 @@
\def\XINT_float_Q #1.#2#3%
{%
\expandafter\XINT_float_Sa
- \romannumeral0\xintiiquo{\XINT_dsx_addzerosnofuss {#1}{#2}}{#3}\Z {#1}%
+ \romannumeral0\xintiiquo{\XINT_dsx_addzeros {#1}#2;}{#3}\Z {#1}%
}%
\def\XINT_float_Sa #1%
{%
@@ -1922,45 +1792,40 @@
\def\XINT_float_Sb #1#2\Z #3#4%
{%
\expandafter\XINT_float_T
- \the\numexpr #4+\xint_c_i\expandafter.%
- \romannumeral`&&@\XINT_lenrord_loop 0.{}#2\Z\W\W\W\W\W\W\W\Z #1{#3}{#4}%
+ \the\numexpr\xint_c_ix\XINT_length_loop
+ #2\xint_relax\xint_relax\xint_relax\xint_relax
+ \xint_relax\xint_relax\xint_relax\xint_relax\xint_relax
+ \xint_c_i\xint_c_ii\xint_c_iii\xint_c_iv
+ \xint_c_v\xint_c_vi\xint_c_vii\xint_c_viii\xint_c_ix\xint_bye-#4.%
+ {#2}#1{#3}{#4}%
}%
-\def\XINT_float_T #1.#2.#3%
+\def\XINT_float_T #1.%
{%
- \ifnum #2>#1 \xint_dothis{\XINT_float_U\XINT_float_Xb}\fi
- \xint_orthat{\XINT_float_U\XINT_float_Xa #3}%
+ \if2#1\expandafter\XINT_float_Ub\else\expandafter\XINT_float_Ua\fi
}%
-\def\XINT_float_U #1#2%
+\def\XINT_float_Ua #1#2%
{%
- \ifnum #2<\xint_c_v
- \expandafter\XINT_float_Va
- \else
- \expandafter\XINT_float_Vb
- \fi #1%
-}%
-\def\XINT_float_Va #1#2\Z #3%
-{%
- \expandafter#1%
- \romannumeral0\expandafter\XINT_float_Wa
- \romannumeral0\XINT_rord_main {}#2%
- \xint_relax
- \xint_bye\xint_bye\xint_bye\xint_bye
- \xint_bye\xint_bye\xint_bye\xint_bye
- \xint_relax \Z
+ \expandafter\XINT_float_Xa
+ \romannumeral0\expandafter#2%
+ \romannumeral0\XINT_dsrr
+ #1\xint_bye\xint_Bye3456789\xint_bye/\xint_c_x\relax;%
}%
-\def\XINT_float_Vb #1#2\Z #3%
+\def\XINT_float_Ub #1#2%
{%
- \expandafter #1%
- \romannumeral0\expandafter #3%
- \romannumeral0\XINT_addm_A 0{}1000\W\X\Y\Z #2000\W\X\Y\Z \Z
+ \expandafter\XINT_float_Xb
+ \romannumeral0\expandafter#2%
+ \romannumeral0\expandafter\XINT_dsrr
+ \romannumeral0\XINT_dsr
+ #1\xint_bye\xint_Bye3456789\xint_bye+\xint_c_v)/\xint_c_x-\xint_c_i\relax
+ \xint_bye\xint_Bye3456789\xint_bye/\xint_c_x\relax;%
}%
\def\XINT_float_Wa #1{ #1.}%
\def\XINT_float_Wb #1#2{\if #11\xint_dothis{ 10.}\fi\xint_orthat{ #1.#2}}%
-\def\XINT_float_Xa #1\Z #2#3#4%
+\def\XINT_float_Xa #1;#2#3#4%
{%
\expandafter\XINT_float_Y\the\numexpr #3+#4-#2.{#1}%
}%
-\def\XINT_float_Xb #1\Z #2#3#4%
+\def\XINT_float_Xb #1;#2#3#4%
{%
\expandafter\XINT_float_Y\the\numexpr #3+#4+\xint_c_i-#2.{#1}%
}%
@@ -1972,11 +1837,11 @@
{\if #1!\xint_dothis\XINT_infloat_clean_a\fi\xint_orthat{ }#1}%
\def\XINT_infloat_clean_a !#1.#2[#3]%
{%
- \expandafter\XINT_infloat_sp_done
+ \expandafter\XINT_infloat_done
\the\numexpr #3-#1\expandafter.%
- \romannumeral0\XINT_dsx_addzerosnofuss {#1}{#2};%
+ \romannumeral0\XINT_dsx_addzeros {#1}#2;;%
}%
-\def\XINT_infloat_sp_done #1.#2;{ #2[#1]}%
+\def\XINT_infloat_done #1.#2;{ #2[#1]}%
\def\XINTinFloatS {\romannumeral0\XINTinfloatS}%
\def\XINTinfloatS
{\expandafter\XINT_infloatS_clean\romannumeral0\XINT_infloat}%
@@ -1990,7 +1855,7 @@
}%
\def\XINT_infloat_a #1.#2#3#4%
{%
- \if\romannumeral0\XINT_isone#4XY1\expandafter\XINT_infloat_sp
+ \if1\XINT_iSone#4XY\expandafter\XINT_infloat_sp
\else\expandafter\XINT_float_fork\fi #3.{#1}{#2}{#4}%
}%
\def\XINT_infloat_sp #1%
@@ -2024,103 +1889,62 @@
\def\XINT_infloat_sp_c #1.#2%
{%
\if #29\xint_dothis {\XINT_infloat_sp_d\XINT_infloat_Wb }\fi
- \xint_orthat {\XINT_infloat_sp_d\xint_c_ }#1.#2%
+ \xint_orthat {\XINT_infloat_sp_d .}#1.#2%
}%
\def\XINT_infloat_sp_d #1#2.#3.#4.%#5.%
{%
\expandafter\XINT_infloat_sp_e
- \romannumeral0\expandafter\XINT_split_fromleft_loop
- \the\numexpr #4+\xint_c_i.{}#3\W\W\W\W\W\W\W\W\Z #1#2.%
+ \romannumeral0\XINT_split_fromleft
+ (\xint_c_i+#4).#3\xint_bye2345678\xint_bye..#1#2.%
}%
-\def\XINT_infloat_sp_e #1.#2.%
+\def\XINT_infloat_sp_e #1.#2.#3#4.#5.%
{%
- \expandafter\XINT_infloat_sp_f
- \romannumeral0\XINT_rord_main {}#1%
- \xint_relax
- \xint_bye\xint_bye\xint_bye\xint_bye
- \xint_bye\xint_bye\xint_bye\xint_bye
- \xint_relax ;%
-}%
-\def\XINT_infloat_sp_f #1%
-{%
- \ifnum #1<\xint_c_v
- \expandafter\XINT_infloat_sp_ga\else\expandafter\XINT_infloat_sp_h\fi
-}%
-\def\XINT_infloat_sp_ga #1;#2#3.#4.%
-{%
- \expandafter\XINT_infloat_sp_done\the\numexpr #3+#4\expandafter.%
- \romannumeral0\XINT_rord_main {}#1%
- \xint_relax
- \xint_bye\xint_bye\xint_bye\xint_bye
- \xint_bye\xint_bye\xint_bye\xint_bye
- \xint_relax ;%
-}%
-\def\XINT_infloat_sp_h #1;#2%
-{%
- \expandafter\XINT_infloat_sp_i
- \romannumeral0\expandafter#2%
- \romannumeral0\XINT_addm_A 0{}1000\W\X\Y\Z #1000\W\X\Y\Z;%
-}%
-\def\XINT_infloat_sp_i #1#2;#3.#4.%
-{%
- \expandafter\XINT_infloat_sp_done\the\numexpr #1+#3+#4.#2;%
+ \expandafter\XINT_infloat_done
+ \the\numexpr#4+#5\expandafter#3\romannumeral0\XINT_dsrr
+ #1\xint_bye\xint_Bye3456789\xint_bye/\xint_c_x\relax;%
}%
\def\XINT_infloat_Q #1.#2#3%
{%
\expandafter\XINT_infloat_Sa
- \romannumeral0\xintiiquo{\XINT_dsx_addzerosnofuss {#1}{#2}}{#3}\Z {#1}%
+ \romannumeral0\xintiiquo{\XINT_dsx_addzeros {#1}#2;}{#3}\Z {#1}%
}%
\def\XINT_infloat_Sa #1%
{%
\if #19\xint_dothis {\XINT_infloat_Sb\XINT_infloat_Wb }\fi
- \xint_orthat {\XINT_infloat_Sb\xint_c_ }#1%
+ \xint_orthat {\XINT_infloat_Sb .}#1%
}%
\def\XINT_infloat_Sb #1#2\Z #3#4%
{%
\expandafter\XINT_infloat_T
- \the\numexpr #4+\xint_c_i\expandafter.%
- \romannumeral`&&@\XINT_lenrord_loop 0.{}#2\Z\W\W\W\W\W\W\W\Z #1{#3}%
+ \the\numexpr\xint_c_ix\XINT_length_loop
+ #2\xint_relax\xint_relax\xint_relax\xint_relax
+ \xint_relax\xint_relax\xint_relax\xint_relax\xint_relax
+ \xint_c_i\xint_c_ii\xint_c_iii\xint_c_iv
+ \xint_c_v\xint_c_vi\xint_c_vii\xint_c_viii\xint_c_ix\xint_bye-#4.%
+ {#2}#1{#3}%
}%
-\def\XINT_infloat_T #1.#2.#3%
+\def\XINT_infloat_T #1.%
{%
- \ifnum #2>#1 \xint_dothis{\XINT_infloat_U\XINT_infloat_Xb}\fi
- \xint_orthat{\XINT_infloat_U\XINT_infloat_Xa #3}%
-}%
-\def\XINT_infloat_U #1#2%
-{%
- \ifnum #2<\xint_c_v
- \expandafter\XINT_infloat_Va
- \else
- \expandafter\XINT_infloat_Vb
- \fi #1%
+ \if2#1\expandafter\XINT_infloat_Ub\else\expandafter\XINT_infloat_Ua\fi
}%
-\def\XINT_infloat_Va #1#2\Z #3%
+\def\XINT_infloat_Ua #1#2#3#4%
{%
- \expandafter#1%
- \romannumeral0\expandafter\xint_c_
- \romannumeral0\XINT_rord_main {}#2%
- \xint_relax
- \xint_bye\xint_bye\xint_bye\xint_bye
- \xint_bye\xint_bye\xint_bye\xint_bye
- \xint_relax \Z
+ \expandafter\XINT_infloat_done
+ \the\numexpr\xint_c_i+#4-#3\romannumeral0\expandafter#2%
+ \romannumeral0\XINT_dsrr
+ #1\xint_bye\xint_Bye3456789\xint_bye/\xint_c_x\relax;%
}%
-\def\XINT_infloat_Vb #1#2\Z #3%
+\def\XINT_infloat_Ub #1#2#3#4%
{%
- \expandafter #1%
- \romannumeral0\expandafter #3%
- \romannumeral0\XINT_addm_A 0{}1000\W\X\Y\Z #2000\W\X\Y\Z \Z
+ \expandafter\XINT_infloat_done
+ \the\numexpr\xint_c_ii+#4-#3\romannumeral0\expandafter#2%
+ \romannumeral0\expandafter\XINT_dsrr
+ \romannumeral0\XINT_dsr
+ #1\xint_bye\xint_Bye3456789\xint_bye+\xint_c_v)/\xint_c_x-\xint_c_i\relax
+ \xint_bye\xint_Bye3456789\xint_bye/\xint_c_x\relax;%
}%
\def\XINT_infloat_Wb #1#2%
- {\if #11\xint_dothis{\xint_c_i1}\fi\xint_orthat{\xint_c_#1#2}}%
-\def\XINT_infloat_Xa #1#2\Z #3#4%
-{%
- \expandafter\XINT_infloat_Y\the\numexpr #1+\xint_c_i+#4-#3.{#2}%
-}%
-\def\XINT_infloat_Xb #1#2\Z #3#4%
-{%
- \expandafter\XINT_infloat_Y\the\numexpr #1+\xint_c_ii+#4-#3.{#2}%
-}%
-\def\XINT_infloat_Y #1.#2{ #2[#1]}%
+ {\if #11\xint_dothis{+\xint_c_i.1}\fi\xint_orthat{.#1#2}}%
\def\xintPFloat {\romannumeral0\xintpfloat }%
\def\xintpfloat #1{\XINT_pfloat_chkopt #1\xint_relax }%
\def\XINT_pfloat_chkopt #1%
@@ -2370,7 +2194,7 @@
\def\XINT_flpow_aa #1[#2]#3%
{%
\expandafter\XINT_flpow_ab\the\numexpr #2-#3\expandafter.%
- \romannumeral0\XINT_dsx_addzerosnofuss {#3}{}.#1.%
+ \romannumeral\XINT_rep #3\endcsname0.#1.%
}%
\def\XINT_flpow_ab #1.#2.#3.{\XINT_flpow_a #3#2[#1]}%
\def\XINT_flpow_a #1%
@@ -2393,8 +2217,8 @@
\def\XINT_flpow_truncate #1.#2.#3.%
{%
\expandafter\XINT_flpow_truncate_a
- \romannumeral0\XINT_split_fromleft_loop #3.{}#2\W\W\W\W\W\W\W\W\Z
- #1.#3.%
+ \romannumeral0\XINT_split_fromleft
+ #3.#2\xint_bye2345678\xint_bye..#1.#3.%
}%
\def\XINT_flpow_truncate_a #1.#2.#3.{#3+\xintLength{#2}.#1.}%
\def\XINT_flpow_loopI #1.%
@@ -2552,7 +2376,7 @@
\def\XINT_flpower_aa #1[#2]#3%
{%
\expandafter\XINT_flpower_ab\the\numexpr #2-#3\expandafter.%
- \romannumeral0\XINT_dsx_addzerosnofuss {#3}{}.#1.%
+ \romannumeral\XINT_rep #3\endcsname0.#1.%
}%
\def\XINT_flpower_ab #1.#2.#3.{\XINT_flpower_a #3#2[#1]}%
\def\XINT_flpower_a #1%
@@ -2572,7 +2396,9 @@
\if1\XINT_isOne {#1}\xint_dothis\XINT_flpower_ItoIII\fi
\if1\xintiiOdd {#1}\xint_dothis{\expandafter\XINT_flpower_loopI_odd}\fi
\xint_orthat{\expandafter\XINT_flpower_loopI_even}%
- \romannumeral0\xinthalf{#1}.%
+ \romannumeral0\XINT_half
+ #1\xint_bye\xint_Bye345678\xint_bye
+ *\xint_c_v+\xint_c_v)/\xint_c_x-\xint_c_i\relax.%
}%
\def\XINT_flpower_ItoIII #1.#2.#3.#4.#5%
{%
@@ -2598,7 +2424,8 @@
\if1\XINT_isOne{#1}\xint_dothis\XINT_flpower_IItoIII\fi
\if1\xintiiOdd{#1}\xint_dothis{\expandafter\XINT_flpower_loopII_odd}\fi
\xint_orthat{\expandafter\XINT_flpower_loopII_even}%
- \romannumeral0\xinthalf{#1}.%
+ \romannumeral0\XINT_half#1\xint_bye\xint_Bye345678\xint_bye
+ *\xint_c_v+\xint_c_v)/\xint_c_x-\xint_c_i\relax.%
}%
\def\XINT_flpower_loopII_even #1.#2.#3.#4.%
{%
@@ -3125,13 +2952,14 @@
{%
\expandafter\XINT_flsqrt_c
\romannumeral0\xintiisub
- {\XINT_dsx_addzerosnofuss {#1}{#2}}%
- {\xintiiDivRound{\XINT_dsx_addzerosnofuss {#1}{#3}}{\XINT_dbl_pos#2\Z}}.%
+ {\XINT_dsx_addzeros {#1}#2;}%
+ {\xintiiDivRound{\XINT_dsx_addzeros {#1}#3;}%
+ {\XINT_dbl#2\xint_bye2345678\xint_bye*\xint_c_ii\relax}}.%
}%
\def\XINT_flsqrt_c #1.#2.%
{%
\expandafter\XINT_flsqrt_d
- \romannumeral0\XINT_split_fromleft_loop #2.{}#1\W\W\W\W\W\W\W\W\Z
+ \romannumeral0\XINT_split_fromleft#2.#1\xint_bye2345678\xint_bye..%
}%
\def\XINT_flsqrt_d #1.#2#3.%
{%