diff options
author | Karl Berry <karl@freefriends.org> | 2013-07-17 22:13:10 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2013-07-17 22:13:10 +0000 |
commit | eec0a21648f82e9f409ed8151e1bc83f34bfec79 (patch) | |
tree | dd59250c0f9496a72010ad5b1097e0199888f06f /Master/texmf-dist/tex/generic/minifp/mfpextra.tex | |
parent | d9add100de8f268f2b408533a41cc5624ef1ee7a (diff) |
minifp (17jul13)
git-svn-id: svn://tug.org/texlive/trunk@31221 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/minifp/mfpextra.tex')
-rw-r--r-- | Master/texmf-dist/tex/generic/minifp/mfpextra.tex | 416 |
1 files changed, 218 insertions, 198 deletions
diff --git a/Master/texmf-dist/tex/generic/minifp/mfpextra.tex b/Master/texmf-dist/tex/generic/minifp/mfpextra.tex index 2e9a6d88bf0..9d65d0ff1aa 100644 --- a/Master/texmf-dist/tex/generic/minifp/mfpextra.tex +++ b/Master/texmf-dist/tex/generic/minifp/mfpextra.tex @@ -21,6 +21,26 @@ %% is Daniel H. Luecking. The Base Interpreters associated %% with minifp are plain TeX and LaTeX. %% +\expandafter\ifx\csname MFP@xfinish\endcsname\relax +\else \expandafter\endinput\fi +\expandafter\edef\csname MFP@xfinish\endcsname{% + \catcode64=\the\catcode64 \space + \catcode46=\the\catcode46 \space + \catcode60=\the\catcode60 \space + \catcode62=\the\catcode62 \space}% +\catcode64=11 % @ +\catcode46=12 % . (period) +\catcode60=12 % < +\catcode62=12 % > +\ifx\MFP@Rextra\UndEfInEd \input minifp.sty \fi +\ifx\MFP@Rextra\@empty +\else + \immediate\write16{mfpextra.tex: already loaded.^^J}% + \MFP@xfinish + \expandafter\endinput +\fi +\immediate\write16{% + mfpextra.tex: extra operations for the MiniFP package.^^J}% \def\MFP@Rextra{% \def\Rcos {\MFP@stack@Unary\MFP@Rcos }% \def\Rsin {\MFP@stack@Unary\MFP@Rsin }% @@ -51,104 +71,110 @@ \def\LogOfZeroFrac{\MaxRealFrac}% \def\MFP@expoverflow@err{% \MFP@errmsg{Power too large}% - {The power you tried to calcualate is too large for % + {The power you tried to calculate 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\MFPshowreg #1{% +\ifMFPdebug +\begingroup + \edef\theregister{% + #1 = \expandafter \MFP@Sign + \csname MFP@#1@Sgn\endcsname % + \csname MFP@#1@Int\endcsname.% + \csname MFP@#1@Frc\endcsname}% + \show\theregister +\endgroup +\fi}% \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 +\def\MFP@DPmul#1#2#3{% + \ifnum\MFP@x@Sgn=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 + \MFP@Rcopy xv% + \MFP@Rload y1{#1}{#2}\MFP@Rmul + \edef\MFP@w@Und{\MFP@z@Und}% + \ifnum\MFP@z@Frc@iii>4999 + \MFP@tempa\MFP@z@Frc \advance\MFP@tempa-1 + \edef\MFP@z@Frc{\number\MFP@tempa}% + \makeMFP@eightdigits\MFP@z@Frc \fi - \MFP@tempb\MFP@x@Frc\relax - \ifnum\MFP@tempa>0 - \MFP@@Rsin - \else\ifnum\MFP@tempb>0 - \MFP@@Rsin + \MFP@Rcopyz w% + \MFP@Rcopy vx\MFP@Rload y10{#3}\MFP@Rmul + \MFP@Rcopyzx\MFP@Rload y\MFP@v@Sgn 0{\MFP@w@Und}\MFP@Radd + \MFP@tempa\MFP@z@Int\relax + \ifnum\MFP@z@Frc<50000000 \else \advance\MFP@tempa 1 \fi + \ifnum\MFP@tempa<\MFP@ttteight\relax + \MFP@Rload x{\ifnum\MFP@tempa>0 \MFP@z@Sgn\else0\fi}0\MFP@tempa \else - \MFP@Rzero - \fi\fi + \MFP@Rload x\MFP@z@Sgn10% + \fi + \MFP@Rcopy wy\MFP@Radd \fi}% +\def\MFP@Rdeg{\MFP@DPmul{57}{29577951}{30823209}}% +\def\MFP@Rrad{\MFP@DPmul{0}{01745329}{25199433}}% +\def\MFP@RbaseX{\MFP@DPmul{0}{43429448}{19032518}}% +\def\MFP@RbaseE{\MFP@DPmul{2}{30258509}{29940457}}% +\def\MFP@Rcos{% + \MFP@Rcopy xy\MFP@Rload x1{90}0\MFP@Rsub + \MFP@Rcopyzx\MFP@Rsin}% +\def\MFP@Rsin{% + \MFP@tempa\MFP@x@Int + \MFP@tempb\MFP@x@Frc + \MFP@tempc\MFP@x@Sgn\relax + \MFP@reduce@angle + \ifnum\MFP@tempa>0 \MFP@@Rsin + \else\ifnum\MFP@tempb>0 \MFP@@Rsin + \else \MFP@Rzero + \fi\fi}% \def\MFP@reduce@angle{% - \ifnum\MFP@tempa<360 + \ifnum\MFP@tempa<180 \else - \advance\MFP@tempa-360 + \advance\MFP@tempa-180 + \MFP@tempc-\MFP@tempc \@xp\MFP@reduce@angle \fi}% \def\MFP@@Rsin{% \ifnum\MFP@tempa<90 \else + \MFP@tempa -\MFP@tempa \ifnum\MFP@tempb>0 - \advance\MFP@tempa 1 \MFP@tempb -\MFP@tempb \advance\MFP@tempb \MFP@ttteight\relax + \advance\MFP@tempa 179 + \else \advance\MFP@tempa 180 \fi - \MFP@tempa -\MFP@tempa - \advance\MFP@tempa 180 \fi \ifnum\MFP@tempa=90 - \MFP@Rloadz \MFP@sin@Sgn10% + \MFP@Rloadz \MFP@tempc10% \else \advance\MFP@tempb 50 \divide\MFP@tempb 100 \multiply\MFP@tempa 1000000 \advance\MFP@tempb\MFP@tempa \ifnum\MFP@tempb=0 \MFP@Rzero \else - \MFP@Rload x10\MFP@tempb - \MFP@Rcopy xs% + \MFP@Rload s\MFP@tempc0\MFP@tempb + \MFP@Rcopy sx% \MFP@Rsq \ifnum \MFP@z@Frc>0 \MFP@Rcopyz t\MFP@Rsin@prog \else \MFP@Rcopy sx% \fi - \MFP@Rload y11{74532925}\MFP@Rmul - \ifnum\MFP@z@Sgn=0 \else - \let\MFP@z@Sgn\MFP@sin@Sgn - \fi + \MFP@DPmul 1{74532925}{19943296}% \fi \fi}% \def\MFP@Rsin@prog{% - \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@Rcopy tx\MFP@Rload y10{01952676}\MFP@Rsmul% + \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\edef\MFP@x@Sgn{\MFP@s@Sgn}}% \def\MFP@flipz{% \ifnum\MFP@z@Sgn=0 \MFP@Rloadz 110% @@ -161,16 +187,11 @@ \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 - \MFP@Rcopy yz% - \else\ifnum\MFP@y@Int>0 - \MFP@Rcopy xz% - \else - \MFP@@Rsmul + \ifnum \MFP@x@Sgn=0 \MFP@Rzero + \else\ifnum \MFP@y@Sgn=0 \MFP@Rzero + \else\ifnum\MFP@x@Int>0 \MFP@Rcopy yz% + \else\ifnum\MFP@y@Int>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 @@ -190,15 +211,11 @@ \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}}% + \edef\MFP@z@Sgn{\ifnum\MFP@z@Frc=0 0\else 1\fi}}% \def\MFP@Rangle{% \ifcase\MFP@y@Sgn\relax \ifcase\MFP@x@Sgn\relax @@ -223,70 +240,72 @@ \def\MFP@x@Sgn{1}\MFP@@Rangle \MFP@Rcopyzy\MFP@Rload x1{180}0\MFP@Rsub \fi - \let\MFP@z@Sgn\MFP@angle@Sgn - }}% + \let\MFP@z@Sgn\MFP@angle@Sgn}}% \def\MFP@@Rangle{% \MFP@Rcmp \ifMFP@neg - \MFP@Rcopy xs\MFP@Rcopy yx\MFP@Rcopy sy% + \MFP@Rcopy xw\MFP@Rcopy yx\MFP@Rcopy wy% \MFP@@@Rangle \MFP@Rload x1{90}0\MFP@Rcopyzy\MFP@Rsub \else \MFP@@@Rangle - \fi -}% + \fi}% \def\MFP@Rquad{\MFP@Rdbl\MFP@Rcopyzx\MFP@Rdbl}% \def\MFP@@@Rangle{% \MFP@Rcopy xs\MFP@Rcopy yt% - \ifnum\MFP@y@Int<500000 + \ifnum\MFP@x@Int<1000000 \else - \MFP@Rload y1{200}0\MFP@Rdiv - \MFP@Rcopyz s\MFP@Rcopy tx% - \MFP@Rload y1{200}0\MFP@Rdiv - \MFP@Rcopyz t% + \MFP@RdivC \MFP@Rcopyz s% + \MFP@Rcopy tx\MFP@RdivC \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}% + \ifnum\MFP@t@Sgn=0 \MFP@Rzero \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}% + \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 + \fi}% +\def\MFP@twoofmany#1#2#3\MFP@end{#1#2}% +\def\MFP@gobbletwo#1#2{}% \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}}% + \edef\MFP@z@Int{\MFP@x@Int\@xp\MFP@twoofmany\MFP@x@Frc\MFP@end}% + \edef\MFP@z@Frc{\@xp\MFP@gobbletwo\MFP@x@Frc00}% + \edef\MFP@z@Sgn{\MFP@x@Sgn}}% \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}% + \@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{% +\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@Frc{\number\MFP@tempa}% + \makeMFP@eightdigits\MFP@z@Frc \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}% + \ifnum\MFP@tempa=0 + \ifnum\MFP@z@Int=0 \def\MFP@z@Sgn{0}\fi + \fi}% \def\MFP@scaledmul{\MFP@Rmul\MFP@Rcopyzx\MFP@RdivC}% \def\MFP@atan@iter#1#2{% \MFP@Rcopy uy\MFP@scaledmul @@ -294,82 +313,80 @@ \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{% + \MFP@Rcopy xs\MFP@Rcopy xy\MFP@scaledmul + \ifnum \MFP@z@Sgn=0 + \MFP@Rcopy sz% + \else + \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 + \fi}% +\newif\ifMFP@natural +\def\MFP@Rlog{\MFP@naturalfalse\MFP@Rlog@}% +\def\MFP@Rln{\MFP@naturaltrue\MFP@Rlog@}% +\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@warn{The logarithm of a negative number is complex. \MFP@msgbreak Only the real part will be computed}% + \def\MFP@x@Sgn{1}% \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 + \MFP@tempa=\MFP@numshiftL\MFP@x@Tmp\relax \def\MFP@s@Sgn{-1}% - \edef\MFP@t@Int{\@xp\MFP@firstofmany\MFP@x@Tmp\mfp@end}% + \edef\MFP@t@Int{\@xp\MFP@oneofmany\MFP@x@Tmp\MFP@end}% \edef\MFP@t@Frc{\@xp\@gobble\MFP@x@Tmp0}% - \MFPpadto@eight\MFP@t@Frc + \MFP@padtoeight\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}% + \MFP@tempa\MFP@numshiftR\MFP@x@Int + \edef\MFP@x@Tmp{\MFP@x@Int\MFP@x@Frc}% + \ifnum\MFP@tempa>0 \def\MFP@s@Sgn{1}\fi + \edef\MFP@t@Int{\@xp\MFP@oneofmany\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}% + \edef\MFP@t@Frc{\@xp\MFP@eightofmany\MFP@x@Tmp\MFP@end}% \fi \edef\MFP@s@Int{\number\MFP@tempa}% \def\MFP@t@Sgn{1}% \MFP@Rlog@reduce + \ifMFP@natural \MFP@Rcopy sx\MFP@RbaseE \MFP@Rcopy zs\fi \ifnum\MFP@t@Frc=0 \MFP@Rcopy sz% \else - \MFP@Rlog@prog + \def\MFP@t@Int{0}\MFP@Rlog@prog + \ifMFP@natural\else \MFP@Rcopyzx \MFP@RbaseX \fi + \MFP@Rcopy sy\MFP@Rcopyzx\MFP@Radd \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@numshiftR#1{\@xp\MFP@ninthofmany#176543210\MFP@end}% +\def\MFP@numshiftL#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}}% + \MFP@Rcopy tx\MFP@RmulC\MFP@Rcopyz t% + \MFP@reduceonce {316}{31622776}{60168379}{50000000}% + \MFP@reduceonce {177}{56234132}{51903491}{25000000}% + \MFP@reduceonce {133}{74989420}{93324558}{12500000}% + \MFP@reduceonce {115}{86596432}{33600654}{06250000}% + \MFP@Rcopy tx\MFP@RdivC\MFP@Rcopyz t}% \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 + \ifnum\MFP@t@Int>#1\relax + \MFP@Rcopy tx% + \MFP@DPmul 0{#2}{#3}\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}% + \MFP@Rcopy tx\MFP@Rload y10{88888889}\MFP@Rsmul + \MFP@com@iter{87500000}\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@flipz\MFP@Rcopyzx\MFP@Rcopy ty\MFP@Rsmul}% \def\MFP@Rexp{% \ifcase\MFP@x@Sgn\relax \MFP@Rloadz 110% @@ -381,10 +398,10 @@ \fi}% \def\MFP@Rexp@pos{% \MFP@Rload y1{18}{42068074}\MFP@Rcmp - \ifMFP@pos % overflow + \ifMFP@pos \MFP@expoverflow@err \MFP@Rloadz 1\MaxRealInt\MaxRealFrac - \else % handle integer part + \else \MFP@tempa\MFP@x@Int \edef\MFP@powerof@e{% 1\ifcase\MFP@tempa @@ -412,7 +429,7 @@ \ifnum\MFP@x@Frc=0 \else \MFP@Rcopyz s% - \MFP@tempa=\@xp\MFP@firstofmany\MFP@x@Frc\mfp@end + \MFP@tempa=\@xp\MFP@oneofmany\MFP@x@Frc\MFP@end \edef\MFP@powerof@e{% y1\ifcase\MFP@tempa 10\or @@ -429,7 +446,7 @@ \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 + \else \MFP@Rcopyz s\MFP@Rload t10\MFP@t@Frc \MFP@Rexp@pos@prog \MFP@Rcopy sx\MFP@Rcopyzy\MFP@Rmul @@ -437,9 +454,10 @@ \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}% + \MFP@Rcopy tz\MFP@Rexp@iter{14285714}\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 @@ -449,7 +467,7 @@ \MFP@Rcmp \ifMFP@pos \MFP@Rloadz 000% - \else % handle integer part + \else \MFP@tempa\MFP@x@Int \edef\MFP@powerof@e{% \ifcase\MFP@tempa @@ -476,9 +494,9 @@ 000\fi}% \@xp\MFP@Rloadz\MFP@powerof@e \ifnum\MFP@x@Frc=0 - \else % handle first decimal digit + \else \MFP@Rcopyz s% - \MFP@tempa=\@xp\MFP@firstofmany\MFP@x@Frc\mfp@end + \MFP@tempa=\@xp\MFP@oneofmany\MFP@x@Frc\MFP@end \edef\MFP@powerof@e{% y1\ifcase\MFP@tempa 10\or @@ -495,18 +513,19 @@ \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 + \else \MFP@Rcopyz s\MFP@Rload t10\MFP@t@Frc \MFP@Rexp@neg@prog - \MFP@Rcopy sx\MFP@Rcopyzy\MFP@Rmul + \MFP@Rcopyzx\MFP@Rcopy sy\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}% + \MFP@Rcopy tx\MFP@Rload y10{14285712}\MFP@Rsmul + \MFP@com@iter{16666667}\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. @@ -523,30 +542,23 @@ \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. + \else \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}% % + \fi}% \def\MFP@@Rpow{% - \MFP@Rcopy xq% initialize register to be squared - \MFP@Rload p110% initialize register to hold partial products + \MFP@Rcopy xq% + \MFP@Rload p110% \MFP@Rpow@loop}% \def\MFP@Rpow@loop{% \ifodd\MFP@loopctr @@ -568,32 +580,40 @@ \def\MFP@handle@expoverflow{% \MFP@expoverflow@err \MFP@loopctr=0 - \MFP@Rloadz\MFP@power@Sgn\MaxRealInt\MaxRealFrac -}% + \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% + \def\MFP@sqrt@reduce{2}% \edef\MFP@x@Int{\number\MFP@x@Frc}% \edef\MFP@x@Frc{00000000}% + \else\ifnum\MFP@x@Int<10000 + \def\MFP@sqrt@reduce{1}% + \edef\MFP@x@Int{\MFP@x@Int\@xp\MFP@fourofmany\MFP@x@Frc\MFP@end}% + \edef\MFP@x@Frc{\@xp\MFP@gobblefour\MFP@x@Frc0000}% \else - \let\MFP@sqrt@reduce=N% - \fi + \def\MFP@sqrt@reduce{0}% + \fi\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 + \ifcase \MFP@sqrt@reduce\relax + \or + \MFP@Rcopyzx\MFP@Rload y10{01000000}\MFP@Rmul + \or + \MFP@Rcopyzx\MFP@Rload y10{00010000}\MFP@Rmul \fi \else - \MFP@sqrtofneg@err + \MFP@warn{Square root of a negative number. Zero will be returned.}% \MFP@Rzero \fi}% +\def\MFP@fourofmany#1#2#3#4#5\MFP@end{#1#2#3#4}% +\def\MFP@gobblefour#1#2#3#4{}% \def\MFP@ItoQ#1#2{% \MFP@tempa#1\relax\MFP@tempb#2\relax \def\MFP@ItoQ@Tmp{}\MFP@ItoQ@loop}% @@ -617,7 +637,7 @@ \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 + \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}% @@ -628,7 +648,7 @@ \edef\MFP@z@Frc{\MFP@z@Frc0000}% \def\MFP@z@Sgn{1}}% \def\MFP@Isqrt@loop#1{% - \ifx\mfp@end #1% + \ifx\MFP@end #1% \else \multiply\MFP@tempa 2 \multiply\MFP@tempb 4 \multiply\MFP@tempc 2 \advance \MFP@tempb#1\relax @@ -638,8 +658,8 @@ \advance\MFP@tempa 1 \fi \expandafter\MFP@Isqrt@loop - \fi -}% + \fi}% +\MFP@xfinish \endinput %% %% End of file `mfpextra.tex'. |