Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ lgamma(3M) — mips UMIPS RISC/os 5.01

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

math(3M)



LGAMMA(3M)          RISC/os Reference Manual           LGAMMA(3M)



NAME
     lgamma - log gamma function

SYNOPSIS
     #include <math.h>

     double lgamma(x)
     double x;

DESCRIPTION
     lgamma returns ln|Γ(x)|.

     The external integer signgam returns the sign of Γ(x) .

IDIOSYNCRASIES
     Do not use the expression signgam*exp(lgamma(x)) to compute
     g := Γ(x).  Instead use a program like this (in C):

          lg = lgamma(x); g = signgam*exp(lg);


     Only after lgamma has returned can signgam be correct.  Note
     too that Γ(x) must overflow when x is large enough, under-
     flow when -x is large enough, and spawn a division by zero
     when x is a nonpositive integer.

     The following C program fragment might be used to calculate
     Γ if the overflow needs to be detected:

          if ((y = lgamma(x)) > LN_MAXDOUBLE)
               error();
          y = signgam * exp(y);

     where LN_MAXDOUBLE is the least value that causes exp(3M) to
     overflow, and is defined in the <values.h> header file.

     Only in the UNIX math library for C was the name gamma ever
     attached to lnΓ. Elsewhere, for instance in IBM's FORTRAN
     library, the name GAMMA belongs to Γ and the name ALGAMA to
     lnΓ in single precision; in double the names are DGAMMA and
     DLGAMA. Why should C be different?

     Archaeological records suggest that C's gamma originally
     delivered ln(Γ(|x|)).  Later, the program gamma was changed
     to cope with negative arguments x in a more conventional
     way, but the documentation did not reflect that change
     correctly.  The most recent change corrects inaccurate
     values when x is almost a negative integer, and lets Γ(x) be
     computed without conditional expressions.  Programmers
     should not assume that lgamma has settled down.





                        Printed 11/19/92                   Page 1





LGAMMA(3M)          RISC/os Reference Manual           LGAMMA(3M)



     At some time in the future, the name gamma will be rehabili-
     tated and used for the gamma function, just as is done in
     FORTRAN. The reason for this is not so much compatibility
     with FORTRAN as a desire to achieve greater speed for
     smaller values of |x| and greater accuracy for larger
     values.

     Meanwhile, programmers who have to use the name gamma in its
     former sense, for what is now lgamma, have two choices:

     1) Change your source to use lgamma instead of gamma.

     2) Add the following program to your others:

          #include <math.h>
          double gamma(x)
          double x;
          {
               return (lgamma(x));
               }

DIAGNOSTICS
     Γ returns +Infinity for negative integer arguments.

SEE ALSO
     math(3M)





























 Page 2                 Printed 11/19/92



Typewritten Software • bear@typewritten.org • Edmonds, WA 98026