🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.text.tex
Article #2695

Any ideas on fixed point addition?

#2695
From: tvz
Date: Mon, 14 Sep 1992 22:01
105 lines
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!tvz

Show 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