Simon Jeffery's Software Store
TAP: mathematical functions.
Quick Reference
FUNCTION TAP_GAMMA ( X, STATUS ) Evaluate the gamma function Gamma (x) for a real argument. FUNCTION TAP_GAMMLN ( X, STATUS ) Evaluate the gamma function ln Gamma (x) for a positive real argument. FUNCTION TAP_FACTRL ( N , STATUS ) Return the value of factorial N, i.e. N! as a floating point number FUNCTION TAP1_POWERG ( Z, STATUS ) Evaluate power series expansion for ln Gamma (z)
Long Reference
DOUBLE PRECISION FUNCTION TAP_GAMMA ( X, STATUS )
Purpose: Evaluate the gamma function Gamma (x) for a real argument. Invocation: DOUBLE PRECISION TAP_GAMMA RESULT = TAP_GAMMA( X, STATUS ) Description: The gamma function (Gamma (x)) is evaluated for a single real argument. The gamma function for positive x using the TAP function TAP_GAMMLN, which uses a power series expansion. If x < 0 the reflection formula Gamma(x) * Gamma(1-x) = pi.cosec(pi.x) is applied. If x = -n, n = 0,1,2,..., Gamma(x) has a pole. An error status is returned, and TAP_GAMMA (x) is not defined. Arguments: X = DOUBLE PRECISION (Given) The real number X for which GAMMA(X) is required. STATUS = INTEGER (Given and Returned) The global status. Returned Value: TAP_GAMMA = DOUBLE PRECISION GAMMA(X) as a real number Subprograms used: DOUBLE PRECISION FUNCTION TAP_GAMMLN ( Z, STATUS ) DOUBLE PRECISION FUNCTION TAP1_POWERG ( Z, STATUS )DOUBLE PRECISION FUNCTION TAP_GAMMLN ( X, STATUS )
Purpose: Evaluate the gamma function ln Gamma (x) for a positive real argument. Invocation: DOUBLE PRECISION TAP_GAMMLN RESULT = TAP_GAMMLN( X, STATUS ) Description: The gamma function (Gamma (x)) is evaluated for a single real positive argument, the logarithm (ln (Gamma(x))) is returned. The gamma function is evaluated using a power series expansion valid over the interval 0 < x < 2. However, the expnasion is only used in the interval 1/2 < x < 3/2, where it is most rapidly convergent. For other values of the argument x, a combination of the reflection formula Gamma(x) * Gamma(1-x) = pi.cosec(pi.x) and the recurrence relation Gamma(x+1) = x.Gamma(x) are applied. The algorithm is not as fast as obtained with a series approximation, (eg Stirling's formula or the Lanczos approximation - see Press et al.), but is adopted here in order to achieve maximum arithmetic precision. References. Abramowitz M., & Stegun I.A., 1974, Handbook of Mathematical Functions, Dover. Press et al. 1989. Numerical Recipes Arguments: X = DOUBLE PRECISION (Given) The real number X for which GAMMA(X) is required. STATUS = INTEGER (Given and Returned) The global status. Returned Value: TAP_GAMMLN = DOUBLE PRECISION LOG (GAMMA(X)) as a real number Subprograms used: DOUBLE PRECISION FUNCTION TAP1_POWERG ( Z, STATUS )DOUBLE PRECISION FUNCTION TAP_FACTRL ( N , STATUS )
Purpose: Return the value of factorial N, i.e. N! as a floating point number Language: Starlink Fortran 77 Invocation: DOUBLE PRECISION TAP_FACTRL RESULT = TAP_FACTRL( N, STATUS ) Package: TAP: Theoretical Astrophysics Package Module type: double precision function Description: The factorial function is evaluated explicitly the first time it is required for a given N > NTOP. The results of n! for all n <= N are stored in an array, so that repeat calculations are not performed. NTOP, initially 0, is reset to N. If N < NTOP, the value of N! is recovered from a look up table. The program is only valid for N! < the machine largest number. If N! = nmax! > this value, an error value is flagged. TAP_FACTRL is not defined for -1 < n < nmax. Accuracy: This function is accurate to at least 14 significant figures for N <= 169. It has been tested by comparison with the MAPLE symbolic computation package (Char, B.W., Geddes, K.O., Gonnet, G.H., Monagan, M.B., and Watt, S.M., 1988, Watcom Publications, Waterloo, Ontario, Canada). Arguments: N = INTEGER (Given) The integer N for which N! is required. STATUS = INTEGER (Given and Returned) The global status. Returned Value: TAP_FACTRL = DOUBLE PRECISION N! as a floating point numberDOUBLE PRECISION FUNCTION TAP1_POWERG ( Z, STATUS )
Purpose: Evaluate power series expansion for ln Gamma (z) Invocation: Should not be invoked except by TAP_GAMMLN Description: The Gamma function is evaluated by means of a power series expansion valid for |z|<2 ln (Gamma(1+z)) = -ln(1+z) + z(1-gamma) + sum(n=2,...)(Cn.z^n) Cn = (-1)**n * (Zeta(n)-1) / n Zeta(n) is the Riemann Zeta function. The constants Cn have been evaluated to 34 d.p. using the symbolic mathematical computation package MAPLEV... It is designed to converge to machine precision, but this depends on the number of terms (Cn) available. In the current version, the TAP parameter TAP__DSMAL is used as convergence criterion. In the range 1 < z < 2, the function is accurate to at least 10 decimal places in a comparison with the tables in Abramowitz and Stegun (1971). In the range 0.5 < z < 1.5, the series converges to 1 part in 10^10 after 15 terms. For z = 2, approximately 30 terms are required. Arguments: Z = DOUBLE PRECISION (Given) The real number Z for which ln(GAMMA(X)) is required. STATUS = INTEGER (Given and returned) The inheritied global status. Returned Value: TAP1_POWERG = DOUBLE PRECISION LOG (GAMMA(Z)) as a real number Notes: This function subprogram must _only_ be used in association with TAP_GAMMLN or an equivalent front end, in order to check for argument validity.