home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #20 / NN_1992_20.iso / spool / comp / text / tex / 11204 < prev    next >
Encoding:
Text File  |  1992-09-14  |  3.2 KB  |  118 lines

  1. Path: sparky!uunet!elroy.jpl.nasa.gov!swrinde!zaphod.mps.ohio-state.edu!darwin.sura.net!jvnc.net!princeton!zandtwerk.Princeton.EDU!tvz
  2. From: tvz@zandtwerk.Princeton.EDU
  3. Newsgroups: comp.text.tex
  4. Subject: Any ideas on fixed point addition?
  5. Message-ID: <1992Sep14.220128.16318@Princeton.EDU>
  6. Date: 14 Sep 92 22:01:28 GMT
  7. Sender: news@Princeton.EDU (USENET News System)
  8. Organization: Princeton University
  9. Lines: 105
  10. Originator: tvz@zandtwerk.Princeton.EDU
  11. Nntp-Posting-Host: zandtwerk.princeton.edu
  12.  
  13. Here is a macro for fixed point addition.
  14.  
  15. USAGE \FPadd{num1}{num2}\cs
  16.  
  17. This sets \cs to num1+num2.
  18.  
  19. Rules:
  20.  
  21.   num1 and num2 should have the same number of digits to the
  22.     right of the decimal. (Exception: if num1 is an integer,
  23.     decimal not needed.)
  24.   num1 and num2 should have at least one digit to the left
  25.     of the decimal (e.g., 0)
  26.   num1 and num2 can have at most 8 digits on each side of the
  27.     decimal.
  28.   Negative numbers are OK.
  29.  
  30. DOES ANYONE HAVE ANY BETTER IDEAS? IT SEEMS LIKE A LOT OF
  31. WORK FOR SOMETHING SO SIMPLE!!
  32.  
  33. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34. \catcode`\@=11
  35.  
  36. \newcount\multido@cnta
  37. \newcount\multido@cntb
  38. \newcount\multido@cntc
  39. \newcount\multido@cntd
  40.  
  41. \def\@empty{}
  42.  
  43. \def\FPadd#1#2#3{%
  44.   \edef\multido@tempa{#1..\noexpand\@nil#2}%
  45.   \expandafter\FPadd@\multido@tempa..\@nil
  46.   \let#3\multido@tempa}
  47. \def\FPadd@#1.#2.#3\@nil#4.#5.#6\@nil{%
  48.   \multido@cnta=#1\relax
  49.   \multido@cntc=#4\relax
  50.   \multido@cntd=#5\relax
  51.   \multido@cntb=\@ne
  52.   \FPadd@@@#500000000\@nil
  53.   \ifnum#11<0
  54.     \multido@cntb=-\multido@cntb
  55.     \multiply\multido@cntb by 2
  56.     \multido@cnta=-\multido@cnta
  57.   \fi
  58.   \ifnum#41<0
  59.     \multido@cntb=-\multido@cntb
  60.     \multido@cntc=-\multido@cntc
  61.   \fi
  62.   \ifnum\multido@cntb>0
  63.     \advance\multido@cnta\multido@cntc
  64.     \advance\multido@cntd0#2
  65.     \ifnum\multido@cntd<\multido@tempa\relax
  66.       \advance\multido@cntd\multido@tempa\relax
  67.     \else
  68.       \advance\multido@cnta 1
  69.     \fi
  70.     \expandafter\FPadd@@\the\multido@cntd\@empty\@nil
  71.       {\ifnum\multido@cntb>\@ne-\fi}%
  72.   \else
  73.     \ifnum\multido@cnta>\multido@cntc\else
  74.       \ifnum\multido@cnta=\multido@cntc
  75.         \ifnum\multido@cntd>0#2
  76.           \multido@cntb=-\multido@cntb
  77.         \fi
  78.       \else
  79.         \multido@cntb=-\multido@cntb
  80.       \fi
  81.     \fi
  82.     \ifnum\multido@cntb<\z@
  83.       \advance\multido@cnta-\multido@cntc
  84.       \multido@cntc=0#2\relax
  85.       \advance\multido@cntc-\multido@cntd
  86.     \else
  87.       \advance\multido@cntc-\multido@cnta
  88.       \multido@cnta=\multido@cntc
  89.       \advance\multido@cntd-0#2
  90.       \multido@cntc=\multido@cntd
  91.       \advance\multido@cntb-1
  92.     \fi
  93.     \ifnum\multido@cntc<\z@
  94.       \advance\multido@cntc\multido@tempa\relax
  95.       \advance\multido@cnta-1
  96.     \fi
  97.     \advance\multido@cntc\multido@tempa\relax
  98.     \expandafter\FPadd@@\the\multido@cntc\@empty\@nil
  99.       {\ifnum\multido@cntb=-2-\fi}%
  100.   \fi}
  101. \def\FPadd@@#1#2#3\@nil#4{%
  102.   \edef\multido@tempa{%
  103.     #4\the\multido@cnta\ifx#2\@empty\else.#2#3\fi}}
  104. \def\FPadd@@@#1#2#3#4#5#6#7#8#9\@nil{\def\multido@tempa{1#9}}
  105.     
  106.     
  107. \FPadd{-13.42}{3.33}\tempa
  108.  
  109. \message{***\tempa***}
  110.  
  111. \bye
  112. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  113.  
  114. Tim
  115. -- 
  116. Timothy Van Zandt   (609)258-4050  tvz@Princeton.EDU (NeXTMail)
  117. Dept. of Economics,  Princeton University,  Princeton, NJ 08544
  118.