home *** CD-ROM | disk | FTP | other *** search
- Path: sparky!uunet!elroy.jpl.nasa.gov!swrinde!zaphod.mps.ohio-state.edu!darwin.sura.net!jvnc.net!princeton!zandtwerk.Princeton.EDU!tvz
- From: tvz@zandtwerk.Princeton.EDU
- Newsgroups: comp.text.tex
- Subject: Any ideas on fixed point addition?
- Message-ID: <1992Sep14.220128.16318@Princeton.EDU>
- Date: 14 Sep 92 22:01:28 GMT
- Sender: news@Princeton.EDU (USENET News System)
- Organization: Princeton University
- Lines: 105
- Originator: tvz@zandtwerk.Princeton.EDU
- Nntp-Posting-Host: zandtwerk.princeton.edu
-
- Here is a macro for fixed point addition.
-
- USAGE \FPadd{num1}{num2}\cs
-
- This sets \cs to num1+num2.
-
- Rules:
-
- num1 and num2 should have the same number of digits to the
- right of the decimal. (Exception: if num1 is an integer,
- decimal not needed.)
- num1 and num2 should have at least one digit to the left
- of the decimal (e.g., 0)
- num1 and num2 can have at most 8 digits on each side of the
- decimal.
- Negative numbers are OK.
-
- DOES ANYONE HAVE ANY BETTER IDEAS? IT SEEMS LIKE A LOT OF
- WORK FOR SOMETHING SO SIMPLE!!
-
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- \catcode`\@=11
-
- \newcount\multido@cnta
- \newcount\multido@cntb
- \newcount\multido@cntc
- \newcount\multido@cntd
-
- \def\@empty{}
-
- \def\FPadd#1#2#3{%
- \edef\multido@tempa{#1..\noexpand\@nil#2}%
- \expandafter\FPadd@\multido@tempa..\@nil
- \let#3\multido@tempa}
- \def\FPadd@#1.#2.#3\@nil#4.#5.#6\@nil{%
- \multido@cnta=#1\relax
- \multido@cntc=#4\relax
- \multido@cntd=#5\relax
- \multido@cntb=\@ne
- \FPadd@@@#500000000\@nil
- \ifnum#11<0
- \multido@cntb=-\multido@cntb
- \multiply\multido@cntb by 2
- \multido@cnta=-\multido@cnta
- \fi
- \ifnum#41<0
- \multido@cntb=-\multido@cntb
- \multido@cntc=-\multido@cntc
- \fi
- \ifnum\multido@cntb>0
- \advance\multido@cnta\multido@cntc
- \advance\multido@cntd0#2
- \ifnum\multido@cntd<\multido@tempa\relax
- \advance\multido@cntd\multido@tempa\relax
- \else
- \advance\multido@cnta 1
- \fi
- \expandafter\FPadd@@\the\multido@cntd\@empty\@nil
- {\ifnum\multido@cntb>\@ne-\fi}%
- \else
- \ifnum\multido@cnta>\multido@cntc\else
- \ifnum\multido@cnta=\multido@cntc
- \ifnum\multido@cntd>0#2
- \multido@cntb=-\multido@cntb
- \fi
- \else
- \multido@cntb=-\multido@cntb
- \fi
- \fi
- \ifnum\multido@cntb<\z@
- \advance\multido@cnta-\multido@cntc
- \multido@cntc=0#2\relax
- \advance\multido@cntc-\multido@cntd
- \else
- \advance\multido@cntc-\multido@cnta
- \multido@cnta=\multido@cntc
- \advance\multido@cntd-0#2
- \multido@cntc=\multido@cntd
- \advance\multido@cntb-1
- \fi
- \ifnum\multido@cntc<\z@
- \advance\multido@cntc\multido@tempa\relax
- \advance\multido@cnta-1
- \fi
- \advance\multido@cntc\multido@tempa\relax
- \expandafter\FPadd@@\the\multido@cntc\@empty\@nil
- {\ifnum\multido@cntb=-2-\fi}%
- \fi}
- \def\FPadd@@#1#2#3\@nil#4{%
- \edef\multido@tempa{%
- #4\the\multido@cnta\ifx#2\@empty\else.#2#3\fi}}
- \def\FPadd@@@#1#2#3#4#5#6#7#8#9\@nil{\def\multido@tempa{1#9}}
-
-
- \FPadd{-13.42}{3.33}\tempa
-
- \message{***\tempa***}
-
- \bye
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- Tim
- --
- Timothy Van Zandt (609)258-4050 tvz@Princeton.EDU (NeXTMail)
- Dept. of Economics, Princeton University, Princeton, NJ 08544
-