|
|
1.1 ! root 1: .\" Copyright (c) 1985 Regents of the University of California. ! 2: .\" All rights reserved. The Berkeley software License Agreement ! 3: .\" specifies the terms and conditions for redistribution. ! 4: .\" ! 5: .\" @(#)lgamma.3 6.2 (Berkeley) 5/12/86 ! 6: .\" ! 7: .TH LGAMMA 3M "May 12, 1986" ! 8: .UC 6 ! 9: .SH NAME ! 10: lgamma \- log gamma function ! 11: .SH SYNOPSIS ! 12: .nf ! 13: .B #include <math.h> ! 14: .PP ! 15: .B double lgamma(x) ! 16: .B double x; ! 17: .fi ! 18: .SH DESCRIPTION ! 19: .nf ! 20: .ta \w'Lgamma returns ln\||\(*G(x)| where'u+1n +1.7i ! 21: .if t \{\ ! 22: Lgamma returns ln\||\(*G(x)| where \(*G(x) = \(is\d\s8\z0\s10\u\u\s8\(if\s10\d t\u\s8x\-1\s10\d e\u\s8\-t\s10\d dt for x > 0 and ! 23: .br ! 24: \(*G(x) = \(*p/(\(*G(1\-x)\|sin(\(*px)) for x < 1. \} ! 25: .if n \ ! 26: Lgamma returns ln\||\(*G(x)|. ! 27: .ta ! 28: .fi ! 29: .PP ! 30: The external integer signgam returns the sign of ! 31: \(*G(x) . ! 32: .SH IDIOSYNCRASIES ! 33: Do \fBnot\fR use the expression signgam\(**exp(lgamma(x)) ! 34: to compute g := \(*G(x). Instead use a program like this (in C): ! 35: .RS ! 36: lg = lgamma(x); g = signgam\(**exp(lg); ! 37: .RE ! 38: .PP ! 39: Only after lgamma has returned can signgam be correct. ! 40: Note too that \(*G(x) must overflow when x is large enough, ! 41: underflow when \-x is large enough, and spawn a division by zero ! 42: when x is a nonpositive integer. ! 43: .PP ! 44: Only in the UNIX math library for C was the name gamma ever attached ! 45: to ln\(*G. Elsewhere, for instance in IBM's FORTRAN library, the name ! 46: GAMMA belongs to \(*G and the name ALGAMA to ln\(*G in single precision; ! 47: in double the names are DGAMMA and DLGAMA. Why should C be different? ! 48: .PP ! 49: Archaeological records suggest that C's gamma originally delivered ! 50: ln(\(*G(|x|)). Later, the program gamma was changed to ! 51: cope with negative arguments x in a more conventional way, but ! 52: the documentation did not reflect that change correctly. The most ! 53: recent change corrects inaccurate values when x is almost a ! 54: negative integer, and lets \(*G(x) be computed without ! 55: conditional expressions. Programmers should not assume that ! 56: lgamma has settled down. ! 57: .PP ! 58: At some time in the future, the name \fIgamma\fR will be rehabilitated ! 59: and used for the gamma function, just as is done in FORTRAN. ! 60: The reason for this is not so much compatibility with FORTRAN as a ! 61: desire to achieve greater speed for smaller values of |x| and greater ! 62: accuracy for larger values. ! 63: .PP ! 64: Meanwhile, programmers who have to use the name \fIgamma\fR in its former ! 65: sense, for what is now \fIlgamma\fR, have two choices: ! 66: .IP 1) \w'1)\0'u ! 67: Use the old math library, \fIlibom\fR. ! 68: .IP 2) \w'1)\0'u ! 69: Add the following program to your others: ! 70: .RS ! 71: .nf ! 72: \fB#include <math.h> ! 73: double gamma(x) ! 74: double x; ! 75: { ! 76: .RS ! 77: \fBreturn (lgamma(x)); ! 78: .RE ! 79: }\fR ! 80: .RE ! 81: .fi ! 82: .SH DIAGNOSTICS ! 83: The reserved operand is returned on a VAX for negative integer arguments, ! 84: \fIerrno\fR is set to ERANGE; for very large arguments over/underflows will ! 85: occur inside the \fIlgamma\fP routine. ! 86: .SH SEE ALSO ! 87: math(3M), infnan(3M)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.