diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2018-12-27 17:45:04 +0000 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2018-12-27 17:45:04 +0000 |
commit | 6aa82888e61d3e2232926ee68e764f17eae2e7e1 (patch) | |
tree | 17b2fb350da15d1d097f22dc7e2e7d20db1bd486 /sysdeps/ieee754/dbl-64/x2y2m1.c | |
parent | ffbe9c552a1009167ec7a765c1543c7f3e4169d6 (diff) | |
parent | 963c37d5c0eb62b38f8764b23931c0dcdd497a13 (diff) |
Merge commit 'refs/top-bases/t/sendmsg-SCM_RIGHTS' into t/sendmsg-SCM_RIGHTS
Diffstat (limited to 'sysdeps/ieee754/dbl-64/x2y2m1.c')
-rw-r--r-- | sysdeps/ieee754/dbl-64/x2y2m1.c | 34 |
1 files changed, 2 insertions, 32 deletions
diff --git a/sysdeps/ieee754/dbl-64/x2y2m1.c b/sysdeps/ieee754/dbl-64/x2y2m1.c index 96078888a7..aa0d9703fa 100644 --- a/sysdeps/ieee754/dbl-64/x2y2m1.c +++ b/sysdeps/ieee754/dbl-64/x2y2m1.c @@ -1,5 +1,5 @@ /* Compute x^2 + y^2 - 1, without large cancellation error. - Copyright (C) 2012-2016 Free Software Foundation, Inc. + Copyright (C) 2012-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -18,7 +18,7 @@ #include <math.h> #include <math_private.h> -#include <float.h> +#include <mul_split.h> #include <stdlib.h> /* Calculate X + Y exactly and store the result in *HI + *LO. It is @@ -33,36 +33,6 @@ add_split (double *hi, double *lo, double x, double y) *lo = (x - *hi) + y; } -/* Calculate X * Y exactly and store the result in *HI + *LO. It is - given that the values are small enough that no overflow occurs and - large enough (or zero) that no underflow occurs. */ - -static void -mul_split (double *hi, double *lo, double x, double y) -{ -#ifdef __FP_FAST_FMA - /* Fast built-in fused multiply-add. */ - *hi = x * y; - *lo = __builtin_fma (x, y, -*hi); -#elif defined FP_FAST_FMA - /* Fast library fused multiply-add, compiler before GCC 4.6. */ - *hi = x * y; - *lo = __fma (x, y, -*hi); -#else - /* Apply Dekker's algorithm. */ - *hi = x * y; -# define C ((1 << (DBL_MANT_DIG + 1) / 2) + 1) - double x1 = x * C; - double y1 = y * C; -# undef C - x1 = (x - x1) + x1; - y1 = (y - y1) + y1; - double x2 = x - x1; - double y2 = y - y1; - *lo = (((x1 * y1 - *hi) + x1 * y2) + x2 * y1) + x2 * y2; -#endif -} - /* Compare absolute values of floating-point values pointed to by P and Q for qsort. */ |