[gnumeric] BETA: fix win32 fallback for lgamma_r.
- From: Morten Welinder <mortenw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnumeric] BETA: fix win32 fallback for lgamma_r.
- Date: Thu, 14 Nov 2013 00:27:40 +0000 (UTC)
commit 82b3368c1460c7bdf5f3138daa85126b3ff437b2
Author: Morten Welinder <terra gnome org>
Date: Wed Nov 13 19:27:06 2013 -0500
BETA: fix win32 fallback for lgamma_r.
ChangeLog | 4 ++++
NEWS | 1 +
src/mathfunc.c | 26 ++++++++++++++++++++++++--
3 files changed, 29 insertions(+), 2 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 9738c43..f6cd360 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2013-11-13 Morten Welinder <terra gnome org>
+
+ * src/mathfunc.c (lgamma_r): Fix fallback. Didn't work for x<10.
+
2013-11-13 Jean Brefort <jean brefort normalesup org>
* src/sheet-object.c (sheet_object_view_button2_pressed),
diff --git a/NEWS b/NEWS
index d9cf94c..ae6f5bc 100644
--- a/NEWS
+++ b/NEWS
@@ -15,6 +15,7 @@ Morten:
* Improve accuracy of ACOTH.
* Fix fuzzed file crash. [#708091]
* Restore sheet reordering by drag.
+ * Fix BETA on win32.
Xabier RodrÃguez Calvar:
* Fix dialog button order. [#710378]
diff --git a/src/mathfunc.c b/src/mathfunc.c
index 10e58ff..3c11b5a 100644
--- a/src/mathfunc.c
+++ b/src/mathfunc.c
@@ -8681,9 +8681,31 @@ lgamma (double x)
double
lgamma_r (double x, int *signp)
{
- *signp = (x >= 0 || fmod (floor (-x), 2.0) != 0.0) ? +1 : -1;
+ *signp = +1;
- return M_LN_SQRT_2PI + (x - 0.5) * log(x) - x + lgammacor(x);
+ if (gnm_isnan (x))
+ return gnm_nan;
+
+ if (x > 0) {
+ gnm_float f = 1;
+
+ while (x < 10) {
+ f *= x;
+ x++;
+ }
+
+ return (M_LN_SQRT_2PI + (x - 0.5) * gnm_log(x) -
+ x + lgammacor(x)) - gnm_log (f);
+ } else {
+ gnm_float axm2 = gnm_fmod (-x, 2.0);
+ gnm_float y = gnm_sin (M_PIgnum * axm2) / M_PIgnum;
+
+ *signp = axm2 > 1.0 ? +1 : -1;
+
+ return y == 0
+ ? gnm_nan
+ : - gnm_log (gnm_abs (y)) - lgamma1p (-x);
+ }
}
#endif
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]