home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / octave-1.1.1p1-src.tgz / tar.out / fsf / octave / libcruft / slatec-fn / dgamlm.f < prev    next >
Text File  |  1996-09-28  |  2KB  |  63 lines

  1. *DECK DGAMLM
  2.       SUBROUTINE DGAMLM (XMIN, XMAX)
  3. C***BEGIN PROLOGUE  DGAMLM
  4. C***PURPOSE  Compute the minimum and maximum bounds for the argument in
  5. C            the Gamma function.
  6. C***LIBRARY   SLATEC (FNLIB)
  7. C***CATEGORY  C7A, R2
  8. C***TYPE      DOUBLE PRECISION (GAMLIM-S, DGAMLM-D)
  9. C***KEYWORDS  COMPLETE GAMMA FUNCTION, FNLIB, LIMITS, SPECIAL FUNCTIONS
  10. C***AUTHOR  Fullerton, W., (LANL)
  11. C***DESCRIPTION
  12. C
  13. C Calculate the minimum and maximum legal bounds for X in gamma(X).
  14. C XMIN and XMAX are not the only bounds, but they are the only non-
  15. C trivial ones to calculate.
  16. C
  17. C             Output Arguments --
  18. C XMIN   double precision minimum legal value of X in gamma(X).  Any
  19. C        smaller value of X might result in underflow.
  20. C XMAX   double precision maximum legal value of X in gamma(X).  Any
  21. C        larger value of X might cause overflow.
  22. C
  23. C***REFERENCES  (NONE)
  24. C***ROUTINES CALLED  D1MACH, XERMSG
  25. C***REVISION HISTORY  (YYMMDD)
  26. C   770601  DATE WRITTEN
  27. C   890531  Changed all specific intrinsics to generic.  (WRB)
  28. C   890531  REVISION DATE from Version 3.2
  29. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  30. C   900315  CALLs to XERROR changed to CALLs to XERMSG.  (THJ)
  31. C***END PROLOGUE  DGAMLM
  32.       DOUBLE PRECISION XMIN, XMAX, ALNBIG, ALNSML, XLN, XOLD, D1MACH
  33. C***FIRST EXECUTABLE STATEMENT  DGAMLM
  34.       ALNSML = LOG(D1MACH(1))
  35.       XMIN = -ALNSML
  36.       DO 10 I=1,10
  37.         XOLD = XMIN
  38.         XLN = LOG(XMIN)
  39.         XMIN = XMIN - XMIN*((XMIN+0.5D0)*XLN - XMIN - 0.2258D0 + ALNSML)
  40.      1    / (XMIN*XLN+0.5D0)
  41.         IF (ABS(XMIN-XOLD).LT.0.005D0) GO TO 20
  42.  10   CONTINUE
  43.       CALL XERMSG ('SLATEC', 'DGAMLM', 'UNABLE TO FIND XMIN', 1, 2)
  44. C
  45.  20   XMIN = -XMIN + 0.01D0
  46. C
  47.       ALNBIG = LOG (D1MACH(2))
  48.       XMAX = ALNBIG
  49.       DO 30 I=1,10
  50.         XOLD = XMAX
  51.         XLN = LOG(XMAX)
  52.         XMAX = XMAX - XMAX*((XMAX-0.5D0)*XLN - XMAX + 0.9189D0 - ALNBIG)
  53.      1    / (XMAX*XLN-0.5D0)
  54.         IF (ABS(XMAX-XOLD).LT.0.005D0) GO TO 40
  55.  30   CONTINUE
  56.       CALL XERMSG ('SLATEC', 'DGAMLM', 'UNABLE TO FIND XMAX', 2, 2)
  57. C
  58.  40   XMAX = XMAX - 0.01D0
  59.       XMIN = MAX (XMIN, -XMAX+1.D0)
  60. C
  61.       RETURN
  62.       END
  63.