Skip to content

Commit 059c22d

Browse files
committed
Deleted gamma definition. Implement Lanczos or something.
1 parent 0f70511 commit 059c22d

File tree

1 file changed

+4
-30
lines changed

1 file changed

+4
-30
lines changed

extramath/src/gamma.c

Lines changed: 4 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -12,40 +12,14 @@
1212

1313
#ifdef __IS_COMPLEX__
1414

15-
// This is accelerated by Kummer's transformation up to the 1/k^8 term.
1615
EXTRAMATH_FUNDEF(lgamma, (__TYPENAME__ __z)) {
17-
// TODO: This series is terrible. Find a faster way to compute this.
18-
// Can't handle negative integers or zero.
19-
if(__FNAMESRC__(imag)(__z) == 0 && __FNAMESRC__(real)(__z) <= 0 &&
20-
__FNAMESRC_SCAL__(fmod)(__FNAMESRC__(real)(__z), 1) == 0) {
21-
return NAN;
22-
} else {
23-
__TYPENAME__ sum1 = 0, sum2 = 1;
24-
__TYPENAME__ zet2 = 1.6449340668482264365 / 2 * __z * __z,
25-
zet3 = 1.2020569031595942854 / 3 * __z * __z * __z,
26-
zet4 = 1.0823232337111381915 / 4 * __z * __z * __z * __z,
27-
zet5 = 1.0369277551433699263 / 5 * __z * __z * __z * __z * __z,
28-
zet6 = 1.0173430619844491397 / 6 * __z * __z * __z * __z * __z * __z,
29-
zet7 = 1.0083492773819228268 / 7 * __z * __z * __z * __z * __z * __z * __z,
30-
zet8 = 1.0040773561979443394 / 8 * __z * __z * __z * __z * __z * __z * __z * __z;
31-
for(int i = 1; !__FNAMESRC__(absconv)(sum1, __FNAMESRC_PREF__(abs)(sum1 - sum2)); i++) {
32-
sum2 = sum1;
33-
sum1 += -__FNAMESRC__(log)(1 + __z / i) + __z / i
34-
- __z * __z / (2 * i * i)
35-
+ __z * __z * __z / (3 * i * i * i)
36-
- __z * __z * __z * __z / (4 * i * i * i * i)
37-
+ __z * __z * __z * __z * __z / (5 * i * i * i * i * i)
38-
- __z * __z * __z * __z * __z * __z / (6 * i * i * i * i * i * i)
39-
+ __z * __z * __z * __z * __z * __z * __z / (7 * i * i * i * i * i * i * i)
40-
- __z * __z * __z * __z * __z * __z * __z * __z / (8 * i * i * i * i * i * i * i * i);
41-
}
42-
return sum1 - MASCHERONI * __z - __FNAMESRC__(log)(__z) + zet2 - zet3 + zet4 - zet5 + zet6 - zet7 + zet8;
43-
}
44-
}
4516

17+
}
4618

19+
// Use Lanczos approximation.
4720
EXTRAMATH_FUNDEF(tgamma, (__TYPENAME__ __z)) {
48-
return __FNAMESRC__(exp)(__FNAMESRC__(lgamma)(__z));
21+
22+
4923
}
5024

5125
#endif

0 commit comments

Comments
 (0)