Main Page   Class Hierarchy   Data Structures   File List   Data Fields   Globals  

numsym.f

Go to the documentation of this file.
00001 
00002 c     
00003 c     Copyright (c) 1986,1987,1988,1989,1990,1991,1992,1993,
00004 c     by Steve McMillan, Drexel University, Philadelphia, PA.
00005 c     
00006 c     All rights reserved.
00007 c     
00008 c     Redistribution and use in source and binary forms are permitted
00009 c     provided that the above copyright notice and this paragraph are
00010 c     duplicated in all such forms and that any documentation,
00011 c     advertising materials, and other materials related to such
00012 c     distribution and use acknowledge that the software was developed
00013 c     by the author named above.
00014 c     
00015 c     THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
00016 c     IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
00017 c     WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
00018 c     
00019 
00020       subroutine numsym(f,ic,outstr,m)
00021 
00022       implicit double precision (d)
00023       save
00024       real*8 spacc
00025       real*4 f
00026       integer*4 i,ic,j,m,n
00027       character outstr*80
00028 
00029       character*1 dot,neg,blank,digit(0:9)
00030       data dot/'.'/neg/'-'/,blank/' '/
00031      &        digit/'0','1','2','3','4','5','6','7','8','9'/
00032      &        spacc/1.00000001/
00033 
00034       dex(dpf) = 10.**dpf
00035 
00036       dpf = dble(f)
00037       n = 0
00038       if (dpf.ne.0.) then
00039           n = log10(abs(dpf)) + 1.001           ! digits to left of decimal.
00040       end if
00041       if (n.le.0) n = 1
00042       m = n + 1 + ic                            ! total characters plotted.
00043       dpg = abs(dpf)                            ! for discounting.
00044 
00045       if (ic.lt.0) then
00046 
00047          do i = 1,m
00048             dph = dex(dfloat(n-i))
00049             j = dpg/dph*spacc                   ! discounted digit.
00050             outstr(i:i) = digit(j)
00051             dpg = dpg - j*dph                   ! discount dpg for next digit.
00052          end do
00053          
00054       else
00055 
00056          do i = 1,n
00057             dph = dex(dfloat(n-i))
00058             j = dpg/dph*spacc                   ! discounted digit.
00059             outstr(i:i) = digit(j)
00060             dpg = dpg-j*dph                     ! discount dpg for next digit.
00061          end do
00062 
00063          outstr(n+1:n+1) = dot                  ! insert decimal point.
00064          if (ic.gt.0) then
00065             do i = 1,ic                         ! add decimal digits.
00066                j = 10*dpg*spacc                 ! discounted digit.
00067                outstr(n+1+i:n+1+i) = digit(j)
00068                dpg = 10.*dpg-j                  ! continue discounting dpg.
00069             end do
00070          end if
00071 
00072       end if
00073 
00074       j = 10*dpg*spacc
00075       if(j.lt.5)go to 501                       ! round off last digit(s).
00076 
00077       if(ic.gt.0)then
00078           do i = m,n+2,-1                       ! start at right edge of string.
00079               if (ichar(outstr(i:i)).le.56) then
00080                   outstr(i:i) = char(ichar(outstr(i:i))+1)
00081                   go to 501
00082               end if
00083               outstr(i:i) = digit(0)
00084           end do
00085       end if
00086 
00087       do i = n,1,-1                         ! then adjust left, if necessary.
00088           if (ichar(outstr(i:i)).le.56) then
00089               outstr(i:i) = char(ichar(outstr(i:i))+1)
00090               go to 501
00091           end if
00092           outstr(i:i) = digit(0)
00093       end do
00094       do  i = m,1,-1
00095           outstr(i+1:i+1) = outstr(i:i)
00096       end do
00097       outstr(1:1) = digit(1)
00098 
00099 c     Put "-" up front if necessary.
00100 
00101 501   if (f.lt.0.) then
00102           do i = 1,m
00103               if (outstr(i:i).ne.'.'.and.outstr(i:i).ne.'0') go to 506
00104           end do
00105           go to 508
00106 506       do i = m+2,1,-1
00107               outstr(i+1:i+1) = outstr(i:i)
00108           end do
00109           outstr(1:1) = neg
00110           m = m+1
00111       end if
00112 508   continue
00113 
00114       end

Generated at Sun Feb 24 09:57:11 2002 for STARLAB by doxygen1.2.6 written by Dimitri van Heesch, © 1997-2001