diff options
author | Karl Berry <karl@freefriends.org> | 2013-01-12 00:02:04 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2013-01-12 00:02:04 +0000 |
commit | cc53d59f49808d6b80420a89e05e3f39ad96412a (patch) | |
tree | f36727477016c8570f3016dd2f2c9f4c3890240b /Master/texmf-dist/tex/generic/minifp | |
parent | 84897d5d7dcc5750e11a40c7a1f4d2d2f6154bc7 (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.tex | 638 | ||||
-rw-r--r-- | Master/texmf-dist/tex/generic/minifp/minifp.sty | 806 |
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'. |