diff options
author | Ulrich Drepper <drepper@redhat.com> | 1999-10-24 22:04:52 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1999-10-24 22:04:52 +0000 |
commit | 15daa63995211cbe576b28f88ad70f57abe69a37 (patch) | |
tree | 72d2fe95e84d28e7d583894391d45e3b89e2c5f9 /sysdeps/i386/fpu/bits/mathinline.h | |
parent | eb3bf57345cb1451a5d2578dc3f7fbe5aff3b8b5 (diff) | |
download | glibc-15daa63995211cbe576b28f88ad70f57abe69a37.tar glibc-15daa63995211cbe576b28f88ad70f57abe69a37.tar.gz glibc-15daa63995211cbe576b28f88ad70f57abe69a37.tar.bz2 glibc-15daa63995211cbe576b28f88ad70f57abe69a37.zip |
Update.
1999-10-24 Ulrich Drepper <drepper@cygnus.com>
* math/libm-test.inc: Disable some boundary case tests for inline
function testing.
* math/math.h: Pretty printing.
* sysdeps/i386/fpu/e_atanh.S: Correct handling of NaN.
* sysdeps/i386/fpu/e_atanhf.S: Likewise.
* sysdeps/i386/fpu/e_atanhl.S: Likewise.
* sysdeps/i386/fpu/e_log10.S: Likewise.
* sysdeps/i386/fpu/e_log10f.S: Likewise.
* sysdeps/i386/fpu/e_log10l.S: Likewise.
* sysdeps/i386/fpu/s_log1p.S: Likewise.
* sysdeps/i386/fpu/s_log1pf.S: Likewise.
* sysdeps/i386/fpu/s_log1pl.S: Likewise.
* sysdeps/i386/fpu/s_log2.S: Likewise.
* sysdeps/i386/fpu/s_log2f.S: Likewise.
* sysdeps/i386/fpu/s_log2l.S: Likewise.
* sysdeps/i386/fpu/libm-test-ulps: New file.
* sysdeps/i386/fpu/bits/mathinline.h (__expm1_code): Correct return
value for x == 0.
(pow): Correct case x == 0.
(__sgn1l): Correct handling of -0.0.
1999-10-22 Andreas Jaeger <aj@suse.de>
* math/libm-test.inc (asinh_test): Add test for NaN as input parameter.
(atan_test): Likewise.
(atanh_test): Likewise.
(atan2_test): Likewise.
(carg_test): Likewise.
(ceil_test): Likewise.
(cos_test): Likewise.
(cosh_test): Likewise.
(cpow_test): Likewise.
(erf_test): Likewise.
(erfc_test): Likewise.
(exp_test): Likewise.
(exp10_test): Likewise.
(exp2_test): Likewise.
(expm1_test): Likewise.
(fabs_test): Likewise.
(floor_test): Likewise.
(fmod_test): Likewise.
(gamma_test): Likewise.
(lgamma_test): Likewise.
(log10_test): Likewise.
(log1p_test): Likewise.
(log2_test): Likewise.
(logb_test): Likewise.
(nearbyint_test): Likewise.
(remainder_test): Likewise.
(remquo_test): Likewise.
(sin_test): Likewise.
(sincos_test): Likewise.
(sinh_test): Likewise.
(sqrt_test): Likewise.
(tan_test): Likewise.
(tanh_test): Likewise.
(tgamma_test): Likewise.
Diffstat (limited to 'sysdeps/i386/fpu/bits/mathinline.h')
-rw-r--r-- | sysdeps/i386/fpu/bits/mathinline.h | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/sysdeps/i386/fpu/bits/mathinline.h b/sysdeps/i386/fpu/bits/mathinline.h index bf077ba527..8545f6536c 100644 --- a/sysdeps/i386/fpu/bits/mathinline.h +++ b/sysdeps/i386/fpu/bits/mathinline.h @@ -324,7 +324,7 @@ __sincosl (long double __x, long double *__sinx, long double *__cosx) ("fscale # 2^int(x * log2(e))\n\t" \ : "=t" (__temp) : "0" (1.0), "u" (__exponent)); \ __temp -= 1.0; \ - return __temp + __value + return __temp + __value ?: __x __inline_mathcode_ (long double, __expm1l, __x, __expm1_code) @@ -383,8 +383,14 @@ __inline_mathcode2 (pow, __x, __y, \ register long double __value; \ register long double __exponent; \ __extension__ long long int __p = (long long int) __y; \ - if (__x == 0.0 && __y > 0.0) \ - return 0.0; \ + if (__x == 0.0) \ + { \ + if (__y > 0.0) \ + return __y == (double) __p && (__p & 1) != 0 ? __x : 0.0; \ + else if (__y < 0.0) \ + return (__y == (double) __p && (-__p & 1) != 0 \ + ? 1.0 / __x : 1.0 / fabs (__x)); \ + } \ if (__y == (double) __p) \ { \ long double __r = 1.0; \ @@ -448,7 +454,12 @@ __inline_mathop_decl (log10, "fldlg2; fxch; fyl2x", "0" (__x) : "st(1)") __inline_mathcode (asin, __x, return __atan2l (__x, __sqrtl (1.0 - __x * __x))) __inline_mathcode (acos, __x, return __atan2l (__sqrtl (1.0 - __x * __x), __x)) -__inline_mathcode_ (long double, __sgn1l, __x, return __x >= 0.0 ? 1.0 : -1.0) +__inline_mathcode_ (long double, __sgn1l, __x, \ + union { long double __xld; unsigned int __xi[3]; } __n = { .__xld = __x }; \ + __n.__xi[2] = (__n.__xi[2] & 0x8000) | 0x3fff; \ + __n.__xi[1] = 0x80000000; \ + __n.__xi[0] = 0; \ + return __n.__xld) /* The argument range of the inline version of sinhl is slightly reduced. */ |