# 2.11BSD#431 - /usr/src/new/PORT/apl/src/gamma.c

##### Functions

    gamma             X

##### Variables

    errno             X
    signgam           X

##### Macros

    M                 X
    N                 X

       1: static char Sccsid[] = "gamma.c @(#)gamma.c	1.1	10/1/82 Berkeley ";
       2: /*
       3: 	C program for floating point log gamma function
       4:
       5: 	gamma(x) computes the log of the absolute
       6: 	value of the gamma function.
       7: 	The sign of the gamma function is returned in the
       8: 	external quantity signgam.
       9:
      10: 	The coefficients for expansion around zero
      11: 	are #5243 from Hart & Cheney; for expansion
      12: 	around infinity they are #5404.
      13:
      14: 	Calls log and sin.
      15: */
      16:
      17: #include <errno.h>
      18: #include <math.h>
      19:
      20: int errno;
      21: int signgam = 0;
      22: static double goobie    = 0.9189385332046727417803297;
      23: static double pi    = 3.1415926535897932384626434;
      24:
      25: #define M 6
      26: #define N 8
      27: static double p1[] = {
      28:     0.83333333333333101837e-1,
      29:     -.277777777735865004e-2,
      30:     0.793650576493454e-3,
      31:     -.5951896861197e-3,
      32:     0.83645878922e-3,
      33:     -.1633436431e-2,
      34: };
      35: static double p2[] = {
      36:     -.42353689509744089647e5,
      37:     -.20886861789269887364e5,
      38:     -.87627102978521489560e4,
      39:     -.20085274013072791214e4,
      40:     -.43933044406002567613e3,
      41:     -.50108693752970953015e2,
      42:     -.67449507245925289918e1,
      43:     0.0,
      44: };
      45: static double q2[] = {
      46:     -.42353689509744090010e5,
      47:     -.29803853309256649932e4,
      48:     0.99403074150827709015e4,
      49:     -.15286072737795220248e4,
      50:     -.49902852662143904834e3,
      51:     0.18949823415702801641e3,
      52:     -.23081551524580124562e2,
      53:     0.10000000000000000000e1,
      54: };
      55:
      56: double
      57: gamma(arg)
      58: double arg;
      59: {
      60:     double log(), pos(), neg(), asym();
      61:
      62:     signgam = 1.;
      63:     if(arg <= 0.) return(neg(arg));
      64:     if(arg > 8.) return(asym(arg));
      65:     return(log(pos(arg)));
      66: }
      67:
      68: static double
      69: asym(arg)
      70: double arg;
      71: {
      72:     double log();
      73:     double n, argsq;
      74:     int i;
      75:
      76:     argsq = 1./(arg*arg);
      77:     for(n=0,i=M-1; i>=0; i--){
      78:         n = n*argsq + p1[i];
      79:     }
      80:     return((arg-.5)*log(arg) - arg + goobie + n/arg);
      81: }
      82:
      83: static double
      84: neg(arg)
      85: double arg;
      86: {
      87:     double temp;
      88:     double log(), sin(), pos();
      89:
      90:     arg = -arg;
      91:     temp = sin(pi*arg);
      92:     if(temp == 0.) {
      93:         errno = EDOM;
      94:         return(HUGE);
      95:     }
      96:     if(temp < 0.) temp = -temp;
      97:     else signgam = -1;
      98:     return(-log(arg*pos(arg)*temp/pi));
      99: }
     100:
     101: static double
     102: pos(arg)
     103: double arg;
     104: {
     105:     double n, d, s;
     106:     register i;
     107:
     108:     if(arg < 2.) return(pos(arg+1.)/arg);
     109:     if(arg > 3.) return((arg-1.)*pos(arg-1.));
     110:
     111:     s = arg - 2.;
     112:     for(n=0,d=0,i=N-1; i>=0; i--){
     113:         n = n*s + p2[i];
     114:         d = d*s + q2[i];
     115:     }
     116:     return(n/d);
     117: }

#### Defined functions

asym defined in line 68; used 2 times

- in line 60-64(2)

gamma defined in line 56; used 5 times

- in /usr/src/new/PORT/apl/src/ao.c line 274(3), 490
- in /usr/src/new/PORT/apl/src/apl.h line 454

neg defined in line 83; used 2 times

- in line 60-63(2)

pos defined in line 101; used 6 times

- in line 60-65(2), 88, 98, 108-109(2)

#### Defined variables

Sccsid defined in line 1; never used
errno defined in line 20; used 1 times

- in line 93

goobie defined in line 22; used 1 times

- in line 80

p1 defined in line 27; used 1 times

- in line 78

p2 defined in line 35; used 1 times

- in line 113

pi defined in line 23; used 2 times

- in line 91, 98

q2 defined in line 45; used 1 times

- in line 114

signgam defined in line 21; used 2 times

- in line 62, 97

#### Defined macros

M defined in line 25; used 1 times

- in line 77

N defined in line 26; used 1 times

- in line 112

Last modified: 1983-06-22 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 1326 |