      FUNCTION R9PAK (Y, N)
      LOGICAL FIRST
      SAVE NMIN, NMAX, A1N210, FIRST
      DATA A1N210 / 3.321928094 887362 E0/
      DATA FIRST /.TRUE./
C***FIRST EXECUTABLE STATEMENT  R9PAK
      IF (FIRST) THEN
         A1N2B = 1.0
         IF (I1MACH(10).NE.2) A1N2B = R1MACH(5)*A1N210
         NMIN = A1N2B*I1MACH(12)
         NMAX = A1N2B*I1MACH(13)
      ENDIF
      FIRST = .FALSE.
C
      CALL R9UPAK(Y,R9PAK,NY)
C
      NSUM = N + NY
      IF (NSUM.LT.NMIN) GO TO 40
      IF (NSUM .GT. NMAX) CALL XERMSG ('SLATEC', 'R9PAK',
     +   'PACKED NUMBER OVERFLOWS', 2, 2)
C
      IF (NSUM.EQ.0) RETURN
      IF (NSUM.GT.0) GO TO 30
C
 20   R9PAK = 0.5*R9PAK
      NSUM = NSUM + 1
      IF(NSUM.NE.0) GO TO 20
      RETURN
C
30    R9PAK = 2.0*R9PAK
      NSUM = NSUM - 1
      IF(NSUM.NE.0) GO TO 30
      RETURN
C
40    CALL XERMSG ('SLATEC', 'R9PAK', 'PACKED NUMBER UNDERFLOWS', 1, 1)
      R9PAK = 0.0
      RETURN
C
      END
