Article View: comp.text.tex
Article #2695Any ideas on fixed point addition?
From: tvz
Date: Mon, 14 Sep 1992 22:01
Date: Mon, 14 Sep 1992 22:01
105 lines
3435 bytes
3435 bytes
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
Technical Details
Message-ID:
<1992Sep14.220128.16318@Princeton.EDU>Path:
arc1-ca.pugleaf.net!sparky!uunet!elroy.jpl.nasa.gov!swrinde!zaphod.mps.ohio-state.edu!darwin.sura.net!jvnc.net!princeton!zandtwerk.Princeton.EDU!tvzShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!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