freebsd-src/lib/msun/src
Bruce Evans fd2891004d Oops, on amd64 (and probably on all non-i386 systems), the previous
commit broke the 2**24 cases where |x| > DBL_MAX/2.  There are exponent
range problems not just for denormals (underflow) but for large values
(overflow).  Doubles have more than enough exponent range to avoid the
problems, but I forgot to convert enough terms to double, so there was
an x+x term which was sometimes evaluated in float precision.

Unfortunately, this is a pessimization with some combinations of systems
and compilers (it makes no difference on Athlon XP's, but on Athlon64's
it gives a 5% pessimization with gcc-3.4 but not with gcc-3.3).

Exlain the problem better in comments.
2006-01-05 09:18:48 +00:00
..
e_acos.c Reduce diffs against vendor source (Sun fdlibm 5.3). 2005-02-04 18:26:06 +00:00
e_acosf.c
e_acosh.c Reduce diffs against vendor source (Sun fdlibm 5.3). 2005-02-04 18:26:06 +00:00
e_acoshf.c
e_asin.c Reduce diffs against vendor source (Sun fdlibm 5.3). 2005-02-04 18:26:06 +00:00
e_asinf.c Fixed the approximation to pio4. pio4_hi must be pio2_hi/2 since it 2005-12-04 13:52:46 +00:00
e_atan2.c Reduce diffs against vendor source (Sun fdlibm 5.3). 2005-02-04 18:26:06 +00:00
e_atan2f.c Fixed lots of 1 ULP errors caused by a broken approximation for pi/2. 2004-06-02 17:09:05 +00:00
e_atanh.c Reduce diffs against vendor source (Sun fdlibm 5.3). 2005-02-04 18:26:06 +00:00
e_atanhf.c
e_cosh.c Reduce diffs against vendor source (Sun fdlibm 5.3). 2005-02-04 18:26:06 +00:00
e_coshf.c Fixed some magic numbers. 2005-11-13 00:08:23 +00:00
e_exp.c Reduce diffs against vendor source (Sun fdlibm 5.3). 2005-02-04 18:26:06 +00:00
e_expf.c Fixed the hi+lo approximation to log(2). The normal 17+24 bit decomposition 2005-11-30 04:56:49 +00:00
e_fmod.c Reduce diffs against vendor source (Sun fdlibm 5.3). 2005-02-04 18:26:06 +00:00
e_fmodf.c
e_gamma.c Reduce diffs against vendor source (Sun fdlibm 5.3). 2005-02-04 18:26:06 +00:00
e_gamma_r.c Reduce diffs against vendor source (Sun fdlibm 5.3). 2005-02-04 18:26:06 +00:00
e_gammaf.c
e_gammaf_r.c
e_hypot.c Reduce diffs against vendor source (Sun fdlibm 5.3). 2005-02-04 18:26:06 +00:00
e_hypotf.c
e_j0.c Reduce diffs against vendor source (Sun fdlibm 5.3). 2005-02-04 18:26:06 +00:00
e_j0f.c
e_j1.c Reduce diffs against vendor source (Sun fdlibm 5.3). 2005-02-04 18:26:06 +00:00
e_j1f.c
e_jn.c Reduce diffs against vendor source (Sun fdlibm 5.3). 2005-02-04 18:26:06 +00:00
e_jnf.c
e_lgamma.c Reduce diffs against vendor source (Sun fdlibm 5.3). 2005-02-04 18:26:06 +00:00
e_lgamma_r.c Reduce diffs against vendor source (Sun fdlibm 5.3). 2005-02-04 18:26:06 +00:00
e_lgammaf.c
e_lgammaf_r.c Fixed about 50 million errors of infinity ulps and about 3 million errors 2005-11-28 08:32:15 +00:00
e_log.c Reduce diffs against vendor source (Sun fdlibm 5.3). 2005-02-04 18:26:06 +00:00
e_log10.c Reduce diffs against vendor source (Sun fdlibm 5.3). 2005-02-04 18:26:06 +00:00
e_log10f.c
e_logf.c As for the float trig functions, use a minimax polynomial that is 2005-11-12 18:20:09 +00:00
e_pow.c Reduce diffs against vendor source (Sun fdlibm 5.3). 2005-02-04 18:26:06 +00:00
e_powf.c Merged from double precision case (e_pow.c 1.10: sign fixes). 2004-06-01 19:33:30 +00:00
e_rem_pio2.c Reduce diffs against vendor source (Sun fdlibm 5.3). 2005-02-04 18:26:06 +00:00
e_rem_pio2f.c Simplified setiing up args for __kernel_rem_pio2(). We already have x 2005-11-23 03:03:09 +00:00
e_remainder.c Reduce diffs against vendor source (Sun fdlibm 5.3). 2005-02-04 18:26:06 +00:00
e_remainderf.c
e_scalb.c Reduce diffs against vendor source (Sun fdlibm 5.3). 2005-02-04 18:26:06 +00:00
e_scalbf.c "Create" ldexpf for non-i386 architectures. 2005-12-06 20:12:38 +00:00
e_sinh.c Reduce diffs against vendor source (Sun fdlibm 5.3). 2005-02-04 18:26:06 +00:00
e_sinhf.c Fixed some magic numbers. 2005-11-13 00:41:46 +00:00
e_sqrt.c Reduce diffs against vendor source (Sun fdlibm 5.3). 2005-02-04 18:26:06 +00:00
e_sqrtf.c
k_cos.c Use a better algorithm for reducing the error in __kernel_cos[f](). 2005-10-26 12:36:18 +00:00
k_cosf.c Rearranged the polynomial evaluation to reduce dependencies, as in 2005-11-30 11:51:17 +00:00
k_rem_pio2.c Reduce diffs against vendor source (Sun fdlibm 5.3). 2005-02-04 18:26:06 +00:00
k_rem_pio2f.c Fixed range reduction for large multiples of pi/2 on systems with 2005-10-11 07:56:05 +00:00
k_sin.c Updated the comment about the optimization for tiny x (the previous 2005-11-02 13:06:49 +00:00
k_sinf.c Rearranged the polynomial evaluation to reduce dependencies, as in 2005-11-30 11:51:17 +00:00
k_tan.c Moved the optimization for tiny x from __kernel_tan[f](x) to tan[f](x) 2005-11-02 14:01:45 +00:00
k_tanf.c Rearranged the polynomial evaluation some more to reduce dependencies. 2005-11-28 11:46:20 +00:00
math.h Implement truncl() based on floorl(). 2005-04-16 21:12:47 +00:00
math_private.h Use only double precision for "kernel" cosf and sinf (except for 2005-11-28 04:58:57 +00:00
s_asinh.c
s_asinhf.c
s_atan.c Only provide one copy of the math functions. If we provide a MD function, 2003-07-23 04:53:47 +00:00
s_atanf.c
s_cbrt.c Extract the high and low words together. With gcc-3.4 on uniformly 2005-12-20 01:21:30 +00:00
s_cbrtf.c Oops, on amd64 (and probably on all non-i386 systems), the previous 2006-01-05 09:18:48 +00:00
s_ceil.c Only provide one copy of the math functions. If we provide a MD function, 2003-07-23 04:53:47 +00:00
s_ceilf.c
s_ceill.c Revert the last change, the conversion from long double to double can raise 2005-04-28 19:45:55 +00:00
s_cimag.c Add implementations for cimag{,f,l}, creal{,f,l} and conj{,f,l}. They are 2004-05-30 09:21:56 +00:00
s_cimagf.c Add implementations for cimag{,f,l}, creal{,f,l} and conj{,f,l}. They are 2004-05-30 09:21:56 +00:00
s_cimagl.c Add implementations for cimag{,f,l}, creal{,f,l} and conj{,f,l}. They are 2004-05-30 09:21:56 +00:00
s_conj.c Add implementations for cimag{,f,l}, creal{,f,l} and conj{,f,l}. They are 2004-05-30 09:21:56 +00:00
s_conjf.c Add implementations for cimag{,f,l}, creal{,f,l} and conj{,f,l}. They are 2004-05-30 09:21:56 +00:00
s_conjl.c Add implementations for cimag{,f,l}, creal{,f,l} and conj{,f,l}. They are 2004-05-30 09:21:56 +00:00
s_copysign.c Only provide one copy of the math functions. If we provide a MD function, 2003-07-23 04:53:47 +00:00
s_copysignf.c Only provide one copy of the math functions. If we provide a MD function, 2003-07-23 04:53:47 +00:00
s_copysignl.c Add an implementation of copysignl(), a long double version of copysign(). 2004-05-07 18:56:31 +00:00
s_cos.c Moved the optimization for tiny x from __kernel_{cos,sin}[f](x) to 2005-10-24 14:08:36 +00:00
s_cosf.c Fixed cosf(x) when x is a "negative" NaNs. I broke this in rev.1.10. 2005-11-30 06:47:18 +00:00
s_creal.c Add implementations for cimag{,f,l}, creal{,f,l} and conj{,f,l}. They are 2004-05-30 09:21:56 +00:00
s_crealf.c Add implementations for cimag{,f,l}, creal{,f,l} and conj{,f,l}. They are 2004-05-30 09:21:56 +00:00
s_creall.c Add implementations for cimag{,f,l}, creal{,f,l} and conj{,f,l}. They are 2004-05-30 09:21:56 +00:00
s_erf.c
s_erff.c
s_exp2.c Implement exp2() and exp2f(). 2005-04-05 02:57:15 +00:00
s_exp2f.c Implement exp2() and exp2f(). 2005-04-05 02:57:15 +00:00
s_expm1.c
s_expm1f.c
s_fabs.c
s_fabsf.c
s_fabsl.c Better safe than clever. 2003-10-25 19:53:28 +00:00
s_fdim.c Implement and document fdim{,f,l}, fmax{,f,l}, and fmin{,f,l}. 2004-06-30 07:04:01 +00:00
s_finite.c Only provide one copy of the math functions. If we provide a MD function, 2003-07-23 04:53:47 +00:00
s_finitef.c
s_floor.c Only provide one copy of the math functions. If we provide a MD function, 2003-07-23 04:53:47 +00:00
s_floorf.c
s_floorl.c Revert the last change, the conversion from long double to double can raise 2005-04-28 19:45:55 +00:00
s_fma.c Fix the double rounding problem with subnormals, and 2005-03-18 02:27:59 +00:00
s_fmaf.c Add fma() and fmaf(), which implement a fused multiply-add operation. 2005-01-22 09:53:18 +00:00
s_fmal.c Fix the double rounding problem with subnormals, and 2005-03-18 02:27:59 +00:00
s_fmax.c Implement and document fdim{,f,l}, fmax{,f,l}, and fmin{,f,l}. 2004-06-30 07:04:01 +00:00
s_fmaxf.c Implement and document fdim{,f,l}, fmax{,f,l}, and fmin{,f,l}. 2004-06-30 07:04:01 +00:00
s_fmaxl.c Implement and document fdim{,f,l}, fmax{,f,l}, and fmin{,f,l}. 2004-06-30 07:04:01 +00:00
s_fmin.c Implement and document fdim{,f,l}, fmax{,f,l}, and fmin{,f,l}. 2004-06-30 07:04:01 +00:00
s_fminf.c Implement and document fdim{,f,l}, fmax{,f,l}, and fmin{,f,l}. 2004-06-30 07:04:01 +00:00
s_fminl.c Implement and document fdim{,f,l}, fmax{,f,l}, and fmin{,f,l}. 2004-06-30 07:04:01 +00:00
s_frexp.c Replace strong references with weak references. There's no 2005-03-07 21:27:37 +00:00
s_frexpf.c
s_frexpl.c Implement frexpl. 2005-03-07 04:54:51 +00:00
s_ilogb.c Use the FP_ILOG macros from <math.h> rather than hardcoded return values. 2004-10-09 17:14:28 +00:00
s_ilogbf.c Use the FP_ILOG macros from <math.h> rather than hardcoded return values. 2004-10-09 17:14:28 +00:00
s_ilogbl.c Add and document ilogbl(), a long double version of ilogb(). 2004-10-11 18:13:52 +00:00
s_isfinite.c Implement the classification macros isfinite(), isinf(), isnan(), and 2004-07-09 03:32:40 +00:00
s_isnan.c Replace s_isnan.c and s_isnanf.c with the more compact s_isnan.c from 2004-08-05 01:46:11 +00:00
s_isnormal.c Implement the classification macros isfinite(), isinf(), isnan(), and 2004-07-09 03:32:40 +00:00
s_llrint.c Add MI implementations of [l]lrint[f]() and [l]lround[f](). 2005-01-11 23:12:55 +00:00
s_llrintf.c Add MI implementations of [l]lrint[f]() and [l]lround[f](). 2005-01-11 23:12:55 +00:00
s_llround.c These files should include s_lround.c instead of s_lrint.c. 2005-04-08 00:52:27 +00:00
s_llroundf.c These files should include s_lround.c instead of s_lrint.c. 2005-04-08 00:52:27 +00:00
s_llroundl.c Add roundl(), lroundl(), and llroundl(). 2005-04-08 01:24:08 +00:00
s_log1p.c For log1pf(), fixed the approximations to sqrt(2), sqrt(2)-1 and 2005-12-04 12:30:44 +00:00
s_log1pf.c For log1pf(), fixed the approximations to sqrt(2), sqrt(2)-1 and 2005-12-04 12:30:44 +00:00
s_logb.c Fixed fdlibm[+cygnus] logbf() and logb() on denormals. Adjustment 2005-12-03 11:57:19 +00:00
s_logbf.c Fixed fdlibm[+cygnus] logbf() and logb() on denormals. Adjustment 2005-12-03 11:57:19 +00:00
s_lrint.c Add MI implementations of [l]lrint[f]() and [l]lround[f](). 2005-01-11 23:12:55 +00:00
s_lrintf.c Add MI implementations of [l]lrint[f]() and [l]lround[f](). 2005-01-11 23:12:55 +00:00
s_lround.c Fix a (coincidentally harmless) bug. 2005-04-08 00:52:16 +00:00
s_lroundf.c These files should include s_lround.c instead of s_lrint.c. 2005-04-08 00:52:27 +00:00
s_lroundl.c Add roundl(), lroundl(), and llroundl(). 2005-04-08 01:24:08 +00:00
s_modf.c
s_modff.c
s_nearbyint.c Add C99's nearbyint{,f}() functions as wrappers around rint(). 2004-07-06 04:46:08 +00:00
s_nextafter.c Replace strong references with weak references. There's no 2005-03-07 21:27:37 +00:00
s_nextafterf.c - Try harder to trick gcc into not optimizing away statements 2005-03-07 04:55:58 +00:00
s_nextafterl.c Implement nexttoward and nextafterl; the latter is also known as 2005-03-07 04:56:46 +00:00
s_nexttoward.c Implement nexttoward and nextafterl; the latter is also known as 2005-03-07 04:56:46 +00:00
s_nexttowardf.c Implement nexttowardf. This is used on both platforms with 11-bit 2005-03-07 04:57:38 +00:00
s_remquo.c Implement and document remquo() and remquof(). 2005-03-25 04:40:44 +00:00
s_remquof.c Implement and document remquo() and remquof(). 2005-03-25 04:40:44 +00:00
s_rint.c Simplified the fix in rev.1.3. Instead of using long double for 2005-12-03 07:38:35 +00:00
s_rintf.c Restored removal of the special handling needed for a result of +-0. 2005-12-03 09:00:29 +00:00
s_round.c Fixed roundf(). The following cases never worked in FreeBSD: 2005-12-02 13:45:06 +00:00
s_roundf.c Fixed roundf(). The following cases never worked in FreeBSD: 2005-12-02 13:45:06 +00:00
s_roundl.c Fixed roundf(). The following cases never worked in FreeBSD: 2005-12-02 13:45:06 +00:00
s_scalbln.c - Implement scalblnl. 2005-03-07 04:57:50 +00:00
s_scalbn.c Replace strong references with weak references. There's no 2005-03-07 21:27:37 +00:00
s_scalbnf.c Alias scalbnf as ldexpf. The two are identical in binary 2005-03-07 04:52:43 +00:00
s_scalbnl.c Add scalbnl, also known as as ldexpl. 2005-03-07 04:52:58 +00:00
s_signbit.c Fix two bugs in the signbit() macro, which was implemented last year: 2004-07-19 08:16:10 +00:00
s_signgam.c
s_significand.c Only provide one copy of the math functions. If we provide a MD function, 2003-07-23 04:53:47 +00:00
s_significandf.c
s_sin.c Moved the optimization for tiny x from __kernel_{cos,sin}[f](x) to 2005-10-24 14:08:36 +00:00
s_sinf.c Exploit skew-symmetry to avoid an operation: -sin(x-A) = sin(A-x). This 2005-11-28 06:15:10 +00:00
s_tan.c Moved the optimization for tiny x from __kernel_tan[f](x) to tan[f](x) 2005-11-02 14:01:45 +00:00
s_tanf.c Changed spelling of the request-to-inline macro name to match the change 2005-11-28 05:35:32 +00:00
s_tanh.c
s_tanhf.c Fixed some magic numbers. 2005-12-11 11:40:55 +00:00
s_trunc.c Implement trunc() and truncf(). 2004-06-20 09:25:43 +00:00
s_truncf.c Implement trunc() and truncf(). 2004-06-20 09:25:43 +00:00
s_truncl.c Revert the last change, the conversion from long double to double can raise 2005-04-28 19:45:55 +00:00
w_cabs.c
w_cabsf.c
w_drem.c
w_dremf.c Work around known GCC 3.4.x problem and use ANSI prototype for dremf(). 2004-07-28 05:53:18 +00:00