%%
%% This is file `fltpoint.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% fltpoint.dtx  (with options: `package')
%% 
%% IMPORTANT NOTICE:
%% 
%% For the copyright see the source file.
%% 
%% Any modified versions of this file must be renamed
%% with new filenames distinct from fltpoint.sty.
%% 
%% 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.)
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{fltpoint}[2004/11/12 v1.1b floating point arithmetic]
\DeclareOption{comma}{\AtBeginDocument{\fpDecimalSign,}}
\DeclareOption{point}{\AtBeginDocument{\fpDecimalSign.}}
\ProcessOptions*\relax
%\input{fltpoint}
%%
%% 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'.

\endinput
%%
%% End of file `fltpoint.sty'.
