diff options
author | Joseph Myers <joseph@codesourcery.com> | 2013-05-08 11:58:18 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2013-05-08 11:58:18 +0000 |
commit | d8cd06db62d92f86cc8cc3c0d6a489bd207bb834 (patch) | |
tree | 3906235135ce8e0b4ea11d5dadc076699be07738 /sysdeps/generic | |
parent | bb7cf681e90d5aa2d867aeff4948ac605447de7d (diff) | |
download | glibc-d8cd06db62d92f86cc8cc3c0d6a489bd207bb834.tar glibc-d8cd06db62d92f86cc8cc3c0d6a489bd207bb834.tar.gz glibc-d8cd06db62d92f86cc8cc3c0d6a489bd207bb834.tar.bz2 glibc-d8cd06db62d92f86cc8cc3c0d6a489bd207bb834.zip |
Improve tgamma accuracy (bugs 2546, 2560, 5159, 15426).
Diffstat (limited to 'sysdeps/generic')
-rw-r--r-- | sysdeps/generic/math_private.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/sysdeps/generic/math_private.h b/sysdeps/generic/math_private.h index 7661788e6d..9d6ecade68 100644 --- a/sysdeps/generic/math_private.h +++ b/sysdeps/generic/math_private.h @@ -371,6 +371,18 @@ extern float __x2y2m1f (float x, float y); extern double __x2y2m1 (double x, double y); extern long double __x2y2m1l (long double x, long double y); +/* Compute the product of X + X_EPS, X + X_EPS + 1, ..., X + X_EPS + N + - 1, in the form R * (1 + *EPS) where the return value R is an + approximation to the product and *EPS is set to indicate the + approximate error in the return value. X is such that all the + values X + 1, ..., X + N - 1 are exactly representable, and X_EPS / + X is small enough that factors quadratic in it can be + neglected. */ +extern float __gamma_productf (float x, float x_eps, int n, float *eps); +extern double __gamma_product (double x, double x_eps, int n, double *eps); +extern long double __gamma_productl (long double x, long double x_eps, + int n, long double *eps); + #ifndef math_opt_barrier # define math_opt_barrier(x) \ ({ __typeof (x) __x = (x); __asm ("" : "+m" (__x)); __x; }) |