      !--------------------------------------------------------------
      !
      ! Gamm
      !
      ! Test the speed of floating point operations in a mix that
      ! is typical of scientific and engineering applications.
      !
      !--------------------------------------------------------------
     
      DIM FIVE AS INTEGER , I AS INTEGER , J AS INTEGER
      DIM N AS INTEGER , REP AS INTEGER , TEN AS INTEGER , THIRTY AS INTEGER
      DIM A(30), B(30), C(30)
     
      PRINT "Start timing 15000 Gamm units"
      N = 50
      FIVE = 5
      TEN = 10
      THIRTY = 30
      RN = N
      DIVN = 1.0 / RN
      X = 0.1
      ACC = 0.0
     
      ! initialize a and b
      Y = 1.0
      FOR I = 1 TO 30
        A(I) = I
        B(I) = - Y
        Y = - Y
      NEXT
     
      ! one pass thru this loop corresponds to 300 gamm units
      FOR REP = 1 TO N
        ! first addition/subtraction loop
        I = 30
        FOR J = 1 TO 30
          C(I) = A(I) + B(I)
          I = I - 1
        NEXT
        ! first polynomial loop
        Y = 1.0
        FOR I = 1 TO TEN
          Y = (Y + C(I)) * X
        NEXT
        ACC1 = Y * DIVN
        ! first maximum element loop
        Y = C(11)
        FOR I = 12 TO 20
          IF C(I) > Y THEN
            Y = C(I)
          END IF
        NEXT
        ! first square root loop
        ROOT = 1.0
        FOR I = 1 TO 5
          ROOT = 0.5 * (ROOT + Y / ROOT)
        NEXT
        ACC1 = ACC1 + ROOT * DIVN
        ! second addition/subtraction loop
        FOR I = 1 TO 30
          A(I) = C(I) - B(I)
        NEXT
        ! second polynomial loop
        Y = 0.0
        FOR I = 1 TO TEN
          Y = (Y + A(I)) * X
        NEXT
        ! second square root loop
        ROOT = 1.0
        FOR I = 1 TO FIVE
          ROOT = 0.5 * (ROOT + Y / ROOT)
        NEXT
        ACC1 = ACC1 + ROOT * DIVN
        ! first multiplication loop
        FOR I = 1 TO THIRTY
          C(I) = C(I) * B(I)
        NEXT
        ! second maximum element loop
        Y = C(20)
        FOR I = 21 TO THIRTY
          IF C(I) > Y THEN
            Y = C(I)
          END IF
        NEXT
        ! third square root loop
        ROOT = 1.0
        FOR I = 1 TO 5
          ROOT = 0.5 * (ROOT + Y / ROOT)
        NEXT
        ACC1 = ACC1 + ROOT * DIVN
        ! third polynomial loop
        Y = 0.0
        FOR I = 1 TO TEN
          Y = (Y + C(I)) * X
        NEXT
        ACC1 = ACC1 + Y * DIVN
        ! third maximum element loop
        Y = C(1)
        FOR I = 2 TO TEN
          IF C(I) > Y THEN
            Y = C(I)
          END IF
        NEXT
        ! fourth square root loop
        ROOT = 1.0
        FOR I = 1 TO 5
          ROOT = 0.5 * (ROOT + Y / ROOT)
        NEXT
        ACC1 = ACC1 + ROOT * DIVN
        ACC = ACC + ACC1
      NEXT
      PRINT N, ACC, ACC1
     
