summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/minifp
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2013-01-12 00:02:04 +0000
committerKarl Berry <karl@freefriends.org>2013-01-12 00:02:04 +0000
commitcc53d59f49808d6b80420a89e05e3f39ad96412a (patch)
treef36727477016c8570f3016dd2f2c9f4c3890240b /Master/texmf-dist/tex/generic/minifp
parent84897d5d7dcc5750e11a40c7a1f4d2d2f6154bc7 (diff)
minifp (11jan13)
git-svn-id: svn://tug.org/texlive/trunk@28804 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/minifp')
-rw-r--r--Master/texmf-dist/tex/generic/minifp/mfpextra.tex638
-rw-r--r--Master/texmf-dist/tex/generic/minifp/minifp.sty806
2 files changed, 1444 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/minifp/mfpextra.tex b/Master/texmf-dist/tex/generic/minifp/mfpextra.tex
new file mode 100644
index 00000000000..7d541bd4747
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/minifp/mfpextra.tex
@@ -0,0 +1,638 @@
+%%
+%% This is file `mfpextra.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% minifp.dtx (with options: `extra')
+%%
+%% -------------------------------------------------------------------
+%%
+%% Copyright 2008--2010, Daniel H. Luecking
+%%
+%% Minifp may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License, either version 1.3b of this license or (at
+%% your option) any later version. The latest version of this license is in
+%% <http://www.latex-project.org/lppl.txt>
+%% and version 1.3c or later is part of all distributions of LaTeX version
+%% 2008/12/01 or later.
+%%
+%% Minifp has maintenance status "author-maintained". The Current Maintainer
+%% is Daniel H. Luecking. The Base Interpreters associated
+%% with minifp are plain TeX and LaTeX.
+%%
+\def\MFP@Rextra{%
+ \def\Rcos {\MFP@stack@Unary\MFP@Rcos }%
+ \def\Rsin {\MFP@stack@Unary\MFP@Rsin }%
+ \def\Rangle{\MFP@stack@Binary\MFP@Rangle}%
+ \def\Rrad {\MFP@stack@Unary\MFP@Rrad }%
+ \def\Rdeg {\MFP@stack@Unary\MFP@Rdeg }%
+ \def\Rlog {\MFP@stack@Unary\MFP@Rlog }%
+ \def\Rln {\MFP@stack@Unary\MFP@Rln }%
+ \def\Rexp {\MFP@stack@Unary\MFP@Rexp }%
+ \def\Rsqrt {\MFP@stack@Unary\MFP@Rsqrt}%
+ \def\Rpow {\MFP@stack@Binary\MFP@Rpow}}%
+\def\MFPcos {\MFP@op@Unary\MFP@Rcos }%
+\def\MFPsin {\MFP@op@Unary\MFP@Rsin }%
+\def\MFPangle {\MFP@op@Binary\MFP@Rangle}%
+\def\MFPrad {\MFP@op@Unary\MFP@Rrad }%
+\def\MFPdeg {\MFP@op@Unary\MFP@Rdeg }%
+\def\MFPlog {\MFP@op@Unary\MFP@Rlog }%
+\def\MFPln {\MFP@op@Unary\MFP@Rln }%
+\def\MFPexp {\MFP@op@Unary\MFP@Rexp }%
+\def\MFPsqrt {\MFP@op@Unary\MFP@Rsqrt}%
+\def\MFPpow {\MFP@op@Binary\MFP@Rpow}%
+\def\MFP@logofzero@err{%
+ \MFP@errmsg{logarithm of zero}%
+ {You tried to take the logarithm of zero. What were you %
+ thinking? If you ^^Jcontinue, the value %
+ assigned will be -\LogOfZeroInt.\LogOfZeroFrac.}}%
+\def\LogOfZeroInt {\MaxRealInt}%
+\def\LogOfZeroFrac{\MaxRealFrac}%
+\def\MFP@expoverflow@err{%
+ \MFP@errmsg{Power too large}%
+ {The power you tried to calcualate is too large for %
+ 8 digits. If you continue, ^^Jthe value assigned will be %
+ \MaxRealInt.\MaxRealFrac.}}%
+\def\MFP@sqrtofneg@err{%
+ \MFP@errmsg{square root of a negative number}%
+ {You tried to take the square root of a negative value. What %
+ were you thinking? If you continue, zero will be returned.}}%
+\def\MFP@badpower@err{%
+ \MFP@errmsg{negative power of zero}%
+ {You tried to take a negative power of zero. What were you
+ thinking? If you ^^Jcontinue, the value assigned will be %
+ \xOverZeroInt.\xOverZeroFrac.}}%
+\def\MFP@Rcopyz#1{\MFP@Rload {#1}\MFP@z@Sgn\MFP@z@Int\MFP@z@Frc}%
+\def\MFP@Rcopyzx{\MFP@Rcopyz x}%
+\def\MFP@Rcopyzy{\MFP@Rcopyz y}%
+\def\MFP@Rdeg{%
+ \MFP@Rcopy xt\MFP@Rload y1{57}{29577951}\MFP@Rmul
+ \MFP@Rcopyz s\MFP@Rcopy tx\MFP@Rload y10{30823209}\MFP@Rmul
+ \MFP@tempa\MFP@z@Int\relax
+ \ifnum\MFP@z@Frc<50000000 \else \advance\MFP@tempa 1 \fi
+ \MFP@Rload x{\ifnum\MFP@tempa>0 \MFP@z@Sgn\else0\fi}0\MFP@tempa
+ \MFP@Rcopy sy\MFP@Radd}%
+\def\MFP@Rrad{%
+ \MFP@Rcopy xt\MFP@Rload y10{0174 5329}\MFP@Rmul
+ \MFP@Rcopyz s\MFP@Rcopy tx\MFP@Rload y10{25199433}\MFP@Rmul
+ \MFP@tempa\MFP@z@Int\relax
+ \ifnum\MFP@z@Frc<50000000 \else \advance\MFP@tempa 1 \fi
+ \MFP@Rload x{\ifnum\MFP@tempa>0 \MFP@z@Sgn\else0\fi}0\MFP@tempa
+ \MFP@Rcopy sy\MFP@Radd}%
+\def\MFP@Rcos{%
+ \MFP@Rcopy xy\MFP@Rload x1{90}0\MFP@Rsub
+ \MFP@Rcopyzx\MFP@Rsin}%
+\def\MFP@Rsin{%
+ \ifnum \MFP@x@Sgn=0 % return 0
+ \MFP@Rzero
+ \else
+ \MFP@tempa\MFP@x@Int\relax
+ \MFP@reduce@angle
+ \ifnum \MFP@tempa<180
+ \edef\MFP@sin@Sgn{\MFP@x@Sgn}%
+ \else
+ \edef\MFP@sin@Sgn{\number-\MFP@x@Sgn}%
+ \advance \MFP@tempa-180
+ \fi
+ \MFP@tempb\MFP@x@Frc\relax
+ \ifnum\MFP@tempa>0
+ \MFP@@Rsin
+ \else\ifnum\MFP@tempb>0
+ \MFP@@Rsin
+ \else
+ \MFP@Rzero
+ \fi\fi
+ \fi}%
+\def\MFP@reduce@angle{%
+ \ifnum\MFP@tempa<360
+ \else
+ \advance\MFP@tempa-360
+ \@xp\MFP@reduce@angle
+ \fi}%
+\def\MFP@@Rsin{%
+ \ifnum\MFP@tempa<90
+ \else
+ \ifnum\MFP@tempb>0
+ \advance\MFP@tempa 1
+ \MFP@tempb -\MFP@tempb
+ \advance\MFP@tempb \MFP@ttteight\relax
+ \fi
+ \MFP@tempa -\MFP@tempa
+ \advance\MFP@tempa 180
+ \fi
+ \ifnum\MFP@tempa=90
+ \MFP@Rloadz \MFP@sin@Sgn10%
+ \else
+ \advance\MFP@tempb 50
+ \divide\MFP@tempb 100
+ \multiply\MFP@tempa 1000000
+ \advance\MFP@tempb\MFP@tempa
+ \MFP@Rsin@prog
+ \fi}%
+\def\MFP@Rsin@prog{%
+ \MFP@Rload x10\MFP@tempb
+ \MFP@Rcopy xs%
+ \MFP@Rsq
+ \MFP@Rcopyz t%
+ \MFP@Rcopy tx%
+ \MFP@Rload y10{00559959}\MFP@Rsmul\MFP@com@iter{01450559}%
+ \MFP@com@iter{01952675}\MFP@com@iter{02769249}\MFP@com@iter{04230797}%
+ \MFP@com@iter{07252796}\MFP@com@iter{15230871}\MFP@com@iter{50769570}%
+ \MFP@flipz\MFP@Rcopyzx\MFP@Rcopy sy\MFP@Rsmul
+ \MFP@Rcopyzx\MFP@Rload y11{74532925}\MFP@Rmul
+ \let\MFP@z@Sgn\MFP@sin@Sgn}%
+\def\MFP@flipz{%
+ \ifnum\MFP@z@Sgn=0
+ \MFP@Rloadz 110%
+ \else
+ \MFP@tempa\MFP@ttteight % representing 1.00000000
+ \advance\MFP@tempa-\MFP@z@Frc\relax
+ \MFP@Rloadz{\ifcase\MFP@tempa 0\else1\fi}0\MFP@tempa
+ \fi}%
+\def\MFP@com@iter#1{\MFP@flipz
+ \MFP@Rcopyzx\MFP@Rcopy ty\MFP@Rsmul
+ \MFP@Rcopyzx\MFP@Rload y10{#1}\MFP@Rsmul}%
+\def\MFP@Rsmul{%
+ \ifnum \MFP@x@Sgn=0
+ \MFP@Rzero
+ \else\ifnum \MFP@y@Sgn=0
+ \MFP@Rzero
+ \else\ifnum\MFP@x@Int>0 % x must be 1.0
+ \MFP@Rcopy yz%
+ \else\ifnum\MFP@y@Int>0 % y must be 1.0
+ \MFP@Rcopy xz%
+ \else
+ \MFP@@Rsmul
+ \fi\fi\fi\fi}%
+\def\MFP@@Rsmul{%
+ \MFP@split\MFP@x@Frc\MFP@x@Frc@i\MFP@x@Frc@ii
+ \MFP@split\MFP@y@Frc\MFP@y@Frc@i\MFP@y@Frc@ii
+ \def\MFP@z@Frc@i {0}\def\MFP@z@Frc@ii {0}%
+ \def\MFP@z@Frc@iii{0}\def\MFP@z@Frc@iv {0}%
+ \MFP@tempb\MFP@y@Frc@ii\relax
+ \MFP@multiplyone\MFP@x@Frc@ii\MFP@z@Frc@iv
+ \MFP@multiplyone\MFP@x@Frc@i\MFP@z@Frc@iii
+ \MFP@tempb\MFP@y@Frc@i\relax
+ \MFP@multiplyone\MFP@x@Frc@ii\MFP@z@Frc@iii
+ \MFP@multiplyone\MFP@x@Frc@i\MFP@z@Frc@ii
+ \MFP@carrym\MFP@z@Frc@iv\MFP@z@Frc@iii
+ \MFP@carrym\MFP@z@Frc@iii\MFP@z@Frc@ii
+ \ifnum\MFP@z@Frc@iii<5000 \else
+ \MFP@tempb\MFP@z@Frc@ii
+ \advance\MFP@tempb1
+ \edef\MFP@z@Frc@ii{\number\MFP@tempb}\fi
+ \MFP@carrym\MFP@z@Frc@ii\MFP@z@Frc@i
+ \makeMFP@fourdigits\MFP@z@Frc@iv
+ \makeMFP@fourdigits\MFP@z@Frc@iii
+ \makeMFP@fourdigits\MFP@z@Frc@ii
+ \makeMFP@fourdigits\MFP@z@Frc@i
+ \def\MFP@z@Int{0}%
+ \edef\MFP@z@Frc{\MFP@z@Frc@i\MFP@z@Frc@ii}%
+ \edef\MFP@z@Sgn{\ifnum\MFP@z@Frc=0 0\else 1\fi}%
+ \edef\MFP@z@Und{\MFP@z@Frc@iii\MFP@z@Frc@iv}%
+ \edef\MFP@z@Ovr{0}}%
+\def\MFP@Rangle{%
+ \ifcase\MFP@y@Sgn\relax
+ \ifcase\MFP@x@Sgn\relax
+ \MFP@warn{Point (0,0) has no angle. Returning 0 anyway}%
+ \MFP@Rzero
+ \or
+ \MFP@Rzero
+ \else
+ \MFP@Rloadz 1{180}0%
+ \fi
+ \@xp\@gobble
+ \or
+ \def\MFP@angle@Sgn{1}\@xp\@firstofone
+ \else
+ \def\MFP@y@Sgn{1}%
+ \def\MFP@angle@Sgn{-1}\@xp\@firstofone
+ \fi
+ {\ifcase\MFP@x@Sgn\relax
+ \MFP@Rloadz1{90}0%
+ \or \MFP@@Rangle
+ \else
+ \def\MFP@x@Sgn{1}\MFP@@Rangle
+ \MFP@Rcopyzy\MFP@Rload x1{180}0\MFP@Rsub
+ \fi
+ \let\MFP@z@Sgn\MFP@angle@Sgn
+ }}%
+\def\MFP@@Rangle{%
+ \MFP@Rcmp
+ \ifMFP@neg
+ \MFP@Rcopy xs\MFP@Rcopy yx\MFP@Rcopy sy%
+ \MFP@@@Rangle
+ \MFP@Rload x1{90}0\MFP@Rcopyzy\MFP@Rsub
+ \else
+ \MFP@@@Rangle
+ \fi
+}%
+\def\MFP@Rquad{\MFP@Rdbl\MFP@Rcopyzx\MFP@Rdbl}%
+\def\MFP@@@Rangle{%
+ \MFP@Rcopy xs\MFP@Rcopy yt%
+ \ifnum\MFP@y@Int<500000
+ \else
+ \MFP@Rload y1{200}0\MFP@Rdiv
+ \MFP@Rcopyz s\MFP@Rcopy tx%
+ \MFP@Rload y1{200}0\MFP@Rdiv
+ \MFP@Rcopyz t%
+ \fi
+ \MFP@Rcopy tx\MFP@Rdbl\MFP@Rcopyzx\MFP@Rcopy sy\MFP@Rcmp
+ \ifMFP@pos
+ \MFP@Rsub\MFP@Rcopyz u\MFP@Rcopy sx\MFP@Rdbl
+ \MFP@Rcopyzx\MFP@Rcopy ty\MFP@Radd
+ \MFP@Rcopyz s\MFP@Rcopy ut%
+ \MFP@Rload a1{2656}{50511771}%
+ \else
+ \MFP@Rload a000%
+ \fi
+ \MFP@Rcopy tx\MFP@Rquad\MFP@Rcopyzx\MFP@Rcopy sy\MFP@Rcmp
+ \ifMFP@pos
+ \MFP@Rsub\MFP@Rcopyz u\MFP@Rcopy sx\MFP@Rquad
+ \MFP@Rcopyzx\MFP@Rcopy ty\MFP@Radd
+ \MFP@Rcopyz s\MFP@Rcopy ut%
+ \MFP@Rcopy ax\MFP@Rload y1{1403}{62434679}%
+ \MFP@Radd\MFP@Rcopy za%
+ \fi
+ \MFP@Rcopy tx\MFP@RmulC
+ \MFP@Rcopyzx\MFP@Rcopy sy\MFP@Rdiv
+ \MFP@Rcopyzx\MFP@Ratanc
+ \MFP@Rcopyzx\MFP@Rdeg
+ \MFP@Rcopyzx\MFP@Rcopy ay\MFP@Radd
+ \MFP@Rcopyzx\MFP@RdivC}%
+\def\MFP@RmulC{%
+ \makeMFP@eightdigits\MFP@x@Frc
+ \edef\MFP@Tmp{\number\MFP@x@Int.\MFP@x@Frc}%
+ \@xp\MFP@@RmulC\MFP@Tmp\mfp@end}%
+\def\MFP@@RmulC#1.#2#3#4\mfp@end{%
+ \MFP@Rloadz\MFP@x@Sgn{#1#2#3}{#400}}%
+\def\MFP@RdivC{%
+ \makeMFP@eightdigits\MFP@x@Int
+ \makeMFP@eightdigits\MFP@x@Frc
+ \@XP\MFP@@RdivC\@xp\MFP@x@Int\MFP@x@Frc\mfp@end}%
+\def\MFP@@RdivC#1#2#3#4#5#6{%
+ \edef\MFP@z@Int{\number#1#2#3#4#5#6}%
+ \MFP@@@RdivC}%
+\def\MFP@@@RdivC#1#2#3#4#5#6#7#8#9\mfp@end{%
+ \MFP@tempa#1#2#3#4#5#6#7#8\relax
+ \ifnum#9>49 \advance\MFP@tempa1 \fi
+ \edef\MFP@z@Sgn{\MFP@x@Sgn}%
+ \ifnum\MFP@tempa=0 \ifnum\MFP@x@Int=0 \def\MFP@z@Sgn{0}\fi\fi
+ \MFP@Rloadz\MFP@z@Sgn\MFP@z@Int\MFP@tempa}%
+\def\MFP@scaledmul{\MFP@Rmul\MFP@Rcopyzx\MFP@RdivC}%
+\def\MFP@atan@iter#1#2{%
+ \MFP@Rcopy uy\MFP@scaledmul
+ \MFP@Rcopyzx\MFP@Rload y1{#1}{#2}\MFP@scaledmul
+ \MFP@Rcopyzy\MFP@Rload x1{100}{00000000}%
+ \MFP@Rsub\MFP@Rcopyzx}%
+\def\MFP@Ratanc{%
+ \MFP@Rcopy xs%
+ \MFP@Rcopy xy\MFP@scaledmul\MFP@Rcopyz u%
+ \MFP@Rcopyzx\MFP@Rload y1{86}{66666667}%
+ \MFP@scaledmul
+ \MFP@Rcopyzy\MFP@Rload x1{100}{00000000}%
+ \MFP@Rsub\MFP@Rcopyzx
+ \MFP@atan@iter{84}{61538462}\MFP@atan@iter{81}{81818182}%
+ \MFP@atan@iter{77}{77777778}\MFP@atan@iter{71}{42857143}%
+ \MFP@atan@iter{60}{00000000}\MFP@atan@iter{33}{33333333}%
+ \MFP@Rcopy sy\MFP@scaledmul}%
+\def\MFP@Rlog{%
+ \ifnum\MFP@x@Sgn=0
+ \MFP@logofzero@err
+ \MFP@Rloadz{-1}\LogOfZeroInt\LogOfZeroFrac
+ \else
+ \ifnum \MFP@x@Sgn<0
+ \MFP@warn{The logarithm of a negative number is complex.%
+ \MFP@msgbreak Only the real part will be computed}%
+ \fi
+ \MFP@Rload s000%
+ \ifnum \MFP@x@Int=0
+ \edef\MFP@x@Tmp{\number\MFP@x@Frc}%
+ \MFP@tempa=\MFP@numzeros\MFP@x@Tmp\relax
+ \def\MFP@s@Sgn{-1}%
+ \edef\MFP@t@Int{\@xp\MFP@firstofmany\MFP@x@Tmp\mfp@end}%
+ \edef\MFP@t@Frc{\@xp\@gobble\MFP@x@Tmp0}%
+ \MFPpadto@eight\MFP@t@Frc
+ \else
+ \MFP@tempa\MFP@numdigits\MFP@x@Int
+ \edef\MFP@x@Tmp{\MFP@x@Int\MFP@x@Frc}% gather all digits
+ \edef\MFP@s@Sgn{1}%
+ \edef\MFP@t@Int{\@xp\MFP@firstofmany\MFP@x@Tmp\mfp@end}%
+ \edef\MFP@x@Tmp{\@xp\@gobble\MFP@x@Tmp}%
+ \edef\MFP@t@Frc{\@xp\MFP@firsteightofmany\MFP@x@Tmp\mfp@end}%
+ \fi
+ \edef\MFP@s@Int{\number\MFP@tempa}%
+ \def\MFP@t@Sgn{1}%
+ \MFP@Rlog@reduce
+ \ifnum\MFP@t@Frc=0
+ \MFP@Rcopy sz%
+ \else
+ \MFP@Rlog@prog
+ \fi
+ \fi}%
+\def\showreg #1{% for debugging
+\begingroup
+ \edef\reg{%
+ #1 = (\csname MFP@#1@Sgn\endcsname)%
+ \csname MFP@#1@Int\endcsname.%
+ \csname MFP@#1@Frc\endcsname}%
+ \show\reg
+\endgroup}%
+\def\MFP@numdigits#1{\@xp\MFP@ninthofmany#176543210\mfp@end}%
+\def\MFP@numzeros#1{%
+ \@xp\MFP@ninthofmany#112345678\mfp@end}%
+\def\MFP@Rlog@reduce{%
+ \MFP@reduceonce 3{16227766}{31622777}{50000000}%
+ \MFP@reduceonce 1{77827941}{56234133}{25000000}%
+ \MFP@reduceonce 1{33352143}{74989421}{12500000}%
+ \MFP@reduceonce 1{15478198}{86596433}{06250000}}%
+\def\MFP@reduceonce#1#2#3#4{%
+ \MFP@Rcopy tx\MFP@Rload y1{#1}{#2}\MFP@Rcmp
+ \ifMFP@neg\else
+ \MFP@Rload y10{#3}\MFP@Rmul
+ \MFP@Rcopyz t\MFP@Rcopy sx\MFP@Rload y10{#4}\MFP@Radd
+ \MFP@Rcopyz s%
+ \fi}%
+\def\MFP@Rlog@prog{%
+ \MFP@Rcopy tx\MFP@Rdecr
+ \MFP@Rcopyz t%
+ \MFP@Rcopyzx\MFP@Rload y10{43750000}\MFP@Rsmul
+ \MFP@com@iter{85714286}\MFP@com@iter{83333333}\MFP@com@iter{80000000}%
+ \MFP@com@iter{75000000}\MFP@com@iter{66666667}\MFP@com@iter{50000000}%
+ \MFP@com@iter{43429448}\MFP@Rcopyzx\MFP@Rcopy sy\MFP@Radd}%
+\def\MFP@Rln{%
+ \MFP@Rlog\MFP@Rcopyzx\MFP@Rload y12{30258509}\MFP@Rmul}%
+\def\MFP@Rexp{%
+ \ifcase\MFP@x@Sgn\relax
+ \MFP@Rloadz 110%
+ \or
+ \MFP@Rexp@pos
+ \else
+ \def\MFP@x@Sgn{1}%
+ \MFP@Rexp@neg % computes e^{-x}, not e^x
+ \fi}%
+\def\MFP@Rexp@pos{%
+ \MFP@Rload y1{18}{42068074}\MFP@Rcmp
+ \ifMFP@pos % overflow
+ \MFP@expoverflow@err
+ \MFP@Rloadz 1\MaxRealInt\MaxRealFrac
+ \else % handle integer part
+ \MFP@tempa\MFP@x@Int
+ \edef\MFP@powerof@e{%
+ 1\ifcase\MFP@tempa
+ 10\or
+ 2{71828183}\or
+ 7{38905610}\or
+ {20}{08553692}\or
+ {54}{59815003}\or
+ {148}{41315910}\or
+ {403}{42879349}\or
+ {1096}{63315843}\or
+ {2980}{95798704}\or
+ {8103}{08392758}\or
+ {22026}{46579481}\or
+ {59874}{14171520}\or
+ {162754}{79141900}\or
+ {442413}{39200892}\or
+ {1202604}{28416478}\or
+ {3269017}{37247211}\or
+ {8886110}{52050787}\or
+ {24154952}{75357530}\or
+ {65659969}{13733051}\else
+ {\MaxRealInt}{\MaxRealFrac}\fi}%
+ \@xp\MFP@Rloadz\MFP@powerof@e
+ \ifnum\MFP@x@Frc=0
+ \else
+ \MFP@Rcopyz s%
+ \MFP@tempa=\@xp\MFP@firstofmany\MFP@x@Frc\mfp@end
+ \edef\MFP@powerof@e{%
+ y1\ifcase\MFP@tempa
+ 10\or
+ 1{10517092}\or
+ 1{22140276}\or
+ 1{34985881}\or
+ 1{49182470}\or
+ 1{64872127}\or
+ 1{82211880}\or
+ 2{01375271}\or
+ 2{22554093}\or
+ 2{45960311}\else
+ 10\fi}%
+ \edef\MFP@t@Frc{0\@xp\@gobble\MFP@x@Frc}%
+ \MFP@Rcopy sx\@xp\MFP@Rload\MFP@powerof@e\MFP@Rmul
+ \ifnum\MFP@t@Frc=0
+ \else % handle the rest
+ \MFP@Rcopyz s\MFP@Rload t10\MFP@t@Frc
+ \MFP@Rexp@pos@prog
+ \MFP@Rcopy sx\MFP@Rcopyzy\MFP@Rmul
+ \fi
+ \fi
+ \fi}%
+\def\MFP@Rexp@pos@prog{%
+ \MFP@Rcopy tz\MFP@Rexp@iter{16666667}\MFP@Rexp@iter{20000000}%
+ \MFP@Rexp@iter{25000000}\MFP@Rexp@iter{33333333}%
+ \MFP@Rexp@iter{50000000}\MFP@Rcopyzx\MFP@Rincr}%
+\def\MFP@Rexp@iter#1{%
+ \MFP@Rcopyzx\MFP@Rload y10{#1}\MFP@Rsmul
+ \MFP@Rcopyzx\MFP@Rcopy ty\MFP@Rsmul
+ \MFP@Rcopyzx\MFP@Rcopy ty\MFP@Radd}%
+\def\MFP@Rexp@neg{%
+ \MFP@Rload y1{19}{11382792}%
+ \MFP@Rcmp
+ \ifMFP@pos
+ \MFP@Rloadz 000%
+ \else % handle integer part
+ \MFP@tempa\MFP@x@Int
+ \edef\MFP@powerof@e{%
+ \ifcase\MFP@tempa
+ 11{0}\or
+ 10{36787944}\or
+ 10{13533528}\or
+ 10{04978707}\or
+ 10{01831564}\or
+ 10{00673795}\or
+ 10{00247875}\or
+ 10{00091188}\or
+ 10{00033546}\or
+ 10{00012341}\or
+ 10{00004540}\or
+ 10{00001670}\or
+ 10{00000614}\or
+ 10{00000226}\or
+ 10{00000083}\or
+ 10{00000031}\or
+ 10{00000011}\or
+ 10{00000004}\or
+ 10{00000002}\or
+ 10{00000001}\else
+ 000\fi}%
+ \@xp\MFP@Rloadz\MFP@powerof@e
+ \ifnum\MFP@x@Frc=0
+ \else % handle first decimal digit
+ \MFP@Rcopyz s%
+ \MFP@tempa=\@xp\MFP@firstofmany\MFP@x@Frc\mfp@end
+ \edef\MFP@powerof@e{%
+ y1\ifcase\MFP@tempa
+ 10\or
+ 0{90483742}\or
+ 0{81873075}\or
+ 0{74081822}\or
+ 0{67032005}\or
+ 0{60653066}\or
+ 0{54881164}\or
+ 0{49658530}\or
+ 0{44932896}\or
+ 0{40656966}\else
+ 10\fi}%
+ \edef\MFP@t@Frc{0\@xp\@gobble\MFP@x@Frc}%
+ \MFP@Rcopy sx\@xp\MFP@Rload\MFP@powerof@e\MFP@Rmul
+ \ifnum\MFP@t@Frc=0
+ \else % handle the rest
+ \MFP@Rcopyz s\MFP@Rload t10\MFP@t@Frc
+ \MFP@Rexp@neg@prog
+ \MFP@Rcopy sx\MFP@Rcopyzy\MFP@Rmul
+ \fi
+ \fi
+ \fi}%
+\def\MFP@Rexp@neg@prog{%
+ \MFP@Rcopy tx\MFP@Rload y10{16666667}\MFP@Rsmul
+ \MFP@com@iter{20000000}\MFP@com@iter{25000000}%
+ \MFP@com@iter{33333333}\MFP@com@iter{50000000}%
+ \MFP@flipz\MFP@Rcopyzx\MFP@Rcopy ty\MFP@Rsmul\MFP@flipz}%
+\def\MFP@Rpow{%
+ \ifnum\MFP@y@Frc>0
+ \MFP@warn{The "pow" function requires an integer power.
+ \MFP@msgbreak The fractional part will be ignored}%
+ \fi
+ \MFP@loopctr=\MFP@y@Int\relax
+ \ifnum\MFP@loopctr=0 % zero power = 1
+ \MFP@Rloadz 110%
+ \else
+ \ifnum\MFP@x@Sgn=0
+ \ifnum\MFP@y@Sgn>0 % + powers of zero are 0
+ \MFP@Rloadz 000%
+ \else % - powers are errors
+ \MFP@badpower@err
+ \MFP@Rloadz 1\xOverZeroInt\xOverZeroFrac
+ \fi
+ \else % integer power of nonzero number
+ % get the sign in case an overflow interrupts the calculations.
+ \ifnum\MFP@x@Sgn>0
+ \def\MFP@power@Sgn{1}%
+ \else
+ \edef\MFP@power@Sgn{\ifodd\MFP@loopctr -\fi 1}%
+\ifMFPdebug
+ \show\MFP@power@Sgn
+\fi
+ \fi
+ \ifnum\MFP@y@Sgn<0 \MFP@Rinv \MFP@Rcopyzx\fi
+ \ifnum\MFP@loopctr=1
+ \MFP@Rloadz \MFP@power@Sgn\MFP@x@Int\MFP@x@Frc
+ \else
+ \MFP@@Rpow
+\ifMFPdebug
+ \showreg z%
+\fi
+ \fi
+ \fi
+ \fi}% %
+\def\MFP@@Rpow{%
+ \MFP@Rcopy xq% initialize register to be squared
+ \MFP@Rload p110% initialize register to hold partial products
+ \MFP@Rpow@loop}%
+\def\MFP@Rpow@loop{%
+ \ifodd\MFP@loopctr
+ \MFP@Rcopy px\MFP@Rcopy qy\MFP@Rmul
+ \ifnum \MFP@z@Ovr>0 \MFP@handle@expoverflow
+ \else
+ \ifnum\MFP@loopctr>1 \MFP@Rcopyz p\fi
+ \fi
+ \fi
+ \ifnum\MFP@loopctr>1
+ \MFP@Rcopy qx\MFP@Rsq
+ \ifnum \MFP@z@Ovr>0 \MFP@handle@expoverflow
+ \else
+ \MFP@Rcopyz q%
+ \divide\MFP@loopctr 2
+ \@XP\MFP@Rpow@loop
+ \fi
+ \fi}%
+\def\MFP@handle@expoverflow{%
+ \MFP@expoverflow@err
+ \MFP@loopctr=0
+ \MFP@Rloadz\MFP@power@Sgn\MaxRealInt\MaxRealFrac
+}%
+\def\MFP@Rsqrt{%
+ \ifcase\MFP@x@Sgn\relax
+ \MFP@Rzero
+ \or
+ \ifnum\MFP@x@Int=0
+ \let\MFP@sqrt@reduce=Y%
+ \edef\MFP@x@Int{\number\MFP@x@Frc}%
+ \edef\MFP@x@Frc{00000000}%
+ \else
+ \let\MFP@sqrt@reduce=N%
+ \fi
+ \MFP@Rcopy xt%
+ \MFP@Isqrt
+ \MFP@Rcopyz s\MFP@Rcopyzy
+ \MFP@Rcopy tx\MFP@Rdiv
+ \MFP@Rcopy sx\MFP@Rcopyzy\MFP@Radd
+ \MFP@Rcopyzx\MFP@Rhalve
+ \ifx Y\MFP@sqrt@reduce
+ \MFP@Rcopyzx\MFP@Rload y10{10000}\MFP@Rmul
+ \fi
+ \else
+ \MFP@sqrtofneg@err
+ \MFP@Rzero
+ \fi}%
+\def\MFP@ItoQ#1#2{%
+ \MFP@tempa#1\relax\MFP@tempb#2\relax
+ \def\MFP@ItoQ@Tmp{}\MFP@ItoQ@loop}%
+\def\MFP@ItoQ@loop{%
+ \ifodd\MFP@tempb
+ \ifodd\MFP@tempa \advance\MFP@tempb \MFP@ttteight\relax\fi
+ \divide\MFP@tempa2 \divide\MFP@tempb2
+ \edef\MFP@ItoQ@Tmp{\ifodd\MFP@tempb 3\else 1\fi\MFP@ItoQ@Tmp}%
+ \else
+ \ifodd\MFP@tempa \advance\MFP@tempb \MFP@ttteight\relax\fi
+ \divide\MFP@tempa2 \divide\MFP@tempb2
+ \edef\MFP@ItoQ@Tmp{\ifodd\MFP@tempb 2\else 0\fi\MFP@ItoQ@Tmp}%
+ \fi
+ \ifodd\MFP@tempa \advance\MFP@tempb \MFP@ttteight\relax\fi
+ \divide\MFP@tempa 2 \divide\MFP@tempb 2
+ \ifnum\MFP@tempa>0
+ \@xp\MFP@ItoQ@loop
+ \else\ifnum\MFP@tempb>0
+ \@XP\MFP@ItoQ@loop
+ \fi\fi}%
+\def\MFP@Isqrt{%
+ \MFP@ItoQ\MFP@x@Int\MFP@x@Frc
+ \MFP@tempa=0 \MFP@tempb=0 \MFP@tempc=0
+ \expandafter\MFP@Isqrt@loop\MFP@ItoQ@Tmp\mfp@end
+ \MFP@tempa=\MFP@tempc
+ \divide\MFP@tempc\MFP@tttfour
+ \edef\MFP@z@Int{\number\MFP@tempc}%
+ \multiply\MFP@tempc \MFP@tttfour
+ \advance\MFP@tempa -\MFP@tempc
+ \edef\MFP@z@Frc{\number\MFP@tempa}%
+ \makeMFP@fourdigits\MFP@z@Frc
+ \edef\MFP@z@Frc{\MFP@z@Frc0000}%
+ \def\MFP@z@Sgn{1}}%
+\def\MFP@Isqrt@loop#1{%
+ \ifx\mfp@end #1%
+ \else
+ \multiply\MFP@tempa 2 \multiply\MFP@tempb 4 \multiply\MFP@tempc 2
+ \advance \MFP@tempb#1\relax
+ \ifnum\MFP@tempa<\MFP@tempb
+ \advance\MFP@tempc 1 \advance\MFP@tempa 1
+ \advance\MFP@tempb -\MFP@tempa
+ \advance\MFP@tempa 1
+ \fi
+ \expandafter\MFP@Isqrt@loop
+ \fi
+}%
+\endinput
+%%
+%% End of file `mfpextra.tex'.
diff --git a/Master/texmf-dist/tex/generic/minifp/minifp.sty b/Master/texmf-dist/tex/generic/minifp/minifp.sty
new file mode 100644
index 00000000000..21462ece64f
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/minifp/minifp.sty
@@ -0,0 +1,806 @@
+%%
+%% This is file `minifp.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% minifp.dtx (with options: `sty')
+%%
+%% -------------------------------------------------------------------
+%%
+%% Copyright 2008--2010, Daniel H. Luecking
+%%
+%% Minifp may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License, either version 1.3b of this license or (at
+%% your option) any later version. The latest version of this license is in
+%% <http://www.latex-project.org/lppl.txt>
+%% and version 1.3c or later is part of all distributions of LaTeX version
+%% 2008/12/01 or later.
+%%
+%% Minifp has maintenance status "author-maintained". The Current Maintainer
+%% is Daniel H. Luecking. The Base Interpreters associated
+%% with minifp are plain TeX and LaTeX.
+%%
+\def\MFPfiledate{2013/01/01}%
+\def\MFPfileversion{0.9}%
+\expandafter
+\ifx \csname MFP@finish\endcsname\relax
+\else \expandafter\endinput \fi
+\expandafter\edef\csname MFP@finish\endcsname{%
+ \catcode64=\the\catcode64 \space % @
+ \catcode46=\the\catcode46 \space % .
+ \catcode60=\the\catcode60 \space % <
+ \catcode62=\the\catcode62 \space}% >
+\ifx\ProvidesPackage\UndEfInEd
+ \newlinechar`\^^J%
+ \message{%
+ Package minifp: \MFPfiledate\space v\MFPfileversion. %
+ Macros for real number operations %
+ ^^Jand a stack-based programing language.^^J}%
+\else
+ \ProvidesPackage{minifp}[\MFPfiledate\space v\MFPfileversion. %
+ Macros for real number operations %
+ and a stack-based programing language.]%
+ \DeclareOption{extra}{\def\MFPextra{}}%
+ \ProcessOptions\relax
+\fi
+\catcode64=11 % @=letter (already is in LaTeX)
+\ifx\MFPextra\UndEfInEd
+ \def\MFP@loadextra{}%
+\else
+ \def\MFP@loadextra{\input mfpextra\relax}%
+\fi
+\def\MFPloadextra{%
+ \edef\MFP@load@extra{%
+ \catcode46=12 \catcode60=12 \catcode62=12 \catcode64=11
+ \noexpand\input mfpextra\relax
+ \catcode46=\the\catcode46\relax\catcode60=\the\catcode60\relax
+ \catcode62=\the\catcode62\relax\catcode64=\the\catcode64\relax}%
+ \MFP@load@extra}%
+\catcode46=12 % .
+\catcode60=12 % <
+\catcode62=12 % >
+\long\def\gobbleto@mfp@end#1\mfp@end{}%
+\ifx\mfp@end\UndEfInEd\def\mfp@end{\@empty}\fi
+\ifx\documentclass\UndEfInEd
+ \def\MFP@ifnoLaTeX{}%
+\else
+ \let\MFP@ifnoLaTeX\gobbleto@mfp@end
+\fi
+\let\@xp\expandafter
+\def\@XP{\@xp\@xp\@xp}%
+\MFP@ifnoLaTeX
+ \def\@empty{}%
+ \long\def\@gobble#1{}%
+ \def\zap@space#1 #2{#1\ifx#2\@empty\else\@xp\zap@space\fi#2}%
+ \long\def\@ifnextchar#1#2#3{%
+ \let\reserved@d#1%
+ \def\reserved@a{#2}%
+ \def\reserved@b{#3}%
+ \futurelet\@let@token\@ifnch}%
+ \def\@ifnch{%
+ \ifx\@let@token\@sptoken
+ \let\reserved@c\@xifnch
+ \else
+ \ifx\@let@token\reserved@d
+ \let\reserved@c\reserved@a
+ \else
+ \let\reserved@c\reserved@b
+ \fi
+ \fi
+ \reserved@c}%
+ {%
+ \def\:{\global\let\@sptoken= }\: %
+ \def\:{\@xifnch}\@xp\gdef\: {\futurelet\@let@token\@ifnch}%
+ }%
+ \def\@ifstar#1{\@ifnextchar*{\@firstoftwo{#1}}}%
+ \long\def\@firstofone #1{#1}%
+ \long\def\@firstoftwo #1#2{#1}%
+ \long\def\@secondoftwo#1#2{#2}%
+\mfp@end
+\def\MFP@tttfour {10000}% ttt = Ten To The
+\def\MFP@ttteight{100000000}%
+\def\MFP@firstofmany#1#2\mfp@end{#1}%
+\def\MFP@fifthofmany#1#2#3#4#5#6\mfp@end{#5}%
+\def\MFP@ninthofmany#1#2#3#4#5#6#7#8{\MFP@firstofmany}%
+\def\MFP@firsteightofmany#1#2#3#4#5#6#7#8#9\mfp@end{#1#2#3#4#5#6#7#8}%
+\let\MFP@eos\relax
+\def\MFP@EOS{\MFP@eos}%
+\def\MFP@initRstack{\def\MFP@Rstack{\MFP@eos}}%
+\MFP@initRstack
+\countdef \MFP@tempa 0
+\countdef \MFP@tempb 2
+\countdef \MFP@tempc 4
+\countdef \MFP@tempd 6
+\countdef \MFP@tempe 8
+\countdef \MFP@tempf 10
+\newcount \MFP@loopctr
+\def\MFP@endgroup@after#1{\edef\x{\endgroup#1}\x}%
+\def\MFP@endgroup@return{\MFP@endgroup@after\MFP@returned@values}%
+\def\MFP@def@after{\def\noexpand}%
+\def\MFP@returned@values{%
+ \MFP@def@after\MFP@z@Val{\MFP@z@Sign\MFP@z@Int.\MFP@z@Frc}%
+ \MFP@def@after\MFP@z@Ovr{\MFP@z@Ovr}%
+ \MFP@def@after\MFP@z@Und{\MFP@z@Und}%
+ \MFP@def@after\MFPcurr@Sgn{\MFP@z@Sgn}}%
+\def\MFP@subroutine#1{%
+ \begingroup
+ \MFP@basic@init@z
+ #1%
+ \MFP@endgroup@return}%
+\def\MFP@basic@init@z{%
+ \MFP@Rzero
+ \def\MFP@z@Ovr{0}%
+ \def\MFP@z@Und{0}}%
+\def\MFP@Rzero{%
+ \def\MFP@z@Sgn{0}%
+ \def\MFP@z@Int{0}%
+ \def\MFP@z@Frc{00000000}}%
+\def\MFP@errmsg#1#2{%
+\begingroup
+ \newlinechar`\^^J\let~\space
+ \def\MFP@msgbreak{^^J~~~~~~~~~~~~~~}%
+ \edef\reserved@a{\errhelp{#2}}\reserved@a
+ \errmessage{MiniFP error: #1}%
+\endgroup}%
+\def\MFP@popempty@err{%
+ \MFP@errmsg{cannot pop from an empty stack}%
+ {There were no items on the stack for the POP operation. %
+ If you continue, ^^Jthe macro will contain the %
+ value \EndofStack.}}%
+\def\EndofStack{0.00000000}%
+\def\MFP@dividebyzero@err{%
+ \MFP@errmsg{division by zero}%
+ {You tried to divide by zero. What were you thinking? %
+ If you continue, ^^Jthe value assigned will be either %
+ \ZeroOverZeroInt.\ZeroOverZeroFrac~(numerator=0) or %
+ ^^J+/-\xOverZeroInt.\xOverZeroFrac~(numerator<>0).}}%
+\def\MFP@warn#1{%
+\begingroup
+ \newlinechar`\^^J\let~\space
+ \def\MFP@msgbreak{^^J~~~~~~~~~~~~~~~~}%
+ \immediate\write16{^^JMiniFP warning: #1.^^J}%
+\endgroup}%
+\def\MaxRealInt {99999999}%
+\def\MaxRealFrac {99999999}%
+\def\xOverZeroInt {\MaxRealInt}%
+\def\xOverZeroFrac {\MaxRealFrac}%
+\def\ZeroOverZeroInt {0}%
+\def\ZeroOverZeroFrac{00000000}%
+\def\MFPparse@real#1#2#3#4{%
+ \MFPnospace@def\MFPtemp@Val{#4}%
+ \MFPprocess@into@parts\MFPtemp@Val#1#2#3%
+ \MFPpadto@eight#3}%
+\def\MFPparse@x{\MFPparse@real\MFP@x@Sgn\MFP@x@Int\MFP@x@Frc}%
+\def\MFPparse@y{\MFPparse@real\MFP@y@Sgn\MFP@y@Int\MFP@y@Frc}%
+\def\MFPnospace@def#1#2{%
+ \edef#1{#2\space}\edef#1{\@xp\zap@space#1\@empty}}%
+\def\MFPprocess@into@parts#1#2#3#4{%
+ \@xp\MFPsplit@dot#1..\mfp@end #3#4%
+ \ifnum#31<0
+ \def#2{-1}%
+ \else
+ \def#2{1}%
+ \fi
+ \ifnum #30=0
+ \def#3{0}%
+ \ifnum 0#4=0
+ \def#2{0}%
+ \fi
+ \fi
+ \edef#3{\number \ifnum #2<0 -\fi#3}}%
+\def\MFPsplit@dot#1.#2.#3\mfp@end#4#5{\edef#4{#1}\edef#5{#2}}%
+\def\MFPpadto@eight#1{%
+ \edef#1{\@xp\MFP@firsteightofmany#100000000\mfp@end}}%
+\def\MFPgetoperand@x{\Rpop\MFP@x@Val
+ \MFPprocess@into@parts\MFP@x@Val\MFP@x@Sgn\MFP@x@Int\MFP@x@Frc}%
+\def\MFPgetoperand@y{\Rpop\MFP@y@Val
+ \MFPprocess@into@parts\MFP@y@Val\MFP@y@Sgn\MFP@y@Int\MFP@y@Frc}%
+\def\MFP@Rcat#1{\edef\MFP@Rstack{{#1}\MFP@Rstack}}%
+\def\MFP@Rcattwo#1#2{\edef\MFP@Rstack{{#1}{#2}\MFP@Rstack}}%
+\def\MFP@Sign#1{\ifnum#1<0 -\fi}%
+\def\MFP@x@Sign{\MFP@Sign\MFP@x@Sgn}%
+\def\MFP@y@Sign{\MFP@Sign\MFP@y@Sgn}%
+\def\MFP@z@Sign{\MFP@Sign\MFP@z@Sgn}%
+\def\copyMFP@x{\edef\MFP@z@Int{\MFP@x@Int}\edef\MFP@z@Frc{\MFP@x@Frc}}%
+\def\MFPpush@result{\MFP@Rchk\MFPcurr@Sgn\MFP@Rcat\MFP@z@Val}%
+\def\if@EndofStack{%
+ \ifx\MFP@EOS\MFP@Rstack
+ \@xp\@firstoftwo
+ \else
+ \@xp\@secondoftwo
+ \fi}%
+\def\MFP@popit{\if@EndofStack\doMFP@EOS\doMFP@popit}%
+\def\doMFP@EOS#1\mfp@end#2{\MFP@popempty@err\let#2\EndofStack}%
+\def\doMFP@popit#1#2\mfp@end#3{\edef\MFP@Rstack{#2}\edef#3{#1}}%
+\def\MFPchk#1{%
+ \MFPparse@x{#1}%
+ \MFP@Rchk\MFP@x@Sgn}%
+\def\MFP@Rchk#1{%
+ \MFPclear@flags
+ \ifnum#1>0 \MFP@postrue
+ \else\ifnum#1<0 \MFP@negtrue
+ \else \MFP@zerotrue
+ \fi\fi}%
+\def\MFPclear@flags{\MFP@zerofalse \MFP@negfalse \MFP@posfalse}%
+\def\IFzero{\ifMFP@zero\@xp\@firstoftwo\else\@xp\@secondoftwo\fi}%
+\def\IFneg {\ifMFP@neg \@xp\@firstoftwo\else\@xp\@secondoftwo\fi}%
+\def\IFpos {\ifMFP@pos \@xp\@firstoftwo\else\@xp\@secondoftwo\fi}%
+\newif\ifMFP@zero \newif\ifMFP@neg \newif\ifMFP@pos
+\newif\ifMFPdebug
+\def\MFPcmp#1#2{\MFPparse@x{#1}\MFPparse@y{#2}\MFP@Rcmp}%
+\def\MFP@Rcmp{\MFPclear@flags
+ \ifnum \MFP@x@Sign\MFP@x@Int>\MFP@y@Sign\MFP@y@Int\relax
+ \MFP@postrue
+ \else\ifnum \MFP@x@Sign\MFP@x@Int<\MFP@y@Sign\MFP@y@Int\relax
+ \MFP@negtrue
+ \else\ifnum \MFP@x@Sign\MFP@x@Frc>\MFP@y@Sign\MFP@y@Frc\relax
+ \MFP@postrue
+ \else\ifnum \MFP@x@Sign\MFP@x@Frc<\MFP@y@Sign\MFP@y@Frc\relax
+ \MFP@negtrue
+ \else
+ \MFP@zerotrue
+ \fi\fi\fi\fi}%
+\let\IFeq\IFzero\let\IFlt\IFneg \let\IFgt\IFpos
+\def\startMFPprogram{%
+\begingroup
+ \def\Rchs {\MFP@stack@Unary\MFP@Rchs}%
+ \def\Rabs {\MFP@stack@Unary\MFP@Rabs}%
+ \def\Rdbl {\MFP@stack@Unary\MFP@Rdbl}%
+ \def\Rhalve{\MFP@stack@Unary\MFP@Rhalve}%
+ \def\Rsgn {\MFP@stack@Unary\MFP@Rsgn}%
+ \def\Rsq {\MFP@stack@Unary\MFP@Rsq}%
+ \def\Rinv {\MFP@stack@Unary\MFP@Rinv}%
+ \def\Rint {\MFP@stack@Unary\MFP@Rint}%
+ \def\Rfrac {\MFP@stack@Unary\MFP@Rfrac}%
+ \def\Rfloor{\MFP@stack@Unary\MFP@Rfloor}%
+ \def\Rceil {\MFP@stack@Unary\MFP@Rceil}%
+ \def\Rincr {\MFP@stack@Unary\MFP@Rincr}%
+ \def\Rdecr {\MFP@stack@Unary\MFP@Rdecr}%
+ \def\Rzero {\MFP@stack@Unary\MFP@Rzero}%
+ \def\Radd {\MFP@stack@Binary\MFP@Radd}%
+ \def\Rmul {\MFP@stack@Binary\MFP@Rmul}%
+ \let\Rmpy\Rmul
+ \def\Rsub {\MFP@stack@Binary\MFP@Rsub}%
+ \def\Rdiv {\MFP@stack@Binary\MFP@Rdiv}%
+ \def\Rmin {\MFP@stack@Binary\MFP@Rmin}%
+ \def\Rmax {\MFP@stack@Binary\MFP@Rmax}%
+ \let\Rnoop\relax
+ \def\Rcmp{%
+ \MFPgetoperand@y\MFPgetoperand@x % get operands (last pushed is y)
+ \MFP@Rcat\MFP@x@Val\MFP@Rcat\MFP@y@Val % put back: LOFI
+ \MFP@Rcmp}%
+ \def\Rchk{%
+ \MFPgetoperand@x
+ \MFP@Rcat\MFP@x@Val
+ \MFP@Rchk\MFP@x@Sgn}%
+ \def\Rpush##1{%
+ \MFPparse@x{##1}%
+ \edef\MFP@z@Val{\MFP@x@Sign\MFP@x@Int.\MFP@x@Frc}%
+ \edef\MFPcurr@Sgn{\MFP@x@Sgn}%
+ \MFPpush@result}%
+ \def\Rpop{\@xp\MFP@popit\MFP@Rstack\mfp@end}%
+ \def\Rexch{%
+ \Rpop\MFP@x@Val\Rpop\MFP@y@Val
+ \MFP@Rcattwo\MFP@y@Val\MFP@x@Val}%
+ \def\Rdup{%
+ \Rpop\MFP@x@Val
+ \MFP@Rcattwo\MFP@x@Val\MFP@x@Val}%
+ \MFP@Rextra
+ \let\Global\MFP@Global
+ \let\GlobalStack\MFP@GlobalStack
+ \let\Export\MFP@Export
+ \let\ExportStack\MFP@ExportStack}%
+\def\stopMFPprogram{\@xp\endgroup\MFPprogram@returns}%
+\let\MFP@Rextra\@empty
+\let\MFPprogram@returns\@empty
+\def\MFPchs {\MFP@op@Unary\MFP@Rchs}%
+\def\MFPabs {\MFP@op@Unary\MFP@Rabs}%
+\def\MFPdbl {\MFP@op@Unary\MFP@Rdbl}%
+\def\MFPhalve{\MFP@op@Unary\MFP@Rhalve}%
+\def\MFPsgn {\MFP@op@Unary\MFP@Rsgn}%
+\def\MFPsq {\MFP@op@Unary\MFP@Rsq}%
+\def\MFPinv {\MFP@op@Unary\MFP@Rinv}%
+\def\MFPint {\MFP@op@Unary\MFP@Rint}%
+\def\MFPfrac {\MFP@op@Unary\MFP@Rfrac}%
+\def\MFPfloor{\MFP@op@Unary\MFP@Rfloor}%
+\def\MFPceil {\MFP@op@Unary\MFP@Rceil}%
+\def\MFPincr {\MFP@op@Unary\MFP@Rincr}%
+\def\MFPdecr {\MFP@op@Unary\MFP@Rdecr}%
+\def\MFPzero {\MFP@op@Unary\MFP@Rzero}%
+\def\MFPstore{\MFP@op@Unary\MFP@Rstore}%
+\def\MFPadd{\MFP@op@Binary\MFP@Radd}%
+\def\MFPmul{\MFP@op@Binary\MFP@Rmul}%
+\let\MFPmpy\MFPmul
+\def\MFPsub{\MFP@op@Binary\MFP@Rsub}%
+\def\MFPdiv{\MFP@op@Binary\MFP@Rdiv}%
+\def\MFPmin{\MFP@op@Binary\MFP@Rmin}%
+\def\MFPmax{\MFP@op@Binary\MFP@Rmax}%
+\def\MFP@stack@Unary#1{%
+ \MFPgetoperand@x
+ \MFP@subroutine{#1}\MFPpush@result}%
+\def\MFP@op@Unary#1#2{%
+ \MFPparse@x{#2}%
+ \MFP@subroutine{#1}\MFPstore@result}%
+\def\MFPstore@result#1{\MFP@Rchk\MFPcurr@Sgn\edef#1{\MFP@z@Val}}%
+\def\MFP@stack@Binary#1{%
+ \MFPgetoperand@y \MFPgetoperand@x
+ \MFP@subroutine{#1}\MFPpush@result}%
+\def\MFP@op@Binary#1#2#3{%
+ \MFPparse@x{#2}\MFPparse@y{#3}%
+ \MFP@subroutine{#1}\MFPstore@result}%
+\let\MFPnoop\relax
+\def\MFP@Rabs{%
+ \copyMFP@x \edef\MFP@z@Sgn{\ifnum\MFP@x@Sgn=0 0\else1\fi}}%
+\def\MFP@Rchs{\copyMFP@x \edef\MFP@z@Sgn{\number-\MFP@x@Sgn}}%
+\def\MFP@Rdbl{\MFP@Rcopy xy\MFP@Radd}%
+\def\MFP@Rhalve{%
+ \MFP@tempa\MFP@x@Int
+ \MFP@tempb\MFP@x@Frc\relax
+ \ifodd\MFP@tempb
+ \def\MFP@z@Und{5}%
+ \advance\MFP@tempb 1 % round up
+ \ifnum\MFP@ttteight=\MFP@tempb
+ \MFP@tempb0 \advance\MFP@tempa1
+ \fi
+ \fi
+ \ifodd \MFP@tempa
+ \advance\MFP@tempb \MFP@ttteight\relax
+ \fi
+ \divide\MFP@tempa 2
+ \divide\MFP@tempb 2
+ \MFP@Rloadz\MFP@x@Sgn\MFP@tempa\MFP@tempb}%
+\def\MFP@Rsgn{\MFP@Rloadz \MFP@x@Sgn{\ifnum\MFP@x@Sgn=0 0\else1\fi}0}%
+\def\MFP@Rsq{\MFP@Rcopy xy\MFP@Rmul}%
+\def\MFP@Rinv{\MFP@Rcopy xy\MFP@Rload x110\MFP@Rdiv}%
+\def\MFP@Rint{%
+ \MFP@Rloadz {\ifnum\MFP@x@Int=0 0\else\MFP@x@Sgn\fi}\MFP@x@Int 0}%
+\def\MFP@Rfrac{%
+ \MFP@Rloadz {\ifnum\MFP@x@Frc=0 0\else\MFP@x@Sgn\fi}0\MFP@x@Frc}%
+\def\MFP@Rincr{%
+ \ifnum\MFP@x@Sgn<0
+ \ifcase\MFP@x@Int
+ \MFP@tempa\MFP@ttteight
+ \advance\MFP@tempa -\MFP@x@Frc\relax
+ \MFP@Rloadz 10\MFP@tempa
+ \or
+ \MFP@Rloadz{\ifnum\MFP@x@Frc=0 0\else -1\fi}0\MFP@x@Frc
+ \else
+ \MFP@tempa\MFP@x@Int
+ \advance\MFP@tempa -1
+ \MFP@Rloadz{-1}\MFP@tempa\MFP@x@Frc
+ \fi
+ \else
+ \MFP@tempa\MFP@x@Int
+ \advance\MFP@tempa 1
+ \MFP@Rloadz 1\MFP@tempa\MFP@x@Frc
+ \fi}%
+\def\MFP@Rdecr{%
+ \edef\MFP@x@Sgn{\number -\MFP@x@Sgn}\MFP@Rincr
+ \edef\MFP@z@Sgn{\number -\MFP@z@Sgn}}%
+\def\MFP@Rstore{\MFP@Rcopy xz}%
+\def\MFP@Rfloororceil#1{%
+ \MFP@tempa\MFP@x@Int\relax
+ \ifnum 0#1\MFP@x@Sgn
+ \ifnum\MFP@x@Frc=0
+ \else
+ \advance\MFP@tempa1
+ \fi
+ \fi
+ \MFP@Rloadz{\ifnum\MFP@z@Int=0 0\else\MFP@x@Sgn\fi}\MFP@tempa0}%
+\def\MFP@Rfloor{\MFP@Rfloororceil>}%
+\def\MFP@Rceil {\MFP@Rfloororceil<}%
+\def\MFP@split#1#2#3{%
+ \begingroup
+ \MFP@tempa#1\relax
+ \MFP@tempb\MFP@tempa
+ \divide\MFP@tempb by\MFP@tttfour
+ \edef#2{\number\MFP@tempb}%
+ \multiply\MFP@tempb by\MFP@tttfour
+ \advance\MFP@tempa-\MFP@tempb
+ \MFP@endgroup@after{%
+ \MFP@def@after#2{#2}%
+ \MFP@def@after#3{\number\MFP@tempa}%
+ }}%
+\def\MFP@x@split{%
+ \MFP@split\MFP@x@Int\MFP@x@Int@ii\MFP@x@Int@i
+ \MFP@split\MFP@x@Frc\MFP@x@Frc@i\MFP@x@Frc@ii}%
+\def\MFP@y@split{%
+ \MFP@split\MFP@y@Int\MFP@y@Int@ii\MFP@y@Int@i
+ \MFP@split\MFP@y@Frc\MFP@y@Frc@i\MFP@y@Frc@ii}%
+\def\MFPmore@init@z{%
+ \def\MFP@z@Frc@iv {0}%
+ \def\MFP@z@Frc@iii{0}%
+ \def\MFP@z@Frc@ii {0}%
+ \def\MFP@z@Frc@i {0}%
+ \def\MFP@z@Int@i {0}%
+ \def\MFP@z@Int@ii {0}%
+ \def\MFP@z@Int@iii{0}}%
+\def\MFP@fourdigits#1{%
+ \@xp\MFP@fifthofmany\number#1{}{0}{00}{000}\mfp@end\number#1}%
+\def\makeMFP@fourdigits#1{\edef#1{\MFP@fourdigits{#1}}}%
+\def\MFP@eightdigits#1{%
+ \@xp\MFP@ninthofmany\number#1%
+ {}{0}{00}{000}{0000}{00000}{000000}{0000000}\mfp@end\number#1}%
+\def\makeMFP@eightdigits#1{\edef#1{\MFP@eightdigits{#1}}}%
+\def\MFP@carrya{\MFP@carry\MFP@ttteight}%
+\def\MFP@carrym{\MFP@carry\MFP@tttfour}%
+\def\MFP@carry#1#2#3{%
+ \begingroup
+ \MFP@carryi{#1}#2#3%
+ \MFP@endgroup@after{%
+ \MFP@def@after#3{\number\MFP@tempa}%
+ \MFP@def@after#2{\number\MFP@tempb}%
+ }}%
+\def\MFP@carryi#1#2#3{%
+ \MFP@tempa=#3\relax
+ \MFP@tempb=#2\relax
+ \MFP@tempc=\MFP@tempb
+ \divide \MFP@tempc #1\relax
+ \advance \MFP@tempa \MFP@tempc
+ \multiply\MFP@tempc #1\relax
+ \advance \MFP@tempb -\MFP@tempc}%
+\def\MFP@addone#1#2#3{%
+ \begingroup
+ \MFP@tempa#1%
+ \advance\MFP@tempa#2\relax
+ \MFP@endgroup@after{%
+ \MFP@def@after#3{\number\MFP@tempa}%
+ }}%
+\def\MFP@multiplyone#1#2{%
+ \MFP@tempa#1%
+ \multiply\MFP@tempa\MFP@tempb
+ \advance\MFP@tempa#2%
+ \edef#2{\number\MFP@tempa}}%
+\def\MFP@multiplyfour#1#2#3#4#5{%
+ \MFP@tempb #1\relax
+ \MFP@multiplyone\MFP@x@Int@ii #2%
+ \MFP@multiplyone\MFP@x@Int@i #3%
+ \MFP@multiplyone\MFP@x@Frc@i #4%
+ \MFP@multiplyone\MFP@x@Frc@ii #5}%
+\def\MFP@Rsub{\edef\MFP@y@Sgn{\number-\MFP@y@Sgn}\MFP@Radd}%
+\def\MFP@Radd{%
+ \MFP@tempa\MFP@x@Sgn
+ \multiply\MFP@tempa\MFP@y@Sgn\relax
+ \ifcase\MFP@tempa
+ \ifnum \MFP@x@Sgn=0
+ \MFP@Rcopy yz%
+ \else
+ \MFP@Rcopy xz%
+ \fi
+ \or
+ \@xp\MFP@Radd@same
+ \else
+ \@xp\MFP@Radd@diff
+ \fi}%
+\def\MFP@Radd@same{%
+ \MFP@addone\MFP@x@Frc\MFP@y@Frc\MFP@z@Frc
+ \MFP@addone\MFP@x@Int\MFP@y@Int\MFP@z@Int
+ \MFP@carrya\MFP@z@Frc\MFP@z@Int
+ \MFP@carrya\MFP@z@Int\MFP@z@Ovr
+ \makeMFP@eightdigits\MFP@z@Frc
+ \edef\MFP@z@Sgn{\MFP@x@Sgn}}%
+\def\MFP@Radd@diff{%
+ \MFP@addone\MFP@x@Frc{-\MFP@y@Frc}\MFP@z@Frc
+ \MFP@addone\MFP@x@Int{-\MFP@y@Int}\MFP@z@Int
+ \MFP@tempa=\MFP@z@Int
+ \MFP@tempb=\MFP@z@Frc\relax
+ \ifnum\MFP@tempa=0 \else \MFP@tempa=\MFP@Sign\MFP@tempa 1 \fi
+ \ifnum\MFP@tempb=0 \else \MFP@tempb=\MFP@Sign\MFP@tempb 1 \fi
+ \ifnum\MFP@tempa=0 \MFP@tempa=\MFP@tempb \fi
+ \edef\MFP@z@Sgn{\number\MFP@x@Sign\MFP@tempa}%
+ \MFP@tempb\MFP@tempa
+ \multiply\MFP@tempa \MFP@z@Int
+ \multiply\MFP@tempb \MFP@z@Frc\relax
+ \ifnum\MFP@tempb<0
+ \advance\MFP@tempb\MFP@ttteight
+ \advance\MFP@tempa-1
+ \fi
+ \edef\MFP@z@Int{\number\MFP@tempa}%
+ \edef\MFP@z@Frc{\number\MFP@tempb}%
+ \makeMFP@eightdigits\MFP@z@Frc}%
+\def\MFP@Rmul{%
+ \MFP@tempa\MFP@x@Sgn \multiply\MFP@tempa\MFP@y@Sgn\relax
+ \ifnum 0=\MFP@tempa
+ \MFP@Rzero
+ \else
+ \edef\MFP@z@Sgn{\number\MFP@tempa}%
+ \@xp\MFP@@Rmul
+ \fi}%
+\def\MFP@@Rmul{%
+ \MFPmore@init@z
+ \MFP@x@split\MFP@y@split
+ \MFP@multiplyfour \MFP@y@Frc@ii \MFP@z@Frc@i
+ \MFP@z@Frc@ii \MFP@z@Frc@iii\MFP@z@Frc@iv
+ \MFP@multiplyfour \MFP@y@Frc@i \MFP@z@Int@i
+ \MFP@z@Frc@i \MFP@z@Frc@ii \MFP@z@Frc@iii
+ \MFP@multiplyfour \MFP@y@Int@i \MFP@z@Int@ii
+ \MFP@z@Int@i \MFP@z@Frc@i \MFP@z@Frc@ii
+ \MFP@multiplyfour \MFP@y@Int@ii \MFP@z@Int@iii
+ \MFP@z@Int@ii \MFP@z@Int@i \MFP@z@Frc@i
+ \MFP@carrym\MFP@z@Frc@iv\MFP@z@Frc@iii
+ \MFP@carrym\MFP@z@Frc@iii\MFP@z@Frc@ii
+ \ifnum\MFP@z@Frc@iii<5000 \else
+ \MFP@tempb\MFP@z@Frc@ii
+ \advance\MFP@tempb1
+ \edef\MFP@z@Frc@ii{\number\MFP@tempb}%
+ \fi
+ \MFP@carrym\MFP@z@Frc@ii\MFP@z@Frc@i
+ \MFP@carrym\MFP@z@Frc@i \MFP@z@Int@i
+ \MFP@carrym\MFP@z@Int@i \MFP@z@Int@ii
+ \MFP@carrym\MFP@z@Int@ii\MFP@z@Int@iii
+ \makeMFP@fourdigits\MFP@z@Frc@iv
+ \makeMFP@fourdigits\MFP@z@Frc@iii
+ \makeMFP@fourdigits\MFP@z@Frc@ii
+ \makeMFP@fourdigits\MFP@z@Frc@i
+ \makeMFP@fourdigits\MFP@z@Int@i
+ \edef\MFP@z@Int{\number\MFP@z@Int@ii\MFP@z@Int@i}%
+ \edef\MFP@z@Frc{\MFP@z@Frc@i\MFP@z@Frc@ii}%
+ \edef\MFP@z@Ovr{\number\MFP@z@Int@iii}%
+ \edef\MFP@z@Und{\MFP@z@Frc@iii\MFP@z@Frc@iv}%
+ \ifnum\MFP@z@Int>0
+ \else\ifnum\MFP@z@Frc>0
+ \else
+ \def\MFP@z@Sgn{0}%
+ \fi\fi}%
+\def\MFP@Rdiv{%
+ \ifnum\MFP@y@Sgn=0
+ \MFP@dividebyzero@err
+ \ifnum\MFP@x@Sgn=0
+ \edef\MFP@z@Int{\ZeroOverZeroInt}%
+ \edef\MFP@z@Frc{\ZeroOverZeroFrac}%
+ \else
+ \edef\MFP@z@Int{\xOverZeroInt}%
+ \edef\MFP@z@Frc{\xOverZeroFrac}%
+ \fi
+ \edef\MFP@z@Sgn{\MFP@x@Sgn}%
+ \else\ifnum\MFP@x@Sgn=0
+ \MFP@Rzero
+ \else
+ \MFP@tempa\MFP@x@Sgn
+ \multiply\MFP@tempa\MFP@y@Sgn
+ \edef\MFP@z@Sgn{\number\MFP@tempa}%
+ \MFP@@Rdiv
+ \fi\fi}%
+\def\MFP@@Rdiv{%
+ \ifnum\MFP@y@Int=0
+ \edef\MFP@y@Int{\number\MFP@y@Frc}%
+ \def\MFP@y@Frc{00000000}%
+ \MFP@tempa=8
+ \else
+ \MFP@tempa=0
+ \fi
+ \advance\MFP@tempa\MFP@numdigits@toshift\MFP@y@Int\relax
+ \@XP\MFP@doshift@y\@xp\MFP@y@Int\MFP@y@Frc0000000\mfp@end
+ \ifnum\MFP@x@Int=0
+ \edef\MFP@x@Int{\number\MFP@x@Frc}%
+ \def\MFP@x@Frc{00000000}%
+ \advance\MFP@tempa -8
+ \fi
+ \advance\MFP@tempa-\MFP@numdigits@toshift\MFP@x@Int\relax
+ \@XP\MFP@doshift@x\@xp\MFP@x@Int\MFP@x@Frc0000000\mfp@end
+ \ifnum\MFP@tempa<-9
+ \else
+ \MFP@tempf\MFP@tempa
+ \advance\MFP@tempf 10
+ \def\MFP@z@digits{}%
+ \MFP@Rdivloop
+ \MFPshiftandsplit@z@digits
+ \ifnum\MFP@z@Und>4
+ \MFP@addone\MFP@z@Frc1\MFP@z@Frc
+ \MFP@carrya\MFP@z@Frc\MFP@z@Int
+ \MFP@carrya\MFP@z@Int\MFP@z@Ovr
+ \makeMFP@eightdigits\MFP@z@Frc
+ \fi
+ \fi}%
+\def\MFP@numdigits@toshift#1{\@xp\MFP@ninthofmany#101234567\mfp@end}%
+\def\MFP@doshift@x#1#2#3#4#5#6#7#8#9\mfp@end{%
+ \def\MFP@x@Int{#1#2#3#4#5#6#7#8}%
+ \edef\MFP@x@Frc{\MFP@firsteightofmany#9\mfp@end}}%
+\def\MFP@doshift@y#1#2#3#4#5#6#7#8#9\mfp@end{%
+ \def \MFP@y@Int{#1#2#3#4#5#6#7#8}%
+ \edef\MFP@y@Frc{\MFP@firsteightofmany#9\mfp@end}}%
+\def\MFP@Rdivloop{%
+ \MFP@tempb\MFP@x@Int % \MFP@tempb = n_1
+ \MFP@tempc\MFP@y@Int % \MFP@tempc = d_1
+ \divide\MFP@tempb \MFP@tempc % \MFP@tempb = n_1/d_1 = q_1
+ \multiply \MFP@tempc \MFP@tempb % \MFP@tempc = q_1 d_1
+ \MFP@tempd \MFP@y@Frc % \MFP@tempd = d_2
+ \multiply \MFP@tempd \MFP@tempb % \MFP@tempd = q_1 d_2
+ \MFP@tempe \MFP@tempc
+ \advance \MFP@tempe -\MFP@x@Int\relax % \MFP@tempe = -n_1 + q_1 d_1
+ \ifnum \MFP@tempe > -9 % n_1 - q_1 d_1 < 9
+ \multiply \MFP@tempe\MFP@ttteight % -(n_1 - q_1 d_1)(10)^8
+ \advance \MFP@tempe \MFP@tempd % add q_1 d_2
+ \advance \MFP@tempe -\MFP@x@Frc\relax % add -n_2
+ \ifnum \MFP@tempe>0 % Crucial inequality fails
+ \advance\MFP@tempb -1 % new q = q_1 - 1
+ \advance\MFP@tempc -\MFP@y@Int % q_1 d_1 - d_1 = q d_1
+ \advance\MFP@tempd -\MFP@y@Frc\relax% q_1 d_2 - d_2 = q d_2
+ \fi
+ \fi
+ \edef\MFP@z@digits{\MFP@z@digits\number\MFP@tempb}%
+ \begingroup
+ \MFP@carryi\MFP@ttteight\MFP@tempd\MFP@tempc
+ \MFP@endgroup@after{%
+ \MFP@tempc=\number\MFP@tempa
+ \MFP@tempd=\number\MFP@tempb\relax
+ }%
+ \MFP@addone\MFP@x@Int{-\MFP@tempc}\MFP@x@Int
+ \MFP@addone\MFP@x@Frc{-\MFP@tempd}\MFP@x@Frc
+ \ifnum\MFP@x@Frc<0
+ \MFP@addone\MFP@x@Frc\MFP@ttteight\MFP@x@Frc
+ \MFP@addone\MFP@x@Int{-1}\MFP@x@Int
+ \fi
+ \advance\MFP@tempf -1
+ \ifnum\MFP@tempf>0
+ \edef\MFP@x@Int{\MFP@x@Int0}% easy multiplications by 10
+ \edef\MFP@x@Frc{\MFP@x@Frc0}%
+ \MFP@carrya\MFP@x@Frc\MFP@x@Int
+ \@xp\MFP@Rdivloop
+ \fi}%
+\def\MFPshiftandsplit@z@digits{%
+ \advance \MFP@tempa -7
+ \ifnum\MFP@tempa>0
+ \def\MFP@z@Ovr{}%
+ \@xp\MFPget@Ovrdigits\MFP@z@digits\mfp@end
+ \else
+ \ifnum\MFP@tempa<-7
+ \edef\MFP@z@digits{00000000\MFP@z@digits}%
+ \advance\MFP@tempa8
+ \fi
+ \ifnum\MFP@tempa<-3
+ \edef\MFP@z@digits{0000\MFP@z@digits}%
+ \advance\MFP@tempa4
+ \fi
+ \edef\MFP@z@digits{%
+ \ifcase-\MFP@tempa\or
+ 0\or
+ 00\or
+ 000\or
+ 0000\else
+ 00000%
+ \fi \MFP@z@digits}%
+ \@xp\MFPget@Intdigits\MFP@z@digits\mfp@end
+ \fi}%
+\def\MFPget@Ovrdigits#1{%
+ \edef\MFP@z@Ovr{\MFP@z@Ovr#1}%
+ \advance\MFP@tempa -1
+ \ifnum\MFP@tempa>0
+ \@xp\MFPget@Ovrdigits
+ \else
+ \@xp\MFPget@Intdigits
+ \fi}%
+\def\MFPget@Intdigits#1#2#3#4#5#6#7#8{%
+ \def\MFP@z@Int{\number#1#2#3#4#5#6#7#8}%
+ \MFPget@Frcdigits}%
+\def\MFPget@Frcdigits#1#2#3#4#5#6#7#8#9{%
+ \def\MFP@z@Frc{#1#2#3#4#5#6#7#8}%
+ \def\MFP@z@Und{#9}\gobbleto@mfp@end}%
+\def\MFP@Rmax{%
+ \MFP@Rcmp \ifMFP@neg \MFP@Rcopy yz\else\MFP@Rcopy xz\fi}%
+\def\MFP@Rmin{%
+ \MFP@Rcmp \ifMFP@pos \MFP@Rcopy yz\else\MFP@Rcopy xz\fi}%
+\def\MFPtruncate#1#2{%
+ \begingroup
+ \MFP@tempa#1\relax
+ \MFPparse@x{#2}%
+ \ifnum\MFP@tempa<1
+ \@xp\MFP@iRtrunc
+ \else
+ \@xp\MFP@Rtrunc
+ \fi}%
+\def\MFP@Rtrunc#1{%
+ \edef\MFP@x@Frc{\@xp\MFP@@Rtrunc\MFP@x@Frc\mfp@end}%
+ \ifnum\MFP@x@Int=0 % possibly returns 0
+ \ifnum\MFP@x@Frc=0
+ \def\MFP@x@Sgn{0}%
+ \fi
+ \fi
+ \MFP@endgroup@after{%
+ \MFP@def@after#1{\MFP@x@Sign\MFP@x@Int.\MFP@x@Frc}}}%
+\def\MFP@@Rtrunc#1#2#3#4#5#6#7#8#9\mfp@end{%
+ \ifcase\MFP@tempa\or
+ #1\or
+ #1#2\or
+ #1#2#3\or
+ #1#2#3#4\or
+ #1#2#3#4#5\or
+ #1#2#3#4#5#6\or
+ #1#2#3#4#5#6#7\else
+ #1#2#3#4#5#6#7#8\fi}%
+\def\MFP@iRtrunc#1{%
+ \makeMFP@eightdigits\MFP@x@Int
+ \edef\MFP@x@Val{\number\MFP@x@Sign\@xp\MFP@@iRtrunc\MFP@x@Int\mfp@end}%
+ \MFP@endgroup@after{\MFP@def@after#1{\MFP@x@Val}}}%
+\def\MFP@@iRtrunc#1#2#3#4#5#6#7#8#9\mfp@end{%
+ \ifcase-\MFP@tempa
+ #1#2#3#4#5#6#7#8\or
+ #1#2#3#4#5#6#70\or
+ #1#2#3#4#5#600\or
+ #1#2#3#4#5000\or
+ #1#2#3#40000\or
+ #1#2#300000\or
+ #1#2000000\or
+ #10000000\else
+ 00000000\fi}%
+\def\MFPround#1#2{%
+ \begingroup
+ \MFP@tempa#1\relax
+ \ifnum 0>\MFP@tempa
+ \edef\MFP@y@Tmp{%
+ \ifcase-\MFP@tempa\or
+ 5\or % .5 x 10^1
+ 50\or % .5 x 10^2
+ 500\or % .5 x 10^3
+ 5000\or % .5 x 10^4
+ 50000\or % .5 x 10^5
+ 500000\or % .5 x 10^6
+ 5000000\else % .5 x 10^7
+ 50000000\fi % .5 x 10^8
+ }%
+ \else
+ \edef\MFP@y@Tmp{%
+ \ifcase\MFP@tempa
+ .5\or % .5 x 10^0
+ .05\or % .5 x 10^{-1}
+ .005\or % .5 x 10^{-2}
+ .0005\or % .5 x 10^{-3}
+ .00005\or % .5 x 10^{-4}
+ .000005\or % .5 x 10^{-5}
+ .0000005\or % .5 x 10^{-6}
+ .00000005\else% .5 x 10^{-7}
+ 0\fi %
+ }%
+ \fi
+ \MFPchk{#2}\ifMFP@neg\edef\MFP@y@Tmp{-\MFP@y@Tmp}\fi
+ \MFPadd{#2}\MFP@y@Tmp\MFP@z@Tmp
+ \MFP@endgroup@after{\MFP@def@after\MFP@z@Tmp{\MFP@z@Tmp}}%
+ \MFPtruncate{#1}\MFP@z@Tmp}%
+\def\MFPstrip{%
+ \@ifstar{\MFP@strip{}}{\MFP@strip{.0}}}%
+\def\MFP@strip#1#2#3{%
+ \MFPparse@x{#2}%
+ \ifnum \MFP@x@Frc=0
+ \edef#3{\MFP@x@Sign\MFP@x@Int#1}%
+ \else
+ \edef#3{\MFP@x@Sign\MFP@x@Int.\@xp\MFP@@strip\MFP@x@Frc\mfp@end}%
+ \fi}%
+\def\MFP@@strip#1#2\mfp@end{%
+ #1%
+ \ifnum 0#2>0
+ \@xp\MFP@@strip
+ \else
+ \@xp\gobbleto@mfp@end
+ \fi#2\mfp@end}%
+\def\MFP@Global#1{\toks@\@xp{#1}\xdef#1{\the\toks@}}%
+\def\MFP@GlobalStack{\MFP@Global\MFP@Rstack}%
+\def\MFP@Export#1{%
+ \begingroup
+ \toks@\@xp{\MFPprogram@returns}%
+ \MFP@endgroup@after{%
+ \MFP@def@after\MFPprogram@returns{\the\toks@ \MFP@def@after#1{#1}}%
+ }}%
+\def\MFP@ExportStack{\MFP@Export\MFP@Rstack}%
+\def\MFP@Rload #1#2#3#4{%
+ \@xp\edef\csname MFP@#1@Sgn\endcsname{\number#2}%
+ \@xp\edef\csname MFP@#1@Int\endcsname{\number#3}%
+ \@xp\edef\csname MFP@#1@Frc\endcsname{\number#4}%
+ \@xp\makeMFP@eightdigits\csname MFP@#1@Frc\endcsname}%
+\def\MFP@Rcopy#1#2{%
+ \MFP@Rload #2{\csname MFP@#1@Sgn\endcsname}%
+ {\csname MFP@#1@Int\endcsname}%
+ {\csname MFP@#1@Frc\endcsname}}%
+\def\MFP@Rloadz#1#2#3{%
+ \edef\MFP@z@Sgn{\number#1}%
+ \edef\MFP@z@Int{\number#2}%
+ \edef\MFP@z@Frc{\number#3}%
+ \makeMFP@eightdigits\MFP@z@Frc}%
+\def\MFPpi{3.14159265}%
+\def\MFPe{2.71828183}%
+\def\MFPphi{1.61803399}%
+\MFP@loadextra
+\MFP@finish
+\endinput
+%%
+%% End of file `minifp.sty'.