26 SAVE gcs, pi, sq2pil, ngcs, xmin, xmax, dxrel, first
27 DATA gcs( 1) / .0085711955 90989331e0/
28 DATA gcs( 2) / .0044153813 24841007e0/
29 DATA gcs( 3) / .0568504368 1599363e0/
30 DATA gcs( 4) /-.0042198353 96418561e0/
31 DATA gcs( 5) / .0013268081 81212460e0/
32 DATA gcs( 6) /-.0001893024 529798880e0/
33 DATA gcs( 7) / .0000360692 532744124e0/
34 DATA gcs( 8) /-.0000060567 619044608e0/
35 DATA gcs( 9) / .0000010558 295463022e0/
36 DATA gcs(10) /-.0000001811 967365542e0/
37 DATA gcs(11) / .0000000311 772496471e0/
38 DATA gcs(12) /-.0000000053 542196390e0/
39 DATA gcs(13) / .0000000009 193275519e0/
40 DATA gcs(14) /-.0000000001 577941280e0/
41 DATA gcs(15) / .0000000000 270798062e0/
42 DATA gcs(16) /-.0000000000 046468186e0/
43 DATA gcs(17) / .0000000000 007973350e0/
44 DATA gcs(18) /-.0000000000 001368078e0/
45 DATA gcs(19) / .0000000000 000234731e0/
46 DATA gcs(20) /-.0000000000 000040274e0/
47 DATA gcs(21) / .0000000000 000006910e0/
48 DATA gcs(22) /-.0000000000 000001185e0/
49 DATA gcs(23) / .0000000000 000000203e0/
50 DATA pi /3.14159 26535 89793 24e0/
52 DATA sq2pil /0.91893 85332 04672 74e0/
65 ngcs =
inits(gcs, 23, 0.1*r1mach(3))
68 dxrel =
sqrt(r1mach(4))
77 IF (y.GT.10.0) go to 50
83 IF (x.LT.0.) n = n - 1
86 gamma = 0.9375 +
csevl(2.*y-1., gcs, ngcs)
94 IF (x .EQ. 0.) CALL
xermsg(
'SLATEC',
'GAMMA',
'X IS 0', 4, 2)
95 IF (x .LT. 0. .AND. x+n-2 .EQ. 0.) CALL
xermsg(
'SLATEC',
'GAMMA'
96 1,
'X IS A NEGATIVE INTEGER', 4, 2)
97 IF (x .LT. (-0.5) .AND.
abs((x-aint(x-0.5))/x) .LT. dxrel) CALL
98 1
xermsg(
'SLATEC',
'GAMMA',
99 2
'ANSWER LT HALF PRECISION BECAUSE X TOO NEAR NEGATIVE INTEGER'
103 gamma = gamma / (x+i-1)
116 50
IF (x .GT. xmax) CALL
xermsg(
'SLATEC',
'GAMMA',
117 +
'X SO BIG GAMMA OVERFLOWS', 3, 2)
120 IF (x .LT. xmin) CALL
xermsg(
'SLATEC',
'GAMMA',
121 +
'X SO SMALL GAMMA UNDERFLOWS', 2, 1)
122 IF (x.LT.xmin)
RETURN
127 IF (
abs((x-aint(x-0.5))/x) .LT. dxrel) CALL
xermsg(
'SLATEC',
129 +
'ANSWER LT HALF PRECISION, X TOO NEAR NEGATIVE INTEGER', 1, 1)
132 IF (sinpiy .EQ. 0.) CALL
xermsg(
'SLATEC',
'GAMMA',
133 +
'X IS A NEGATIVE INTEGER', 4, 2)
135 gamma = -pi / (y*sinpiy*gamma)
function inits(OS, NOS, ETA)
std::string dimension(void) const
octave_value log(void) const
octave_value sin(void) const
subroutine xermsg(LIBRAR, SUBROU, MESSG, NERR, LEVEL)
subroutine gamlim(XMIN, XMAX)
octave_value sqrt(void) const