%% %% This is file `fltpoint.tex', %% generated with the docstrip utility. %% %% The original source files were: %% %% fltpoint.dtx (with options: `fltmain') %% %% IMPORTANT NOTICE: %% %% For the copyright see the source file. %% %% Any modified versions of this file must be renamed %% with new filenames distinct from fltpoint.tex. %% %% For distribution of the original source see the terms %% for copying and modification in the file fltpoint.dtx. %% %% This generated file may be distributed as long as the %% original source files, as listed above, are part of the %% same distribution. (The sources need not necessarily be %% in the same archive or directory.) \edef\atcatcode{\the\catcode`\@} \catcode`\@=11 \ifx\documentclass\relax \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\:{\let\@sptoken= } \: \def\:{\@xifnch} \expandafter\def\: {\futurelet\@let@token\@ifnch} \fi \def\iloop#1\irepeat{\def\ibody{#1}\iiterate} \def\iiterate{\ibody\let\inext=\iiterate\else\let\inext=\relax\fi \inext} \def\xloop#1\xrepeat{\def\xbody{#1}\xiterate} \def\xiterate{\xbody\let\xnext\xiterate\else\let\xnext\relax\fi\xnext} \let\repeat\fi \let\irepeat\fi \let\xrepeat\fi \newcount\fp@loopcount \newcount\fp@loopcountii \newcount\fp@result \newcount\fp@carryover \newcount\fp@tempcount \newcount\fp@tempcountii \def\fp@setparam#1{\xdef\fp@param{#1}}% \def\ar@set#1#2#3{\expandafter\edef\csname#1@\number#2\endcsname{% \number#3}} \def\ar@get#1#2{\csname#1@\number#2\endcsname} \def\ar@setsig#1#2{\expandafter\edef\csname#1@sig\endcsname{#2}} \def\ar@getsig#1{\csname#1@sig\endcsname} \def\ar@getul#1{\csname#1@ul\endcsname} \def\ar@getll#1{\csname#1@ll\endcsname} \def\ar@setul#1#2{\expandafter\edef\csname#1@ul\endcsname{\number#2}} \def\ar@setll#1#2{\expandafter\edef\csname#1@ll\endcsname{\number#2}} \def\fp@settomax#1#2#3{% \ifnum#2<#3\relax #1=#3\relax \else #1=#2\relax \fi } \def\fp@settomin#1#2#3{% \ifnum#2<#3\relax #1=#2\relax \else #1=#3\relax \fi } \def\fp@modulo#1#2{% \fp@tempcount=#1\relax \fp@tempcountii=#1\relax \divide\fp@tempcountii#2\relax \multiply\fp@tempcountii#2\relax \advance\fp@tempcount-\fp@tempcountii \edef\fp@param{\number\fp@tempcount}} \def\fp@regread#1#2{% \fp@regread@raw{#1}{#2}% \fp@cleanreg{#1}} \def\fp@regread@raw#1#2{% \fp@tempcount=0 \edef\fp@arrayname{#1}% \ar@setsig{#1}{+}% \edef\fp@scratch{#2\fp@decimalsign}% \expandafter\fp@readchars\fp@scratch\end \ifnum\ar@getul{#1}=-1 \ar@setul{#1}{0}% \ar@set{#1}{0}{0}% \fi \fp@tempcount=0 \fp@tempcountii=\ar@getul{#1}\relax \iloop \ifnum\fp@tempcount<\fp@tempcountii \edef\fp@scratch{\ar@get{#1}{\fp@tempcountii}}% \ar@set{#1}{\fp@tempcountii}{\ar@get{#1}{\fp@tempcount}}% \ar@set{#1}{\fp@tempcount}{\fp@scratch}% \advance\fp@tempcount by 1 \advance\fp@tempcountii by -1 \irepeat }% end \fp@regread@raw \def\fp@readchars#1{% \ifx#1\end \let\inext=\relax \ifnum\fp@tempcount<0 \advance\fp@tempcount by 1 \ar@setll{\fp@arrayname}{\fp@tempcount}% \else \ar@setll{\fp@arrayname}{0}% \fi \else % \ifx#1\end \let\inext=\fp@readchars \ifx#1+% \else \ifx#1-% \if\ar@getsig{\fp@arrayname}-% \ar@setsig{\fp@arrayname}{+}% \else \ar@setsig{\fp@arrayname}{-}% \fi \else \if\noexpand#1\fp@decimalsign% \ifnum\fp@tempcount>-1 \advance\fp@tempcount by -1 \ar@setul{\fp@arrayname}{\fp@tempcount}% \fp@tempcount=-1 \fi \else \ar@set{\fp@arrayname}{\fp@tempcount}{#1}% \ifnum\fp@tempcount<0 \advance\fp@tempcount by -1 \else \advance\fp@tempcount by 1 \fi \fi% end \if\noexpand#1\fp@decimalsign \fi% end \ifx#1- \fi% end \ifx#1+ \fi% end \ifx#1\end \inext }% end \fp@readchars \def\fp@regget#1#2{% \if\ar@getsig{#1}-% \def#2{-}% \else \def#2{}% \fi \fp@tempcount=\ar@getul{#1}\relax \iloop \ifnum\fp@tempcount=-1 \edef#2{#2\fp@decimalsign}% \fi \edef#2{#2\ar@get{#1}{\fp@tempcount}}% \ifnum\fp@tempcount>\ar@getll{#1}\relax \advance\fp@tempcount by -1 \irepeat }% end \def\fp@regget \def\fp@cleanreg#1{% \fp@tempcount=\ar@getul{#1}\relax \iloop \ifnum\fp@tempcount>0 \ifnum\ar@get{#1}{\fp@tempcount}=0 \advance\fp@tempcount by -1 \ar@setul{#1}{\fp@tempcount}% \else \fp@tempcount=0 \fi \irepeat \fp@tempcount=\ar@getll{#1}\relax \iloop \ifnum\fp@tempcount<0 \ifnum\ar@get{#1}{\fp@tempcount}=0 \advance\fp@tempcount by 1 \ar@setll{#1}{\fp@tempcount}% \else \fp@tempcount=0 \fi \irepeat \ifnum\ar@getll{#1}=\ar@getul{#1}\relax \ifnum\ar@get{#1}{0}=0\relax \ar@setsig{#1}{+}% \fi \fi }% end \fp@regclean \def\fp@getdigit#1#2{% \ifnum#2<\ar@getll{#1}\relax \fp@setparam0% \else \ifnum#2>\ar@getul{#1}\relax \fp@setparam0% \else \fp@setparam{\ar@get{#1}{#2}}% \fi \fi }% end \fp@getdigit \def\fp@shiftright#1#2{% \edef\fp@shiftamount{\number#2}% \fp@settomax{\fp@tempcount}{\ar@getul{#1}}{-\fp@shiftamount}% \fp@settomin{\fp@tempcountii}{\ar@getll{#1}}{-\fp@shiftamount}% \def\fp@shiftnum{}% \iloop \fp@getdigit{#1}{\fp@tempcount}% \edef\fp@shiftnum{\fp@shiftnum\fp@param}% \ifnum\fp@tempcount=-\fp@shiftamount\relax \edef\fp@shiftnum{\fp@shiftnum\fp@decimalsign}% \fi \ifnum\fp@tempcount>\fp@tempcountii \advance\fp@tempcount by -1 \irepeat \fp@regread{#1}{\fp@shiftnum}% }% end \fp@shiftright \def\fp@firstnonzero#1{% \fp@regcomp{#1}{@0}% \if\fp@param=% \fp@setparam0% \else \fp@tempcount=\ar@getul{#1}\relax% \fp@tempcountii=\ar@getll{#1}\relax% \iloop \ifnum\ar@get{#1}{\fp@tempcount}>0 \fp@setparam{\number\fp@tempcount}% \fp@tempcount=\fp@tempcountii \fi \ifnum\fp@tempcount>\fp@tempcountii \advance\fp@tempcount by -1 \irepeat \fi }% end \fp@firstnonzero \def\fp@regcomp#1#2{% {% \if\ar@getsig{#1}-% \if\ar@getsig{#2}-% \fp@regcomp@main{#1}{#2}<>% \else \fp@setparam{<}% \fi \else \if\ar@getsig{#2}-% \fp@setparam{>}% \else \fp@regcomp@main{#1}{#2}><% \fi \fi }% } \def\fp@regcomp@main#1#2#3#4{% \fp@settomax{\fp@loopcount}{\ar@getul{#1}}{\ar@getul{#2}}% \fp@settomin{\fp@loopcountii}{\ar@getll{#1}}{\ar@getll{#2}}% \loop \fp@getdigit{#1}{\fp@loopcount}% \fp@tempcount=\fp@param\relax \fp@getdigit{#2}{\fp@loopcount}% \fp@tempcountii=\fp@param\relax \ifnum\fp@tempcount<\fp@tempcountii \fp@setparam{#4}% \fp@loopcount=\fp@loopcountii \else \ifnum\fp@tempcount>\fp@tempcountii \fp@setparam{#3}% \fp@loopcount=\fp@loopcountii \else \ifnum\fp@loopcount=\fp@loopcountii \fp@setparam{=}% \fi \fi \fi \ifnum\fp@loopcount>\fp@loopcountii \advance\fp@loopcount by -1 \repeat }% end \fp@regcomp@main \def\fp@regabs#1{% \ar@setsig{#1}{+}% } \def\fp@regneg#1{% \if\ar@getsig{#1}-% \ar@setsig{#1}{+}% \else \fp@regcomp{#1}{@0}% \if\fp@param=% \else \ar@setsig{#1}{-}% \fi \fi } \def\fp@reground#1#2{% \ifnum#2>\ar@getll{#1}\relax {% \fp@tempcount=#2\relax \advance\fp@tempcount by -1 \fp@getdigit{#1}{\fp@tempcount}% \ifnum\fp@param>4 \fp@regcopy{fp@temp}{@1}% \fp@shiftright{fp@temp}{#2}% \fp@regcomp{#1}{@0}% \if\fp@param<% \fp@regneg{fp@temp}% \fi \fp@regadd{#1}{fp@temp}% \fi \ifnum#2>0 \fp@loopcount=#2\relax \iloop \ifnum\fp@loopcount>0 \advance\fp@loopcount by -1 \ar@set{#1}{\fp@loopcount}{0}% \irepeat \ar@setll{#1}{0}% \else \ar@setll{#1}{#2}% \fi \fp@regget{#1}{\fp@scratch}% \fp@setparam\fp@scratch }% \fp@regread{#1}{\fp@param}% \fi } % end \fp@reground \def\fp@regcopy#1#2{% \fp@regget{#2}{\fp@scratch}% \fp@regread{#1}{\fp@scratch}% } \def\fp@regadd#1#2{% {% \if\ar@getsig{#1}\ar@getsig{#2}% \fp@settomin{\fp@loopcount}{\ar@getll{#1}}{\ar@getll{#2}}% \edef\fp@add@start{\number\fp@loopcount}% \fp@settomax{\fp@tempcount}{\ar@getul{#1}}{\ar@getul{#2}}% \edef\fp@add@finish{\number\fp@tempcount}% \fp@carryover=0 \loop \fp@getdigit{#1}{\fp@loopcount}% \fp@result=\fp@param\relax \fp@getdigit{#2}{\fp@loopcount}% \advance\fp@result by \fp@param\relax \advance\fp@result by \fp@carryover \ifnum\fp@result>9 \fp@carryover=1 \advance\fp@result by -10 \else \fp@carryover=0 \fi \ar@set{#1}{\fp@loopcount}{\fp@result}% \ifnum\fp@loopcount<\fp@add@finish\relax \advance\fp@loopcount by 1 \repeat \ifnum\fp@carryover>0 \advance\fp@loopcount by 1 \ar@set{#1}{\fp@loopcount}{\fp@carryover}% \fi \ar@setll{#1}{\fp@add@start}% \ar@setul{#1}{\fp@loopcount}% \fp@regget{#1}{\fp@scratch}% \fp@setparam\fp@scratch \else % \if sign \fp@regcopy{fp@tempi}{#1}% \fp@regcopy{fp@tempii}{#2}% \fp@regabs{fp@tempi}% \fp@regabs{fp@tempii}% \fp@regcomp{fp@tempi}{fp@tempii}% \if\fp@param>% \fp@regadd@sub{#1}{fp@tempi}{fp@tempii}% \else \fp@regadd@sub{#2}{fp@tempii}{fp@tempi}% \fi \fi % end \if sign }% \fp@regread{#1}{\fp@param}% }% end \fp@regadd \def\fp@regadd@sub#1#2#3{% \fp@regsub@restricted{#2}{#3}% \fp@regcomp{#1}{@0}% \if\fp@param<% \fp@regneg{#2}% \fi \fp@regget{#2}{\fp@scratch}% \fp@setparam\fp@scratch }% end \fp@regadd@sub \def\fp@regsub@restricted#1#2{% {% \fp@settomin{\fp@loopcount}{\ar@getll{#1}}{\ar@getll{#2}}% \edef\fp@lowermin{\number\fp@loopcount}% \fp@settomax{\fp@tempcount}{\ar@getul{#1}}{\ar@getul{#2}}% \edef\fp@uppermin{\number\fp@tempcount}% \fp@carryover=0 \loop \fp@getdigit{#1}{\fp@loopcount}% \fp@result=\fp@param\relax \fp@getdigit{#2}{\fp@loopcount}% \advance\fp@result by -\fp@param\relax \advance\fp@result by \fp@carryover \ifnum\fp@result<0 \fp@carryover=-1 \advance\fp@result by 10 \else \fp@carryover=0 \fi \ar@set{#1}{\fp@loopcount}{\fp@result}% \ifnum\fp@loopcount<\fp@uppermin\relax \advance\fp@loopcount by 1 \repeat \ifnum\fp@carryover=-1 \advance\fp@loopcount by 1 \ar@set{#1}{\fp@loopcount}{-1}% \fi \ar@setll{#1}{\fp@lowermin}% \ar@setul{#1}{\fp@loopcount}% \fp@regget{#1}{\fp@scratch}% \fp@setparam\fp@scratch }% \fp@regread{#1}{\fp@param}% }% end \fp@regsub@restricted \def\fp@regsub#1#2{% {% \fp@regneg{#2}% \fp@regadd{#1}{#2}% \fp@regget{#1}{\fp@scratch}% \fp@setparam\fp@scratch }% \fp@regread{#1}{\fp@param}% } \def\fp@regmul#1#2{% {% \fp@regcopy{fp@temp1}{@0}% \fp@loopcountii=\ar@getll{#2}\relax \xloop \fp@loopcount=\ar@getll{#1}\relax \fp@carryover=0 \def\fp@newnum{}% \loop \fp@result=\ar@get{#2}{\fp@loopcountii}\relax \multiply\fp@result by \ar@get{#1}{\fp@loopcount}\relax \advance\fp@result by \fp@carryover \ifnum\fp@result>9 \fp@carryover=\fp@result \divide\fp@carryover by 10 \fp@tempcount=\fp@carryover \multiply\fp@tempcount by 10 \advance\fp@result by -\fp@tempcount \else \fp@carryover=0 \fi \edef\fp@newnum{\number\fp@result\fp@newnum}% \ifnum\fp@loopcount<\ar@getul{#1}\relax \advance\fp@loopcount by 1 \repeat \edef\fp@newnum{\number\fp@carryover\fp@newnum}% \fp@regread{fp@temp2}{\fp@newnum}% \fp@tempcount=\fp@loopcountii \advance\fp@tempcount by -\number\ar@getll{#2}\relax \fp@shiftright{fp@temp2}{\fp@tempcount}% \fp@regadd{fp@temp1}{fp@temp2}% \ifnum\fp@loopcountii<\ar@getul{#2}\relax \advance\fp@loopcountii by 1 \xrepeat \fp@tempcount=\ar@getll{#1}\relax \advance\fp@tempcount by \ar@getll{#2}\relax \fp@shiftright{fp@temp1}{\fp@tempcount}% \if\ar@getsig{#1}\ar@getsig{#2}% \else \fp@regneg{fp@temp1}% \fi \fp@regget{fp@temp1}{\fp@scratch}% \fp@setparam\fp@scratch }% \fp@regread{#1}{\fp@param}% } % end \fp@regmul \def\fp@regdiv#1#2{% {% \fp@regcopy{fp@temp1}{#1}% \fp@regcopy{fp@temp2}{#2}% \fp@regabs{fp@temp1}% \fp@regabs{fp@temp2}% \fp@firstnonzero{fp@temp1}% \fp@loopcountii=\fp@param\relax \fp@firstnonzero{fp@temp2}% \advance\fp@loopcountii by -\fp@param\relax \fp@shiftright{fp@temp2}{\fp@loopcountii}% \def\fp@divnum{}% \ifnum\fp@loopcountii<0 \fp@tempcount=\fp@loopcountii \loop \ifnum\fp@tempcount<-1 \edef\fp@divnum{0\fp@divnum}% \advance\fp@tempcount by 1 \repeat \edef\fp@divnum{\fp@decimalsign\fp@divnum}% \fi \xloop \fp@tempcount=\fp@loopcountii \advance\fp@tempcount by 1 \ifnum\fp@tempcount>-\fp@accuracy\relax \fp@loopcount=0 \loop \fp@regcomp{fp@temp2}{fp@temp1}% \if\fp@param=% \def\fp@accuracy{0}% \gdef\fp@param{<}% \fi \if\fp@param<% \fp@regsub@restricted{fp@temp1}{fp@temp2}% \advance\fp@loopcount by 1 \repeat \ifnum\fp@loopcountii=-1 \edef\fp@divnum{\fp@divnum\fp@decimalsign}% \fi \edef\fp@divnum{\fp@divnum\number\fp@loopcount}% \fp@shiftright{fp@temp2}{-1}% \advance\fp@loopcountii by -1 \xrepeat \if\ar@getsig{#1}\ar@getsig{#2}% \fp@regread{fp@temp1}{\fp@divnum}% \else \fp@regread{fp@temp1}{-\fp@divnum}% \fi \fp@regget{fp@temp1}{\fp@scratch}% \fp@setparam\fp@scratch }% \fp@regread{#1}{\fp@param}% } \def\fp@call@bin#1#2#3#4{% {% \fp@regread{fp@user1}{#2}% \fp@regread{fp@user2}{#3}% \csname fp@reg#4\endcsname{fp@user1}{fp@user2}% \fp@regget{fp@user1}{\fp@scratch}% \fp@setparam\fp@scratch }% \edef#1{\fp@param}% } \def\fpAdd#1#2#3{\fp@call@bin{#1}{#2}{#3}{add}} \def\fpSub#1#2#3{\fp@call@bin{#1}{#2}{#3}{sub}} \def\fpMul#1#2#3{\fp@call@bin{#1}{#2}{#3}{mul}} \def\fpDiv#1#2#3{\fp@call@bin{#1}{#2}{#3}{div}} \def\fp@call@un#1#2#3{% {% \fp@regread{fp@user1}{#2}% \csname fp@reg#3\endcsname{fp@user1}% \fp@regget{fp@user1}{\fp@scratch}% \fp@setparam\fp@scratch }% \edef#1{\fp@param}% } \def\fpAbs#1#2{\fp@call@un{#1}{#2}{abs}} \def\fpNeg#1#2{\fp@call@un{#1}{#2}{neg}} \def\fpRound#1#2#3{% {% \fpRegSet{fp@user1}{#2}% \fpRegRound{fp@user1}{#3}% \fpRegGet{fp@user1}{\fp@scratch}% \fp@setparam\fp@scratch }% \edef#1{\fp@param}% } \def\fpRegSet#1#2{\fp@regread{#1}{#2}} \def\fpRegGet#1#2{\fp@regget{#1}{#2}} \def\fpRegAdd#1#2{\fp@regadd{#1}{#2}} \def\fpRegSub#1#2{\fp@regsub{#1}{#2}} \def\fpRegMul#1#2{\fp@regmul{#1}{#2}} \def\fpRegDiv#1#2{\fp@regdiv{#1}{#2}} \def\fpRegAbs#1{\fp@regabs{#1}} \def\fpRegNeg#1{\fp@regneg{#1}} \def\fpRegCopy#1#2{\fp@regcopy{#1}{#2}} \def\fpRegRound#1#2{\fp@reground{#1}{#2}} \def\fpAccuracy#1{\edef\fp@accuracy{#1}} \fpAccuracy{5} \def\fpDecimalSign#1{\edef\fp@decimalsign{#1}} \fpDecimalSign{,} \def\fpThousandSep#1{\edef\fp@thousandsep{#1}} \fpThousandSep{} \fp@regread{@0}{0} \fp@regread{@1}{1} \catcode`\@=\atcatcode\relax \endinput %% %% End of file `fltpoint.tex'.