Epsilon



  Eric Stahlberg's code does one too many divide; the results of his code
 are too small by a factor of two.  The test is for a "just noticeable
 difference" from 1.0, not a "too small to be noticed difference."
   I believe that it should go like this:
       PROGRAM MACHPR
       REAL*4 R4,TOL4,ZERO4
       REAL*8 R8,TOL8,ZERO8
 *MDC*IF IBM CRAY
       REAL*16 R16,TOL16,ZERO16
 *MDC*ENDIF
 C
       ZERO4=0.0
       ZERO8=0.0
       R4=1.0
       TOL4=R4
   100 IF ((R4+TOL4).EQ.R4) GOTO 200
       PRINT *,TOL4
       TOL4=TOL4/2.0
       GOTO 100
  200  tol4 = tol4 * 2.0
       PRINT *,'MACHINE PRECISION R4 IS GT :', TOL4
       R8=1.0
       TOL8=R8
   300 IF ((R8+TOL8).EQ.R8) GOTO 400
       PRINT *,TOL8
       TOL8=TOL8/2.0
       GOTO 300
  400  tol8 = tol8 * 2.0
       PRINT *,'MACHINE PRECISION R8 IS GT :', TOL8
 *MDC*IF IBM CRAY
       R16=1.0
       TOL16=R16
   500 IF ((R16+TOL16).EQ.R16) GOTO 600
       PRINT *,TOL16
       TOL16=TOL16/2.0
       GOTO 500
  600  tol16 = tol16 * 2.0
       PRINT *,'MACHINE PRECISION R16 IS GT :', TOL16
 *MDC*ENDIF
       STOP
       END
 C code from one of the earlier pseudo-code examples looks like:
 main()
 {
    float eps = 0.00001;
    float y = 1.0;
    float x;
 Again:
    x = y + eps;      /* find rough value of eps */
    if (x > y)
      {
       eps = 0.5*eps;
       goto Again;
      }
    eps = 2.0*eps;
 Again1:
    x = y + eps;       /* find value of eps within 1% */
    if (x > y)
      {
       eps = 0.99*eps;
       goto Again1;
      }
    eps = eps/0.99;
    printf("%e",eps);
 }
   Under Cray UNICOS, there is also a /usr/include/float.h file which
 specifies the epsilon limits.
   =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=
    Tim Whitley            ((  Internet...twhitley : at : ncsa.uiuc.edu
    Cray Research, Inc.     )) Phone......(217) 244-4863
    4139 Beckman Institute ((  FAX........(217) 244-2909
    405 N. Mathews Avenue   )) "The views presented herein are not those
    Urbana, IL 61801       ((   of Cray Research, but are solely my own."
   =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=