glibc/math/auto-libm-test-in

4036 lines
97 KiB
Plaintext
Raw Normal View History

# libm test inputs for gen-auto-libm-tests.c.
# Copyright (C) 1997-2015 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
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# The GNU C Library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with the GNU C Library; if not, see
# <http://www.gnu.org/licenses/>. */
acos 0
acos -0
acos 1
acos -1
acos 0.5
acos -0.5
acos 0.75
acos 2e-17
acos 0.0625
acos 0x0.ffffffp0
acos -0x0.ffffffp0
acos 0x0.ffffffff8p0
acos -0x0.ffffffff8p0
acos 0x0.ffffffffffffp0
acos -0x0.ffffffffffffp0
acos 0x0.ffffffffffffffffp0
acos -0x0.ffffffffffffffffp0
acos 0x1p-5
acos 0x1p-10
acos 0x1p-15
acos 0x1p-20
acos 0x1p-25
acos 0x1p-30
acos 0x1p-35
acos 0x1p-40
acos 0x1p-45
acos 0x1p-50
acos 0x1p-55
acos 0x1p-60
acos 0x1p-65
acos 0x1p-70
acos 0x1p-75
acos 0x1p-80
acos 0x1p-85
acos 0x1p-90
acos 0x1p-95
acos 0x1p-100
acos 0x1p-105
acos 0x1p-110
acos 0x1p-115
acos 0x1p-120
acos -0x1p-5
acos -0x1p-25
acos -0x1p-45
acos -0x1p-65
acos -0x1p-85
acos -0x1p-105
acos -0x1p-125
acos -0x2.0089a4p-4
acos 0xf.04aeep-4
acos 0x5.dd258006121b8p-4
acos -0x2.35f051e70dbc4p-4
acos 0xe.9a5c0d7fabb9aa1p-4
acos 0xe.17513589de79b75p-4
acos 0x3.e57821d368ebap-4
acos 0x2.0bee8p-4
acos -0x1.da00d8p-4
acos min
acos -min
acos min_subnorm
acos -min_subnorm
acosh 1
acosh 1.625
acosh 7
acosh 100
acosh 1e5
acosh 0x1p8
acosh 0x1p9
acosh 0x1p10
acosh 0x1p11
acosh 0x1p12
acosh 0x1p13
acosh 0x1p24
acosh 0x1p25
acosh 0x1p26
acosh 0x1p27
acosh 0x1p28
acosh 0x1p29
acosh 0x1p30
acosh 0x1p31
acosh 0x1p32
acosh 0x1p33
acosh 0x1p48
acosh 0x1p49
acosh 0x1p50
acosh 0x1p51
acosh 0x1p52
acosh 0x1p53
acosh 0x1p54
acosh 0x1p55
acosh 0x1p56
acosh 0x1p57
acosh 0x1p58
acosh 0x1p59
acosh 0x1p100
acosh 0x1p500
acosh 0x1p5000
acosh 0x1.80a368p+0
acosh 0x1.0b9d3e9fc19fbp+0
acosh 0x1.11eab6p+0
acosh 0x1.0fffaap+0
acosh 0x1.068e0eca105a6p+0
acosh 0x2.8d4288p+0
acosh 0x1.5d71a6p+36
acosh 0x1.476a3c43d7edep+288
acosh 0xc.84cb1dbbd1b1p+0
acosh 0x1.0722362c26ba5p+0
acosh 0x1.73515p+0
acosh 0x1.1b836p+0
acosh 0x1.07c956p+0
acosh 0x1.1808eep+0
acosh 0x1.1052c4p+0
acosh max no-test-inline
asin 0
asin -0
asin 0.5
asin -0.5
asin 1.0
asin -1.0
asin 0.75
asin 0x0.ffffffp0
asin -0x0.ffffffp0
asin 0x0.ffffffff8p0
asin -0x0.ffffffff8p0
asin 0x0.ffffffffffffp0
asin -0x0.ffffffffffffp0
asin 0x0.ffffffffffffffffp0
asin -0x0.ffffffffffffffffp0
asin -0x2.18915cp-4
asin -0x3.746774p-4
asin -0x3.1c54d10e5c844p-4
asin 0xf.c9675fa6fe69f12p-4
asin -0xa.fc5afp-4
asin 0xd.805e5p-4
asin -0x2.1a02dcp-4
asin -0x8.1c120ac3e495p-4
asin -0xb.36dacp-4
Fix asin missing underflows (bug 16351). Similar to various other bugs in this area, some asin implementations do not raise the underflow exception for subnormal arguments, when the result is tiny and inexact. This patch forces the exception in a similar way to previous fixes. Tested for x86_64, x86, powerpc and mips64. [BZ #16351] * sysdeps/i386/fpu/e_asin.S (dbl_min): New object. (MO): New macro. (__ieee754_asin): Force underflow exception for results with small absolute value. * sysdeps/i386/fpu/e_asinf.S (flt_min): New object. (MO): New macro. (__ieee754_asinf): Force underflow exception for results with small absolute value. * sysdeps/ieee754/dbl-64/e_asin.c: Include <float.h> and <math.h>. (__ieee754_asin): Force underflow exception for results with small absolute value. * sysdeps/ieee754/flt-32/e_asinf.c: Include <float.h>. (__ieee754_asinf): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-128/e_asinl.c: Include <float.h>. (__ieee754_asinl): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: Include <float.h>. (__ieee754_asinl): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-96/e_asinl.c: Include <float.h>. (__ieee754_asinl): Force underflow exception for results with small absolute value. * sysdeps/x86_64/fpu/multiarch/e_asin.c [HAVE_FMA4_SUPPORT]: Include <math.h>. * math/auto-libm-test-in: Do not mark underflow exceptions as possibly missing for bug 16351. * math/auto-libm-test-out: Regenerated.
2015-02-27 01:18:54 +08:00
asin min
asin -min
asin min_subnorm
asin -min_subnorm
asinh 0
asinh -0
asinh 0.75
asinh 1
asinh 10
asinh 100
asinh 1e6
asinh 0x1p8
asinh 0x1p9
asinh 0x1p10
asinh 0x1p11
asinh 0x1p12
asinh 0x1p13
asinh 0x1p24
asinh 0x1p25
asinh 0x1p26
asinh 0x1p27
asinh 0x1p28
asinh 0x1p29
asinh 0x1p30
asinh 0x1p31
asinh 0x1p32
asinh 0x1p33
asinh 0x1p48
asinh 0x1p49
asinh 0x1p50
asinh 0x1p51
asinh 0x1p52
asinh 0x1p53
asinh 0x1p54
asinh 0x1p55
asinh 0x1p56
asinh 0x1p57
asinh 0x1p58
asinh 0x1p59
asinh 0x1p100
asinh 0x1p500
asinh 0x1p5000
asinh 0x1p-8
asinh 0x1p-9
asinh 0x1p-10
asinh 0x1p-11
asinh 0x1p-12
asinh 0x1p-13
asinh 0x1p-24
asinh 0x1p-25
asinh 0x1p-26
asinh 0x1p-27
asinh 0x1p-28
asinh 0x1p-29
asinh 0x1p-30
asinh 0x1p-31
asinh 0x1p-32
asinh 0x1p-33
asinh 0x1p-48
asinh 0x1p-49
asinh 0x1p-50
asinh 0x1p-51
asinh 0x1p-52
asinh 0x1p-53
asinh 0x1p-54
asinh 0x1p-55
asinh 0x1p-56
asinh 0x1p-57
asinh 0x1p-58
asinh 0x1p-59
asinh 0x1p-100
asinh -0x3.d26bb4p-4
asinh -0x3.bdeef4p-4
asinh -0x7.fc7fc8p-8
asinh -0x3.b94a52e6913c2p-4
asinh 0x7.d8e5a8p-4
asinh -0x7.63a06320c42e4p-4
asinh 0x6.f4a93p-4
asinh -0x7.88bcc8p-4
asinh -0x3.11c35p-4
asinh -0x4.39534p-4
asinh -0xd.d62e8p+92
asinh -0x4.cfb9805a53a2065p-4
asinh -0x5.cabae7a011e33d9p-4
asinh -0x6.e26358p-4
asinh 0x6.c92c08p-4
asinh 0x1p-500
asinh 0x1p-5000
asinh min
asinh -min
asinh min_subnorm
asinh -min_subnorm
asinh max no-test-inline
asinh -max no-test-inline
atan 0
atan -0
atan max
atan -max
atan 1
atan -1
atan 0.75
atan 0x1p-5
atan 2.5
atan 10
atan 1e6
atan 0x1p31
Fix atan / atan2 missing underflows (bug 15319). This patch fixes bug 15319, missing underflows from atan / atan2 when the result of atan is very close to its small argument (or that of atan2 is very close to the ratio of its arguments, which may be an exact division). The usual approach of doing an underflowing computation if the computed result is subnormal is followed. For 32-bit x86, there are extra complications: the inline __ieee754_atan2 in bits/mathinline.h needs to be disabled for float and double because other libm functions using it generally rely on getting proper underflow exceptions from it, while the out-of-line functions have to remove excess range and precision from the underflowing result so as to return an exact 0 in the case where errno should be set for underflow to 0. (The failures I saw without that are similar to those Carlos reported for other functions, where I haven't seen a response to <https://sourceware.org/ml/libc-alpha/2015-01/msg00485.html> confirming if my diagnosis is correct. Arguably all libm functions with float and double returns should remove excess range and precision, but that's a separate matter.) The x86_64 long double case reported in a comment in bug 15319 is not a bug (it's an argument of LDBL_MIN, and x86_64 is an after-rounding architecture so the correct IEEE result is not to raise underflow in the given rounding mode, in addition to treating the result as an exact LDBL_MIN being within the newly clarified documentation of accuracy goals). I'm presuming that the fpatan instruction can be trusted to raise appropriate exceptions when the (long double) result underflows (after rounding) and so no changes are needed for x86 / x86_64 long double functions here; empirically this is the case for the cases covered in the testsuite, on my system. Tested for x86_64, x86, powerpc and mips64. Only 32-bit x86 needs ulps updates (for the changes to inlines meaning some functions no longer get excess precision from their __ieee754_atan2* calls). [BZ #15319] * sysdeps/i386/fpu/e_atan2.S (dbl_min): New object. (MO): New macro. (__ieee754_atan2): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/e_atan2f.S (flt_min): New object. (MO): New macro. (__ieee754_atan2f): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/s_atan.S (dbl_min): New object. (MO): New macro. (__atan): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/s_atanf.S (flt_min): New object. (MO): New macro. (__atanf): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/ieee754/dbl-64/e_atan2.c: Include <float.h> and <math.h>. (__ieee754_atan2): Force underflow exception for results with small absolute value. * sysdeps/ieee754/dbl-64/s_atan.c: Include <float.h> and <math_private.h>. (atan): Force underflow exception for results with small absolute value. * sysdeps/ieee754/flt-32/s_atanf.c: Include <float.h>. (__atanf): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-128/s_atanl.c: Include <float.h> and <math.h>. (__atanl): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: Include <float.h>. (__atanl): Force underflow exception for results with small absolute value. * sysdeps/x86/fpu/bits/mathinline.h [!__SSE2_MATH__ && !__x86_64__ && __LIBC_INTERNAL_MATH_INLINES] (__ieee754_atan2): Only define inline for long double. * sysdeps/x86_64/fpu/multiarch/e_atan2.c [HAVE_FMA4_SUPPORT || HAVE_AVX_SUPPORT]: Include <math.h>. * math/auto-libm-test-in: Do not mark underflow exceptions as possibly missing for bug 15319. Add more tests of atan2. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (casin_test_data): Do not mark underflow exceptions as possibly missing for bug 15319. (casinh_test_data): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update.
2015-02-19 05:10:49 +08:00
atan 0x1p-100
atan 0x1p-600
atan 0x1p-10000
atan -0x3.b02d84p-4
atan -0x3.3fb708p-4
atan -0x2.3249ap+0
atan -0x1.363f46p+0
atan -0x1.ad4c0ap+0
atan -0x3.eb8e18p+0
atan 0x3.53c188p+0
atan -0x1.58c83p+0
Fix atan / atan2 missing underflows (bug 15319). This patch fixes bug 15319, missing underflows from atan / atan2 when the result of atan is very close to its small argument (or that of atan2 is very close to the ratio of its arguments, which may be an exact division). The usual approach of doing an underflowing computation if the computed result is subnormal is followed. For 32-bit x86, there are extra complications: the inline __ieee754_atan2 in bits/mathinline.h needs to be disabled for float and double because other libm functions using it generally rely on getting proper underflow exceptions from it, while the out-of-line functions have to remove excess range and precision from the underflowing result so as to return an exact 0 in the case where errno should be set for underflow to 0. (The failures I saw without that are similar to those Carlos reported for other functions, where I haven't seen a response to <https://sourceware.org/ml/libc-alpha/2015-01/msg00485.html> confirming if my diagnosis is correct. Arguably all libm functions with float and double returns should remove excess range and precision, but that's a separate matter.) The x86_64 long double case reported in a comment in bug 15319 is not a bug (it's an argument of LDBL_MIN, and x86_64 is an after-rounding architecture so the correct IEEE result is not to raise underflow in the given rounding mode, in addition to treating the result as an exact LDBL_MIN being within the newly clarified documentation of accuracy goals). I'm presuming that the fpatan instruction can be trusted to raise appropriate exceptions when the (long double) result underflows (after rounding) and so no changes are needed for x86 / x86_64 long double functions here; empirically this is the case for the cases covered in the testsuite, on my system. Tested for x86_64, x86, powerpc and mips64. Only 32-bit x86 needs ulps updates (for the changes to inlines meaning some functions no longer get excess precision from their __ieee754_atan2* calls). [BZ #15319] * sysdeps/i386/fpu/e_atan2.S (dbl_min): New object. (MO): New macro. (__ieee754_atan2): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/e_atan2f.S (flt_min): New object. (MO): New macro. (__ieee754_atan2f): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/s_atan.S (dbl_min): New object. (MO): New macro. (__atan): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/s_atanf.S (flt_min): New object. (MO): New macro. (__atanf): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/ieee754/dbl-64/e_atan2.c: Include <float.h> and <math.h>. (__ieee754_atan2): Force underflow exception for results with small absolute value. * sysdeps/ieee754/dbl-64/s_atan.c: Include <float.h> and <math_private.h>. (atan): Force underflow exception for results with small absolute value. * sysdeps/ieee754/flt-32/s_atanf.c: Include <float.h>. (__atanf): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-128/s_atanl.c: Include <float.h> and <math.h>. (__atanl): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: Include <float.h>. (__atanl): Force underflow exception for results with small absolute value. * sysdeps/x86/fpu/bits/mathinline.h [!__SSE2_MATH__ && !__x86_64__ && __LIBC_INTERNAL_MATH_INLINES] (__ieee754_atan2): Only define inline for long double. * sysdeps/x86_64/fpu/multiarch/e_atan2.c [HAVE_FMA4_SUPPORT || HAVE_AVX_SUPPORT]: Include <math.h>. * math/auto-libm-test-in: Do not mark underflow exceptions as possibly missing for bug 15319. Add more tests of atan2. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (casin_test_data): Do not mark underflow exceptions as possibly missing for bug 15319. (casinh_test_data): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update.
2015-02-19 05:10:49 +08:00
atan min
atan -min
atan min_subnorm
atan -min_subnorm
# atan2 (0,x) == 0 for x > 0.
atan2 0 1
# atan2 (-0,x) == -0 for x > 0.
atan2 -0 1
atan2 0 0
atan2 -0 0
# atan2 (+0,x) == +pi for x < 0.
atan2 0 -1
# atan2 (-0,x) == -pi for x < 0.
atan2 -0 -1
atan2 0 -0
atan2 -0 -0
# atan2 (y,+0) == pi/2 for y > 0.
atan2 1 0
# atan2 (y,-0) == pi/2 for y > 0.
atan2 1 -0
# atan2 (y,+0) == -pi/2 for y < 0.
atan2 -1 0
# atan2 (y,-0) == -pi/2 for y < 0.
atan2 -1 -0
atan2 max max
atan2 max -max
atan2 -max max
atan2 -max -max
atan2 max min
atan2 -max -min
atan2 -max min
atan2 max -min
atan2 max min_subnorm
atan2 -max -min_subnorm
atan2 -max min_subnorm
atan2 max -min_subnorm
atan2 0.75 1
atan2 -0.75 1.0
atan2 0.75 -1.0
atan2 -0.75 -1.0
atan2 0.390625 .00029
atan2 1.390625 0.9296875
atan2 -0.00756827042671106339 -.001792735857538728036
atan2 0x1.00000000000001p0 0x1.00000000000001p0
atan2 0x4.c3841p-4 0x2.f2f308p+0
atan2 -0xe.cf143p-40 0xd.3de7ap-36
atan2 0x5.576cf8p-4 0x2.21e65p+0
atan2 -0x4.29411p-4 0x1.f4755cp+0
atan2 -0xa.b4101p+20 -0xf.9c4c8p-4
atan2 0x4.251bb8p-4 0x7.40ac68p+0
atan2 0x1.47239ep+68 0xa.3ac3cp+68
atan2 -0x6.b0794p-4 0x3.8ff10cp+0
atan2 -0x7.15e7af0a1780cp-724 0xf.fffffp+124
atan2 0x3.f16f1p+0 -0x1.546056p+0
atan2 -0x1.9e657cp-24 0x7.40bb4p-52
atan2 min min
atan2 min -min
atan2 -min min
atan2 -min -min
atan2 min_subnorm min_subnorm
atan2 min_subnorm -min_subnorm
atan2 -min_subnorm min_subnorm
atan2 -min_subnorm -min_subnorm
atan2 1 -max
atan2 -1 -max
atan2 min -max
atan2 -min -max
atan2 min_subnorm -max
atan2 -min_subnorm -max
Fix atan / atan2 missing underflows (bug 15319). This patch fixes bug 15319, missing underflows from atan / atan2 when the result of atan is very close to its small argument (or that of atan2 is very close to the ratio of its arguments, which may be an exact division). The usual approach of doing an underflowing computation if the computed result is subnormal is followed. For 32-bit x86, there are extra complications: the inline __ieee754_atan2 in bits/mathinline.h needs to be disabled for float and double because other libm functions using it generally rely on getting proper underflow exceptions from it, while the out-of-line functions have to remove excess range and precision from the underflowing result so as to return an exact 0 in the case where errno should be set for underflow to 0. (The failures I saw without that are similar to those Carlos reported for other functions, where I haven't seen a response to <https://sourceware.org/ml/libc-alpha/2015-01/msg00485.html> confirming if my diagnosis is correct. Arguably all libm functions with float and double returns should remove excess range and precision, but that's a separate matter.) The x86_64 long double case reported in a comment in bug 15319 is not a bug (it's an argument of LDBL_MIN, and x86_64 is an after-rounding architecture so the correct IEEE result is not to raise underflow in the given rounding mode, in addition to treating the result as an exact LDBL_MIN being within the newly clarified documentation of accuracy goals). I'm presuming that the fpatan instruction can be trusted to raise appropriate exceptions when the (long double) result underflows (after rounding) and so no changes are needed for x86 / x86_64 long double functions here; empirically this is the case for the cases covered in the testsuite, on my system. Tested for x86_64, x86, powerpc and mips64. Only 32-bit x86 needs ulps updates (for the changes to inlines meaning some functions no longer get excess precision from their __ieee754_atan2* calls). [BZ #15319] * sysdeps/i386/fpu/e_atan2.S (dbl_min): New object. (MO): New macro. (__ieee754_atan2): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/e_atan2f.S (flt_min): New object. (MO): New macro. (__ieee754_atan2f): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/s_atan.S (dbl_min): New object. (MO): New macro. (__atan): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/s_atanf.S (flt_min): New object. (MO): New macro. (__atanf): For results with small absolute value, force underflow exception and remove excess range and precision from return value. * sysdeps/ieee754/dbl-64/e_atan2.c: Include <float.h> and <math.h>. (__ieee754_atan2): Force underflow exception for results with small absolute value. * sysdeps/ieee754/dbl-64/s_atan.c: Include <float.h> and <math_private.h>. (atan): Force underflow exception for results with small absolute value. * sysdeps/ieee754/flt-32/s_atanf.c: Include <float.h>. (__atanf): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-128/s_atanl.c: Include <float.h> and <math.h>. (__atanl): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: Include <float.h>. (__atanl): Force underflow exception for results with small absolute value. * sysdeps/x86/fpu/bits/mathinline.h [!__SSE2_MATH__ && !__x86_64__ && __LIBC_INTERNAL_MATH_INLINES] (__ieee754_atan2): Only define inline for long double. * sysdeps/x86_64/fpu/multiarch/e_atan2.c [HAVE_FMA4_SUPPORT || HAVE_AVX_SUPPORT]: Include <math.h>. * math/auto-libm-test-in: Do not mark underflow exceptions as possibly missing for bug 15319. Add more tests of atan2. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (casin_test_data): Do not mark underflow exceptions as possibly missing for bug 15319. (casinh_test_data): Likewise. * sysdeps/i386/fpu/libm-test-ulps: Update.
2015-02-19 05:10:49 +08:00
atan2 1 max
atan2 -1 max
atan2 min max
atan2 -min max
atan2 min_subnorm max
atan2 -min_subnorm max
atan2 min 1
atan2 -min 1
atan2 min_subnorm 1
atan2 -min_subnorm 1
atan2 min -1
atan2 -min -1
atan2 min_subnorm -1
atan2 -min_subnorm -1
atanh 0
atanh -0
atanh 0.75
atanh -0.75
atanh 0.25
atanh 0x1p-5
atanh 0x1p-10
atanh 0x1.2345p-20
atanh 0x1p-8
atanh 0x1p-9
atanh 0x1p-10
atanh 0x1p-11
atanh 0x1p-12
atanh 0x1p-13
atanh 0x1p-24
atanh 0x1p-25
atanh 0x1p-26
atanh 0x1p-27
atanh 0x1p-28
atanh 0x1p-29
atanh 0x1p-30
atanh 0x1p-31
atanh 0x1p-32
atanh 0x1p-33
atanh 0x1p-48
atanh 0x1p-49
atanh 0x1p-50
atanh 0x1p-51
atanh 0x1p-52
atanh 0x1p-53
atanh 0x1p-54
atanh 0x1p-55
atanh 0x1p-56
atanh 0x1p-57
atanh 0x1p-58
atanh 0x1p-59
atanh 0x1p-100
atanh -0x1p-100
atanh 0x1p-600
atanh -0x1p-600
atanh 0x1p-10000
atanh -0x1p-10000
atanh -0x6.e6c77p-20
atanh 0x3.2ca824p-4
atanh -0x1.cc1d66p-4
atanh -0xf.cd3809ca8fd28p-4 no-test-inline
atanh -0x1.04f386p-4
atanh -0x2.084568p-4
atanh -0x3.e0a5d8p-4
atanh 0x3.dfb1f5db0ceccp-4
atanh 0x2.251b2a64c85dep-4
atanh -0x2.e3458cp-4
atanh 0x3.91d9f3c80c72d7acp-4
atanh -0x2.6c52c26567198p-4
atanh 0x3.a274ecp-4
atanh -0x3.f0f519a687b64p-8
atanh 0x6.fd4ec8p-4
atanh -0x2.6cb2a8p-4
atanh -0xc.21df7c7f51508p-4
atanh 0x5.8be99p-40
atanh 0x3.cbed35fe733d8p-4
atanh -0x5.c18b6p-4
atanh -0x7.c88a5p-8
atanh -0x2.c72b7cp-4
atanh -0x3.98eaf4p-4
atanh 0x2.c1085p-4
Fix atanhl missing underflows (bug 16352). Similar to various other bugs in this area, some atanh implementations do not raise the underflow exception for subnormal arguments, when the result is tiny and inexact. This patch forces the exception in a similar way to previous fixes. (No change in this regard is needed for the i386 implementation; special handling to force underflows in these cases will only be needed there when the spurious underflows, bug 18049, get fixed.) Tested for x86_64, x86, powerpc and mips64. [BZ #16352] * sysdeps/i386/fpu/e_atanh.S (dbl_min): New object. (__ieee754_atanh): Force underflow exception for results with small absolute value. * sysdeps/i386/fpu/e_atanhf.S (flt_min): New object. (__ieee754_atanhf): Force underflow exception for results with small absolute value. * sysdeps/ieee754/dbl-64/e_atanh.c: Include <float.h>. (__ieee754_atanh): Force underflow exception for results with small absolute value. * sysdeps/ieee754/flt-32/e_atanhf.c: Include <float.h>. (__ieee754_atanhf): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-128/e_atanhl.c: Include <float.h>. (__ieee754_atanhl): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: Include <float.h>. (__ieee754_atanhl): Force underflow exception for results with small absolute value. * sysdeps/ieee754/ldbl-96/e_atanhl.c: Include <float.h>. (__ieee754_atanhl): Force underflow exception for results with small absolute value. * math/auto-libm-test-in: Do not allow missing underflow exceptions from atanh. * math/auto-libm-test-out: Regenerated.
2015-05-16 06:07:57 +08:00
atanh 0x1p-500
atanh 0x1p-5000
atanh min
atanh -min
atanh min_subnorm
atanh -min_subnorm
# cabs (x,y) == cabs (y,x).
cabs 0.75 12.390625
# cabs (x,y) == cabs (-x,y).
cabs -12.390625 0.75
# cabs (x,y) == cabs (-y,x).
cabs -0.75 12.390625
# cabs (x,y) == cabs (-x,-y).
cabs -12.390625 -0.75
# cabs (x,y) == cabs (-y,-x).
cabs -0.75 -12.390625
# cabs (x,0) == fabs (x).
cabs -0.75 0
cabs 0.75 0
cabs -1.0 0
cabs 1.0 0
cabs -5.7e7 0
cabs 5.7e7 0
cabs 0.75 1.25
cabs -0x1.34be3p-4 -0xc.56623p+0
cabs -0x1.2b0ff8p+28 -0x2.549fc4p+16
cabs -0x1.0932cp-80 -0x2.51109p-24
cabs -0x1.055fb2p+48 0x9.1ce86p+24
cabs -0x1.26a566p+120 0x4.017b28p+92
cabs -0x1.0eda54p+28 0xb.09476p+0
cabs -0x1.133b84p+84 -0xa.7d925f57f60cp+768
cabs -0 -0x3.4e5d7877324cp+0
cabs -0xa.f59b8p+4 0xa.21a95p+20
cabs -0x1.30ed4cp+0 0x1.e9d956p+56
cabs -0x1.250366p-36 -0x5.a5046p-4
cabs -0x1.88858cp+84 0x5.bd9198p+36
# carg (x + i 0) == 0 for x > 0.
carg 2.0 0
# carg (x - i 0) == -0 for x > 0.
carg 2.0 -0
carg 0 0
carg 0 -0
# carg (x + i 0) == +pi for x < 0.
carg -2.0 0
# carg (x - i 0) == -pi for x < 0.
carg -2.0 -0
carg -0 0
carg -0 -0
# carg (+0 + i y) == pi/2 for y > 0.
carg 0 2.0
# carg (-0 + i y) == pi/2 for y > 0.
carg -0 2.0
# carg (+0 + i y) == -pi/2 for y < 0.
carg 0 -2.0
# carg (-0 + i y) == -pi/2 for y < 0.
carg -0 -2.0
carg 0x2.f2f308p+0 0x4.c3841p-4
carg 0xd.3de7ap-36 -0xe.cf143p-40
carg 0x2.21e65p+0 0x5.576cf8p-4
carg 0x1.f4755cp+0 -0x4.29411p-4
carg -0xf.9c4c8p-4 -0xa.b4101p+20
carg 0x7.40ac68p+0 0x4.251bb8p-4
carg 0xa.3ac3cp+68 0x1.47239ep+68
carg 0x3.8ff10cp+0 -0x6.b0794p-4
carg -0x3.973cc4p+72 -0xf.fffffp+124
carg -0x1.0a512ap-120 0xf.54681p-108
carg -0x3.be0054531569p-4 -0xb.0c5a9p-4
carg -0x1.0236b6p-20 0x2.a6e504p+108
carg 0x9.27b5fd9157b6c92b151371ca23d8p+0 0x1.d8759b9024992p+0
carg 0x8p-152 0x4p-1076
cbrt 0.0
cbrt -0
cbrt -0.001
cbrt 8
cbrt -27.0
cbrt 0.9921875
cbrt 0.75
cbrt 0x1p16383
cbrt 0x1p-16383
cbrt 1e5
cbrt 0x3.132634p+0
cbrt -0xc.8d0442f2f0d1p-492
cbrt -0xa.6b142p+40
cbrt -0x1.f28ab85f3580ap-128
cbrt -0x2.b5cd28p-36
cbrt -0x1.d6a8bep-20
cbrt -0x3.593ed8p-72
cbrt 0x1.bd0098p-104
cbrt -0x3.300d34p+0
cbrt 0x6.247f5p-4
cbrt -0x3.48648028cb464p+0
cbrt max
cbrt -max
cbrt min
cbrt -min
cbrt min_subnorm
cbrt -min_subnorm
Move various TEST_c_c tests from libm-test.inc to auto-libm-test-inc. This patch moves tests of ccos, ccosh, cexp, clog, csqrt, ctan and ctanh to auto-libm-test-in, adding the required support to gen-auto-libm-tests. Other TEST_c_c functions aren't moved for now (although the relevant table entries are put in gen-auto-libm-tests for it to know how to handle them): clog10 because of a known MPC bug causing it to hang for at least some pure imaginary inputs (fixed in SVN, but I'd rather not rely on unreleased versions of MPFR or MPC even if relying on very recent releases); the inverse trig and hyperbolic functions because of known slowness in special cases; and csin / csinh because of observed slowness that I need to investigate and report to the MPC maintainers. Slowness can be bypassed by moving to incremental generation (only for new / changed tests) rather than regenerating the whole of auto-libm-test-out every time, but that needs implementing. (This patch takes the time for running gen-auto-libm-tests from about one second to seven, on my system, which I think is reasonable. The slow functions would make it take several minutes at least, which seems unreasonable.) Tested x86_64 and x86 and ulps updated accordingly. * math/auto-libm-test-in: Add tests of ccos, ccosh, cexp, clog, csqrt, ctan and ctanh. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (TEST_COND_x86_64): New macro. (TEST_COND_x86): Likewise. (ccos_test_data): Use AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (csqrt_test_data): Likewise. (ctan_test_data): Likewise. (ctan_tonearest_test_data): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_downward_test_data): Likewise. (ctan_upward_test_data): Likewise. (ctanh_test_data): Likewise. (ctanh_tonearest_test_data): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_upward_test_data): Likewise. * math/gen-auto-libm-tests.c (func_calc_method): Add value mpc_c_c. (func_calc_desc): Add mpc_c_c union field. (FUNC_mpc_c_c): New macro. (test_functions): Add cacos, cacosh, casin, casinh, catan, catanh, ccos, ccosh, cexp, clog, clog10, csin, csinh, csqrt, ctan and ctanh. (special_fill_min_subnorm_p120): New function. (special_real_inputs): Add min_subnorm_p120. (calc_generic_results): Handle mpc_c_c. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2013-12-20 20:32:44 +08:00
ccos 0.0 0.0
ccos -0 0.0
ccos 0.0 -0
ccos -0 -0
ccos 0.75 1.25
ccos -2 -3
ccos 0.75 89.5
ccos 0.75 -89.5
ccos -0.75 89.5
ccos -0.75 -89.5
ccos 0.75 710.5
ccos 0.75 -710.5
ccos -0.75 710.5
ccos -0.75 -710.5
ccos 0.75 11357.25
ccos 0.75 -11357.25
ccos -0.75 11357.25
ccos -0.75 -11357.25
ccos 0x1p-149 180
ccos 0x1p-1074 1440
ccos 0x1p-16434 22730
ccos min_subnorm_p120 0x1p-120
ccos 0x1p-120 min_subnorm_p120
Fix cexp, ccos, ccosh, csin, csinh spurious underflows (bug 18594). cexp, ccos, ccosh, csin and csinh have spurious underflows in cases where they compute sin of the smallest normal, that produces an underflow exception (depending on which sin implementation is in use) but the final result does not underflow. ctan and ctanh may also have such underflows, or they may be latent (the issue there is that e.g. ctan (DBL_MIN) should, rounded upwards, be the next double value above DBL_MIN, which under glibc's accuracy goals may not have an underflow exception, but the intermediate computation of sin (DBL_MIN) would legitimately underflow on before-rounding architectures). This patch fixes all those functions so they use plain comparisons (> DBL_MIN etc.) instead of comparing the result of fpclassify with FP_SUBNORMAL (in all these cases, we already know the number being compared is finite). Note that in the case of csin / csinf / csinl, there is no need for fabs calls in the comparison because the real part has already been reduced to its absolute value. As the patch fixes the failures that previously obstructed moving tests of cexp to use ALL_RM_TEST, those tests are moved to ALL_RM_TEST by the patch (two functions remain yet to be converted). Tested for x86_64 and x86 and ulps updated accordingly. [BZ #18594] * math/s_ccosh.c (__ccosh): Compare with least normal value instead of comparing class with FP_SUBNORMAL. * math/s_ccoshf.c (__ccoshf): Likewise. * math/s_ccoshl.c (__ccoshl): Likewise. * math/s_cexp.c (__cexp): Likewise. * math/s_cexpf.c (__cexpf): Likewise. * math/s_cexpl.c (__cexpl): Likewise. * math/s_csin.c (__csin): Likewise. * math/s_csinf.c (__csinf): Likewise. * math/s_csinh.c (__csinh): Likewise. * math/s_csinhf.c (__csinhf): Likewise. * math/s_csinhl.c (__csinhl): Likewise. * math/s_csinl.c (__csinl): Likewise. * math/s_ctan.c (__ctan): Likewise. * math/s_ctanf.c (__ctanf): Likewise. * math/s_ctanh.c (__ctanh): Likewise. * math/s_ctanhf.c (__ctanhf): Likewise. * math/s_ctanhl.c (__ctanhl): Likewise. * math/s_ctanl.c (__ctanl): Likewise. * math/auto-libm-test-in: Add more tests of ccos, ccosh, cexp, csin, csinh, ctan and ctanh. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (cexp_test): Use ALL_RM_TEST. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2015-06-25 05:04:51 +08:00
ccos min 1
ccos -min 1
ccos min_subnorm 80
ccos -min_subnorm 80
Move various TEST_c_c tests from libm-test.inc to auto-libm-test-inc. This patch moves tests of ccos, ccosh, cexp, clog, csqrt, ctan and ctanh to auto-libm-test-in, adding the required support to gen-auto-libm-tests. Other TEST_c_c functions aren't moved for now (although the relevant table entries are put in gen-auto-libm-tests for it to know how to handle them): clog10 because of a known MPC bug causing it to hang for at least some pure imaginary inputs (fixed in SVN, but I'd rather not rely on unreleased versions of MPFR or MPC even if relying on very recent releases); the inverse trig and hyperbolic functions because of known slowness in special cases; and csin / csinh because of observed slowness that I need to investigate and report to the MPC maintainers. Slowness can be bypassed by moving to incremental generation (only for new / changed tests) rather than regenerating the whole of auto-libm-test-out every time, but that needs implementing. (This patch takes the time for running gen-auto-libm-tests from about one second to seven, on my system, which I think is reasonable. The slow functions would make it take several minutes at least, which seems unreasonable.) Tested x86_64 and x86 and ulps updated accordingly. * math/auto-libm-test-in: Add tests of ccos, ccosh, cexp, clog, csqrt, ctan and ctanh. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (TEST_COND_x86_64): New macro. (TEST_COND_x86): Likewise. (ccos_test_data): Use AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (csqrt_test_data): Likewise. (ctan_test_data): Likewise. (ctan_tonearest_test_data): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_downward_test_data): Likewise. (ctan_upward_test_data): Likewise. (ctanh_test_data): Likewise. (ctanh_tonearest_test_data): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_upward_test_data): Likewise. * math/gen-auto-libm-tests.c (func_calc_method): Add value mpc_c_c. (func_calc_desc): Add mpc_c_c union field. (FUNC_mpc_c_c): New macro. (test_functions): Add cacos, cacosh, casin, casinh, catan, catanh, ccos, ccosh, cexp, clog, clog10, csin, csinh, csqrt, ctan and ctanh. (special_fill_min_subnorm_p120): New function. (special_real_inputs): Add min_subnorm_p120. (calc_generic_results): Handle mpc_c_c. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2013-12-20 20:32:44 +08:00
ccosh 0.0 0.0
ccosh -0 0.0
ccosh 0.0 -0
ccosh -0 -0
ccosh 0.75 1.25
ccosh -2 -3
ccosh 89.5 0.75
ccosh -89.5 0.75
ccosh 89.5 -0.75
ccosh -89.5 -0.75
ccosh 710.5 0.75
ccosh -710.5 0.75
ccosh 710.5 -0.75
ccosh -710.5 -0.75
ccosh 11357.25 0.75
ccosh -11357.25 0.75
ccosh 11357.25 -0.75
ccosh -11357.25 -0.75
ccosh 180 0x1p-149
ccosh 1440 0x1p-1074
ccosh 22730 0x1p-16434
ccosh min_subnorm_p120 0x1p-120
ccosh 0x1p-120 min_subnorm_p120
Fix cexp, ccos, ccosh, csin, csinh spurious underflows (bug 18594). cexp, ccos, ccosh, csin and csinh have spurious underflows in cases where they compute sin of the smallest normal, that produces an underflow exception (depending on which sin implementation is in use) but the final result does not underflow. ctan and ctanh may also have such underflows, or they may be latent (the issue there is that e.g. ctan (DBL_MIN) should, rounded upwards, be the next double value above DBL_MIN, which under glibc's accuracy goals may not have an underflow exception, but the intermediate computation of sin (DBL_MIN) would legitimately underflow on before-rounding architectures). This patch fixes all those functions so they use plain comparisons (> DBL_MIN etc.) instead of comparing the result of fpclassify with FP_SUBNORMAL (in all these cases, we already know the number being compared is finite). Note that in the case of csin / csinf / csinl, there is no need for fabs calls in the comparison because the real part has already been reduced to its absolute value. As the patch fixes the failures that previously obstructed moving tests of cexp to use ALL_RM_TEST, those tests are moved to ALL_RM_TEST by the patch (two functions remain yet to be converted). Tested for x86_64 and x86 and ulps updated accordingly. [BZ #18594] * math/s_ccosh.c (__ccosh): Compare with least normal value instead of comparing class with FP_SUBNORMAL. * math/s_ccoshf.c (__ccoshf): Likewise. * math/s_ccoshl.c (__ccoshl): Likewise. * math/s_cexp.c (__cexp): Likewise. * math/s_cexpf.c (__cexpf): Likewise. * math/s_cexpl.c (__cexpl): Likewise. * math/s_csin.c (__csin): Likewise. * math/s_csinf.c (__csinf): Likewise. * math/s_csinh.c (__csinh): Likewise. * math/s_csinhf.c (__csinhf): Likewise. * math/s_csinhl.c (__csinhl): Likewise. * math/s_csinl.c (__csinl): Likewise. * math/s_ctan.c (__ctan): Likewise. * math/s_ctanf.c (__ctanf): Likewise. * math/s_ctanh.c (__ctanh): Likewise. * math/s_ctanhf.c (__ctanhf): Likewise. * math/s_ctanhl.c (__ctanhl): Likewise. * math/s_ctanl.c (__ctanl): Likewise. * math/auto-libm-test-in: Add more tests of ccos, ccosh, cexp, csin, csinh, ctan and ctanh. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (cexp_test): Use ALL_RM_TEST. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2015-06-25 05:04:51 +08:00
ccosh 1 min
ccosh 1 -min
ccosh 80 min_subnorm
ccosh 80 -min_subnorm
Move various TEST_c_c tests from libm-test.inc to auto-libm-test-inc. This patch moves tests of ccos, ccosh, cexp, clog, csqrt, ctan and ctanh to auto-libm-test-in, adding the required support to gen-auto-libm-tests. Other TEST_c_c functions aren't moved for now (although the relevant table entries are put in gen-auto-libm-tests for it to know how to handle them): clog10 because of a known MPC bug causing it to hang for at least some pure imaginary inputs (fixed in SVN, but I'd rather not rely on unreleased versions of MPFR or MPC even if relying on very recent releases); the inverse trig and hyperbolic functions because of known slowness in special cases; and csin / csinh because of observed slowness that I need to investigate and report to the MPC maintainers. Slowness can be bypassed by moving to incremental generation (only for new / changed tests) rather than regenerating the whole of auto-libm-test-out every time, but that needs implementing. (This patch takes the time for running gen-auto-libm-tests from about one second to seven, on my system, which I think is reasonable. The slow functions would make it take several minutes at least, which seems unreasonable.) Tested x86_64 and x86 and ulps updated accordingly. * math/auto-libm-test-in: Add tests of ccos, ccosh, cexp, clog, csqrt, ctan and ctanh. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (TEST_COND_x86_64): New macro. (TEST_COND_x86): Likewise. (ccos_test_data): Use AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (csqrt_test_data): Likewise. (ctan_test_data): Likewise. (ctan_tonearest_test_data): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_downward_test_data): Likewise. (ctan_upward_test_data): Likewise. (ctanh_test_data): Likewise. (ctanh_tonearest_test_data): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_upward_test_data): Likewise. * math/gen-auto-libm-tests.c (func_calc_method): Add value mpc_c_c. (func_calc_desc): Add mpc_c_c union field. (FUNC_mpc_c_c): New macro. (test_functions): Add cacos, cacosh, casin, casinh, catan, catanh, ccos, ccosh, cexp, clog, clog10, csin, csinh, csqrt, ctan and ctanh. (special_fill_min_subnorm_p120): New function. (special_real_inputs): Add min_subnorm_p120. (calc_generic_results): Handle mpc_c_c. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2013-12-20 20:32:44 +08:00
cexp 0 0
cexp -0 0
cexp 0 -0
cexp -0 -0
cexp 0.75 1.25
cexp -2.0 -3.0
cexp 0 0x1p65
cexp 0 -0x1p65
cexp 50 0x1p127
cexp 0 1e22
cexp 0 0x1p1023
cexp 500 0x1p1023
cexp 0 0x1p16383
cexp -10000 0x1p16383
cexp 88.75 0.75
cexp -95 0.75
cexp 709.8125 0.75
cexp -720 0.75
cexp 11356.5625 0.75
cexp -11370 0.75
cexp 180 0x1p-149
cexp 1440 0x1p-1074
cexp 22730 0x1p-16434
cexp 1e6 0
cexp 1e6 min
cexp 1e6 -min
Fix cexp, ccos, ccosh, csin, csinh spurious underflows (bug 18594). cexp, ccos, ccosh, csin and csinh have spurious underflows in cases where they compute sin of the smallest normal, that produces an underflow exception (depending on which sin implementation is in use) but the final result does not underflow. ctan and ctanh may also have such underflows, or they may be latent (the issue there is that e.g. ctan (DBL_MIN) should, rounded upwards, be the next double value above DBL_MIN, which under glibc's accuracy goals may not have an underflow exception, but the intermediate computation of sin (DBL_MIN) would legitimately underflow on before-rounding architectures). This patch fixes all those functions so they use plain comparisons (> DBL_MIN etc.) instead of comparing the result of fpclassify with FP_SUBNORMAL (in all these cases, we already know the number being compared is finite). Note that in the case of csin / csinf / csinl, there is no need for fabs calls in the comparison because the real part has already been reduced to its absolute value. As the patch fixes the failures that previously obstructed moving tests of cexp to use ALL_RM_TEST, those tests are moved to ALL_RM_TEST by the patch (two functions remain yet to be converted). Tested for x86_64 and x86 and ulps updated accordingly. [BZ #18594] * math/s_ccosh.c (__ccosh): Compare with least normal value instead of comparing class with FP_SUBNORMAL. * math/s_ccoshf.c (__ccoshf): Likewise. * math/s_ccoshl.c (__ccoshl): Likewise. * math/s_cexp.c (__cexp): Likewise. * math/s_cexpf.c (__cexpf): Likewise. * math/s_cexpl.c (__cexpl): Likewise. * math/s_csin.c (__csin): Likewise. * math/s_csinf.c (__csinf): Likewise. * math/s_csinh.c (__csinh): Likewise. * math/s_csinhf.c (__csinhf): Likewise. * math/s_csinhl.c (__csinhl): Likewise. * math/s_csinl.c (__csinl): Likewise. * math/s_ctan.c (__ctan): Likewise. * math/s_ctanf.c (__ctanf): Likewise. * math/s_ctanh.c (__ctanh): Likewise. * math/s_ctanhf.c (__ctanhf): Likewise. * math/s_ctanhl.c (__ctanhl): Likewise. * math/s_ctanl.c (__ctanl): Likewise. * math/auto-libm-test-in: Add more tests of ccos, ccosh, cexp, csin, csinh, ctan and ctanh. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (cexp_test): Use ALL_RM_TEST. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2015-06-25 05:04:51 +08:00
cexp 1 min
cexp 1 -min
cexp 80 min_subnorm
cexp 80 -min_subnorm
cexp min min_subnorm
cexp min -min_subnorm
Move various TEST_c_c tests from libm-test.inc to auto-libm-test-inc. This patch moves tests of ccos, ccosh, cexp, clog, csqrt, ctan and ctanh to auto-libm-test-in, adding the required support to gen-auto-libm-tests. Other TEST_c_c functions aren't moved for now (although the relevant table entries are put in gen-auto-libm-tests for it to know how to handle them): clog10 because of a known MPC bug causing it to hang for at least some pure imaginary inputs (fixed in SVN, but I'd rather not rely on unreleased versions of MPFR or MPC even if relying on very recent releases); the inverse trig and hyperbolic functions because of known slowness in special cases; and csin / csinh because of observed slowness that I need to investigate and report to the MPC maintainers. Slowness can be bypassed by moving to incremental generation (only for new / changed tests) rather than regenerating the whole of auto-libm-test-out every time, but that needs implementing. (This patch takes the time for running gen-auto-libm-tests from about one second to seven, on my system, which I think is reasonable. The slow functions would make it take several minutes at least, which seems unreasonable.) Tested x86_64 and x86 and ulps updated accordingly. * math/auto-libm-test-in: Add tests of ccos, ccosh, cexp, clog, csqrt, ctan and ctanh. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (TEST_COND_x86_64): New macro. (TEST_COND_x86): Likewise. (ccos_test_data): Use AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (csqrt_test_data): Likewise. (ctan_test_data): Likewise. (ctan_tonearest_test_data): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_downward_test_data): Likewise. (ctan_upward_test_data): Likewise. (ctanh_test_data): Likewise. (ctanh_tonearest_test_data): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_upward_test_data): Likewise. * math/gen-auto-libm-tests.c (func_calc_method): Add value mpc_c_c. (func_calc_desc): Add mpc_c_c union field. (FUNC_mpc_c_c): New macro. (test_functions): Add cacos, cacosh, casin, casinh, catan, catanh, ccos, ccosh, cexp, clog, clog10, csin, csinh, csqrt, ctan and ctanh. (special_fill_min_subnorm_p120): New function. (special_real_inputs): Add min_subnorm_p120. (calc_generic_results): Handle mpc_c_c. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2013-12-20 20:32:44 +08:00
clog 0.75 1.25
clog -2 -3
clog 0x2.f2f308p+0 0x4.c3841p-4
clog 0xd.3de7ap-36 -0xe.cf143p-40
clog 0x2.21e65p+0 0x5.576cf8p-4
clog 0x1.f4755cp+0 -0x4.29411p-4
clog -0xf.9c4c8p-4 -0xa.b4101p+20
clog 0x7.40ac68p+0 0x4.251bb8p-4
clog 0xa.3ac3cp+68 0x1.47239ep+68
clog 0x3.8ff10cp+0 -0x6.b0794p-4
clog 0xa.a39ffp-4 -0x2.360c38p-4
clog 0x6.9a4569067b6ecp-4 0xb.0a30d15e7d798p-4
clog -0x1.105436p+0 -0x6.66396df3cc7ap-4
clog -0x2.c90b952282392dep-4 0x1.43cda16634cc7046p+0
clog -0x9.93d164127d9fp-4 0x7.c5c8d8p-4
clog -0xa.5920ap-4 -0x6.2cda5p-4
clog 0xd.d05c38ebb1b4p+60 -0x3.c22fdp+44
clog -0xa.19f8ec252c58d5p-4 0x7.d10cdec29a141538p-4
clog -0xa.7ac41a0b417cb8fp-4 -0x6.c5a32eaeedd4p-4
clog 0x3.c16p-136 0x8p-152
clog -0x1.0a69de710590dp+0 -0x7.bc7e121e2b0d1088p-4
Move various TEST_c_c tests from libm-test.inc to auto-libm-test-inc. This patch moves tests of ccos, ccosh, cexp, clog, csqrt, ctan and ctanh to auto-libm-test-in, adding the required support to gen-auto-libm-tests. Other TEST_c_c functions aren't moved for now (although the relevant table entries are put in gen-auto-libm-tests for it to know how to handle them): clog10 because of a known MPC bug causing it to hang for at least some pure imaginary inputs (fixed in SVN, but I'd rather not rely on unreleased versions of MPFR or MPC even if relying on very recent releases); the inverse trig and hyperbolic functions because of known slowness in special cases; and csin / csinh because of observed slowness that I need to investigate and report to the MPC maintainers. Slowness can be bypassed by moving to incremental generation (only for new / changed tests) rather than regenerating the whole of auto-libm-test-out every time, but that needs implementing. (This patch takes the time for running gen-auto-libm-tests from about one second to seven, on my system, which I think is reasonable. The slow functions would make it take several minutes at least, which seems unreasonable.) Tested x86_64 and x86 and ulps updated accordingly. * math/auto-libm-test-in: Add tests of ccos, ccosh, cexp, clog, csqrt, ctan and ctanh. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (TEST_COND_x86_64): New macro. (TEST_COND_x86): Likewise. (ccos_test_data): Use AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (csqrt_test_data): Likewise. (ctan_test_data): Likewise. (ctan_tonearest_test_data): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_downward_test_data): Likewise. (ctan_upward_test_data): Likewise. (ctanh_test_data): Likewise. (ctanh_tonearest_test_data): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_upward_test_data): Likewise. * math/gen-auto-libm-tests.c (func_calc_method): Add value mpc_c_c. (func_calc_desc): Add mpc_c_c union field. (FUNC_mpc_c_c): New macro. (test_functions): Add cacos, cacosh, casin, casinh, catan, catanh, ccos, ccosh, cexp, clog, clog10, csin, csinh, csqrt, ctan and ctanh. (special_fill_min_subnorm_p120): New function. (special_real_inputs): Add min_subnorm_p120. (calc_generic_results): Handle mpc_c_c. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2013-12-20 20:32:44 +08:00
clog 0x1.fffffep+127 0x1.fffffep+127
clog 0x1.fffffep+127 1.0
clog 0x1p-149 0x1p-149
clog 0x1p-147 0x1p-147
clog 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023
clog 0x1.fffffffffffffp+1023 0x1p+1023
clog 0x1p-1074 0x1p-1074
clog 0x1p-1073 0x1p-1073
clog 0x1.fp+16383 0x1.fp+16383
clog 0x1.fp+16383 0x1p+16383
clog 0x1p-16440 0x1p-16441
clog 0x1p-149 0x1.fp+127
clog -0x1p-149 0x1.fp+127
clog 0x1p-149 -0x1.fp+127
clog -0x1p-149 -0x1.fp+127
clog -0x1.fp+127 0x1p-149
clog -0x1.fp+127 -0x1p-149
clog 0x1.fp+127 0x1p-149
clog 0x1.fp+127 -0x1p-149
clog 0x1p-1074 0x1.fp+1023
clog -0x1p-1074 0x1.fp+1023
clog 0x1p-1074 -0x1.fp+1023
clog -0x1p-1074 -0x1.fp+1023
clog -0x1.fp+1023 0x1p-1074
clog -0x1.fp+1023 -0x1p-1074
clog 0x1.fp+1023 0x1p-1074
clog 0x1.fp+1023 -0x1p-1074
clog 0x1p-16445 0x1.fp+16383
clog -0x1p-16445 0x1.fp+16383
clog 0x1p-16445 -0x1.fp+16383
clog -0x1p-16445 -0x1.fp+16383
clog -0x1.fp+16383 0x1p-16445
clog -0x1.fp+16383 -0x1p-16445
clog 0x1.fp+16383 0x1p-16445
clog 0x1.fp+16383 -0x1p-16445
clog 0x1p-16494 0x1.fp+16383
clog -0x1p-16494 0x1.fp+16383
clog 0x1p-16494 -0x1.fp+16383
clog -0x1p-16494 -0x1.fp+16383
clog -0x1.fp+16383 0x1p-16494
clog -0x1.fp+16383 -0x1p-16494
clog 0x1.fp+16383 0x1p-16494
clog 0x1.fp+16383 -0x1p-16494
clog 1.0 0x1.234566p-10
clog -1.0 0x1.234566p-20
clog 0x1.234566p-30 1.0
clog -0x1.234566p-40 -1.0
clog 0x1.234566p-50 1.0
clog 0x1.234566p-60 1.0
clog 0x1p-62 1.0
clog 0x1p-63 1.0
clog 0x1p-64 1.0
clog 0x1p-510 1.0
clog 0x1p-511 1.0
clog 0x1p-512 1.0
clog 0x1p-8190 1.0
clog 0x1p-8191 1.0
clog 0x1p-8192 1.0
clog 0x1.000566p0 0x1.234p-10
clog 0x1.000566p0 0x1.234p-100
clog -0x1.0000000123456p0 0x1.2345678p-30
clog -0x1.0000000123456p0 0x1.2345678p-1000
clog 0x1.00000000000000123456789abcp0 0x1.23456789p-60
clog 0x1.00000000000000123456789abcp0 0x1.23456789p-1000
clog 0x0.ffffffp0 0x0.ffffffp-100
clog 0x0.fffffffffffff8p0 0x0.fffffffffffff8p-1000
clog 0x0.ffffffffffffffffp0 0x0.ffffffffffffffffp-15000
clog 0x1a6p-10 0x3a5p-10
clog 0xf2p-10 0x3e3p-10
clog 0x4d4ep-15 0x6605p-15
clog 0x2818p-15 0x798fp-15
clog 0x9b57bp-20 0xcb7b4p-20
clog 0x2731p-20 0xfffd0p-20
clog 0x2ede88p-23 0x771c3fp-23
clog 0x11682p-23 0x7ffed1p-23
clog 0xa1f2c1p-24 0xc643aep-24
clog 0x659feap-24 0xeaf6f9p-24
clog 0x4447d7175p-35 0x6c445e00ap-35
clog 0x2dd46725bp-35 0x7783a1284p-35
clog 0x164c74eea876p-45 0x16f393482f77p-45
clog 0xfe961079616p-45 0x1bc37e09e6d1p-45
clog 0xa4722f19346cp-51 0x7f9631c5e7f07p-51
clog 0x10673dd0f2481p-51 0x7ef1d17cefbd2p-51
clog 0x8ecbf810c4ae6p-52 0xd479468b09a37p-52
clog 0x5b06b680ea2ccp-52 0xef452b965da9fp-52
clog 0x659b70ab7971bp-53 0x1f5d111e08abecp-53
clog 0x15cfbd1990d1ffp-53 0x176a3973e09a9ap-53
clog 0x1367a310575591p-54 0x3cfcc0a0541f60p-54
clog 0x55cb6d0c83af5p-55 0x7fe33c0c7c4e90p-55
clog 0x298c62cb546588a7p-63 0x7911b1dfcc4ecdaep-63
clog 0x4d9c37e2b5cb4533p-63 0x65c98be2385a042ep-63
clog 0x602fd5037c4792efp-64 0xed3e2086dcca80b8p-64
clog 0x6b10b4f3520217b6p-64 0xe8893cbb449253a1p-64
clog 0x81b7efa81fc35ad1p-65 0x1ef4b835f1c79d812p-65
clog 0x3f96469050f650869c2p-75 0x6f16b2c9c8b05988335p-75
clog 0x3157fc1d73233e580c8p-75 0x761b52ccd435d7c7f5fp-75
clog 0x155f8afc4c48685bf63610p-85 0x17d0cf2652cdbeb1294e19p-85
clog 0x13836d58a13448d750b4b9p-85 0x195ca7bc3ab4f9161edbe6p-85
clog 0x1df515eb171a808b9e400266p-95 0x7c71eb0cd4688dfe98581c77p-95
clog 0xe33f66c9542ca25cc43c867p-95 0x7f35a68ebd3704a43c465864p-95
clog 0x6771f22c64ed551b857c128b4cp-105 0x1f570e7a13cc3cf2f44fd793ea1p-105
clog 0x15d8ab6ed05ca514086ac3a1e84p-105 0x1761e480aa094c0b10b34b09ce9p-105
clog 0x187190c1a334497bdbde5a95f48p-106 0x3b25f08062d0a095c4cfbbc338dp-106
clog 0x6241ef0da53f539f02fad67dabp-106 0x3fb46641182f7efd9caa769dac0p-106
clog 0x3e1d0a105ac4ebeacd9c6952d34cp-112 0xf859b3d1b06d005dcbb5516d5479p-112
clog 0x47017a2e36807acb1e5214b209dep-112 0xf5f4a550c9d75e3bb1839d865f0dp-112
clog 0x148f818cb7a9258fca942ade2a0cap-113 0x18854a34780b8333ec53310ad7001p-113
clog 0xfd95243681c055c2632286921092p-113 0x1bccabcd29ca2152860ec29e34ef7p-113
clog 0xdb85c467ee2aadd5f425fe0f4b8dp-114 0x3e83162a0f95f1dcbf97dddf410eap-114
clog 0x1415bcaf2105940d49a636e98ae59p-115 0x7e6a150adfcd1b0921d44b31f40f4p-115
clog10 0.75 1.25
clog10 -2 -3
clog10 0x2.f2f308p+0 0x4.c3841p-4
clog10 0xd.3de7ap-36 -0xe.cf143p-40
clog10 0x2.21e65p+0 0x5.576cf8p-4
clog10 0x1.f4755cp+0 -0x4.29411p-4
clog10 -0xf.9c4c8p-4 -0xa.b4101p+20
clog10 0x7.40ac68p+0 0x4.251bb8p-4
clog10 0xa.3ac3cp+68 0x1.47239ep+68
clog10 0x3.8ff10cp+0 -0x6.b0794p-4
clog10 0x2.83f8ap+0 -0xb.0b529p-4
clog10 -0x2.eb21fcp-4 -0x6.59bbc8p-4
clog10 -0x3.3f7fc4p-4 0xb.ba599p-4
clog10 0x1.cd1ab2p-124 -0x8p-152
clog10 0xa.32054p-4 0x2.c7e71cp-4
clog10 -0x5.9ecf8c7b5a0f4p-4 0xa.a945e5f8761c8p-4
clog10 0x1.7a858p+0 -0x6.d940dp-4
clog10 -0x2.51320d99da5a2p-4 0x3.b8176p-4
clog10 -0x1.25c2d3e172df8p+0 0
clog10 0x1.0c684e35d0b2ap+0 -0x7.37df8a65c28fp-4
clog10 -0x9.93d164127d9fp-4 0x7.c5c8d8p-4
clog10 -0xa.5920ap-4 -0x6.2cda5p-4
clog10 0xd.d05c38ebb1b4p+60 -0x3.c22fdp+44
clog10 -0xa.19f8ec252c58d5p-4 0x7.d10cdec29a141538p-4
clog10 -0xa.7ac41a0b417cb8fp-4 -0x6.c5a32eaeedd4p-4
clog10 0x3.c16p-136 0x8p-152
clog10 -0x1.0a69de710590dp+0 -0x7.bc7e121e2b0d1088p-4
clog10 0x1.fffffep+127 0x1.fffffep+127
clog10 0x1.fffffep+127 1.0
clog10 0x1p-149 0x1p-149
clog10 0x1p-147 0x1p-147
clog10 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023
clog10 0x1.fffffffffffffp+1023 0x1p+1023
clog10 0x1p-1074 0x1p-1074
clog10 0x1p-1073 0x1p-1073
clog10 0x1.fp+16383 0x1.fp+16383
clog10 0x1.fp+16383 0x1p+16383
clog10 0x1p-16440 0x1p-16441
clog10 0x1p-149 0x1.fp+127
clog10 -0x1p-149 0x1.fp+127
clog10 0x1p-149 -0x1.fp+127
clog10 -0x1p-149 -0x1.fp+127
clog10 -0x1.fp+127 0x1p-149
clog10 -0x1.fp+127 -0x1p-149
clog10 0x1.fp+127 0x1p-149
clog10 0x1.fp+127 -0x1p-149
clog10 0x1p-1074 0x1.fp+1023
clog10 -0x1p-1074 0x1.fp+1023
clog10 0x1p-1074 -0x1.fp+1023
clog10 -0x1p-1074 -0x1.fp+1023
clog10 -0x1.fp+1023 0x1p-1074
clog10 -0x1.fp+1023 -0x1p-1074
clog10 0x1.fp+1023 0x1p-1074
clog10 0x1.fp+1023 -0x1p-1074
clog10 0x1p-16445 0x1.fp+16383
clog10 -0x1p-16445 0x1.fp+16383
clog10 0x1p-16445 -0x1.fp+16383
clog10 -0x1p-16445 -0x1.fp+16383
clog10 -0x1.fp+16383 0x1p-16445
clog10 -0x1.fp+16383 -0x1p-16445
clog10 0x1.fp+16383 0x1p-16445
clog10 0x1.fp+16383 -0x1p-16445
clog10 0x1p-16494 0x1.fp+16383
clog10 -0x1p-16494 0x1.fp+16383
clog10 0x1p-16494 -0x1.fp+16383
clog10 -0x1p-16494 -0x1.fp+16383
clog10 -0x1.fp+16383 0x1p-16494
clog10 -0x1.fp+16383 -0x1p-16494
clog10 0x1.fp+16383 0x1p-16494
clog10 0x1.fp+16383 -0x1p-16494
clog10 1.0 0x1.234566p-10
clog10 -1.0 0x1.234566p-20
clog10 0x1.234566p-30 1.0
clog10 -0x1.234566p-40 -1.0
clog10 0x1.234566p-50 1.0
clog10 0x1.234566p-60 1.0
clog10 0x1p-61 1.0
clog10 0x1p-62 1.0
clog10 0x1p-63 1.0
clog10 0x1p-509 1.0
clog10 0x1p-510 1.0
clog10 0x1p-511 1.0
clog10 0x1p-8189 1.0
clog10 0x1p-8190 1.0
clog10 0x1p-8191 1.0
clog10 0x1.000566p0 0x1.234p-10
clog10 0x1.000566p0 0x1.234p-100
clog10 -0x1.0000000123456p0 0x1.2345678p-30
clog10 -0x1.0000000123456p0 0x1.2345678p-1000
clog10 0x1.00000000000000123456789abcp0 0x1.23456789p-60
clog10 0x1.00000000000000123456789abcp0 0x1.23456789p-1000
clog10 0x0.ffffffp0 0x0.ffffffp-100
clog10 0x0.fffffffffffff8p0 0x0.fffffffffffff8p-1000
clog10 0x0.ffffffffffffffffp0 0x0.ffffffffffffffffp-15000
clog10 0x1a6p-10 0x3a5p-10
clog10 0xf2p-10 0x3e3p-10
clog10 0x4d4ep-15 0x6605p-15
clog10 0x2818p-15 0x798fp-15
clog10 0x9b57bp-20 0xcb7b4p-20
clog10 0x2731p-20 0xfffd0p-20
clog10 0x2ede88p-23 0x771c3fp-23
clog10 0x11682p-23 0x7ffed1p-23
clog10 0xa1f2c1p-24 0xc643aep-24
clog10 0x659feap-24 0xeaf6f9p-24
clog10 0x4447d7175p-35 0x6c445e00ap-35
clog10 0x2dd46725bp-35 0x7783a1284p-35
clog10 0x164c74eea876p-45 0x16f393482f77p-45
clog10 0xfe961079616p-45 0x1bc37e09e6d1p-45
clog10 0xa4722f19346cp-51 0x7f9631c5e7f07p-51
clog10 0x10673dd0f2481p-51 0x7ef1d17cefbd2p-51
clog10 0x8ecbf810c4ae6p-52 0xd479468b09a37p-52
clog10 0x5b06b680ea2ccp-52 0xef452b965da9fp-52
clog10 0x659b70ab7971bp-53 0x1f5d111e08abecp-53
clog10 0x15cfbd1990d1ffp-53 0x176a3973e09a9ap-53
clog10 0x1367a310575591p-54 0x3cfcc0a0541f60p-54
clog10 0x55cb6d0c83af5p-55 0x7fe33c0c7c4e90p-55
clog10 0x298c62cb546588a7p-63 0x7911b1dfcc4ecdaep-63
clog10 0x4d9c37e2b5cb4533p-63 0x65c98be2385a042ep-63
clog10 0x602fd5037c4792efp-64 0xed3e2086dcca80b8p-64
clog10 0x6b10b4f3520217b6p-64 0xe8893cbb449253a1p-64
clog10 0x81b7efa81fc35ad1p-65 0x1ef4b835f1c79d812p-65
clog10 0x3f96469050f650869c2p-75 0x6f16b2c9c8b05988335p-75
clog10 0x3157fc1d73233e580c8p-75 0x761b52ccd435d7c7f5fp-75
clog10 0x155f8afc4c48685bf63610p-85 0x17d0cf2652cdbeb1294e19p-85
clog10 0x13836d58a13448d750b4b9p-85 0x195ca7bc3ab4f9161edbe6p-85
clog10 0x1df515eb171a808b9e400266p-95 0x7c71eb0cd4688dfe98581c77p-95
clog10 0xe33f66c9542ca25cc43c867p-95 0x7f35a68ebd3704a43c465864p-95
clog10 0x6771f22c64ed551b857c128b4cp-105 0x1f570e7a13cc3cf2f44fd793ea1p-105
clog10 0x15d8ab6ed05ca514086ac3a1e84p-105 0x1761e480aa094c0b10b34b09ce9p-105
clog10 0x187190c1a334497bdbde5a95f48p-106 0x3b25f08062d0a095c4cfbbc338dp-106
clog10 0x6241ef0da53f539f02fad67dabp-106 0x3fb46641182f7efd9caa769dac0p-106
clog10 0x3e1d0a105ac4ebeacd9c6952d34cp-112 0xf859b3d1b06d005dcbb5516d5479p-112
clog10 0x47017a2e36807acb1e5214b209dep-112 0xf5f4a550c9d75e3bb1839d865f0dp-112
clog10 0x148f818cb7a9258fca942ade2a0cap-113 0x18854a34780b8333ec53310ad7001p-113
clog10 0xfd95243681c055c2632286921092p-113 0x1bccabcd29ca2152860ec29e34ef7p-113
clog10 0xdb85c467ee2aadd5f425fe0f4b8dp-114 0x3e83162a0f95f1dcbf97dddf410eap-114
clog10 0x1415bcaf2105940d49a636e98ae59p-115 0x7e6a150adfcd1b0921d44b31f40f4p-115
cos 0
cos -0
cos pi/3
cos 2pi/3
cos pi/2
cos 0.75
cos 0x1p65
cos -0x1p65
cos 0.80190127184058835
cos 0x1.442f74p+15
cos 1e22
cos 0x1p1023
cos 0x1p16383
cos 0x1p+120
cos 0x1p+127
cos 0x1.fffff8p+127
cos 0x1.fffffep+127
cos 0x1p+50
cos 0x1p+28
cos 0x1.000000cf4a2a2p0
cos 0x1.0000010b239a9p0
cos 0x1.00000162a932bp0
cos 0x1.000002d452a10p0
cos 0x1.000005bc7d86dp0
cos 0x1.200145a975ce6p32
cos 1
cos 2
cos 3
cos 4
cos 5
cos 6
cos 7
cos 8
cos 9
cos 10
cos max
cos -max
cos min
cos -min
cos min_subnorm
cos -min_subnorm
cos -0x3.3de320f6be87ep+1020
cos 0xe.9f1e5bc3bb88p+112
cos 0x4.7857dp+68
cos -0x1.02e34cp+0
cos 0xf.f0274p+4
cos 0x3.042d88p+0
cosh 0
cosh -0
cosh 0.75
cosh 709.8893558127259666434838436543941497802734375
cosh -709.8893558127259666434838436543941497802734375
cosh 22
cosh 23
cosh 24
cosh 0x1p-5
cosh 0x1p-20
cosh -1
cosh 50
cosh -0xb.60713p+0
cosh -0x3.cee48p+0
cosh 0x2.f5d128p+0
cosh -0xd.0c03p+0
cosh -0x3.d04328728b72cp-4
cosh 0x1.629188p+4
# GCC bug 59666: results on directed rounding may be incorrect.
cosh max no-test-inline xfail-rounding:ldbl-128ibm
cosh -max no-test-inline xfail-rounding:ldbl-128ibm
Fix cosh spurious underflows from expm1 (bug 16354), inaccurate results near 0 (bug 17061). This patch fixes bug 16354, spurious underflows from cosh when a tiny argument is passed to expm1 and expm1 correctly underflows although the final result of cosh should be 1. As noted in that bug, some cases are latent because of expm1 implementations not raising underflow (bug 16353), but all the implementations are fixed similarly. They already contained checks for tiny arguments, but the checks were too late to avoid underflow from expm1 (although they would avoid underflow from subsequent squaring of the result of expm1); they are moved before the expm1 calls. The thresholds used for considering arguments tiny are not particularly consistent in how they relate to the precision of the floating-point format in question. They are, however, all sufficient to ensure that the round-to-nearest result of cosh is indeed 1 below the threshold (although sometimes they are smaller than necessary). But the previous logic did not return 1, but the previously computed 1 + expm1(abs(x)) value. And the thresholds in the ldbl-128 and ldbl-128ibm code (0x1p-71L - I suspect 0x3f8b was intended in the code instead of 0x3fb8 - and (roughly) 0x1p-55L) are not sufficient for that value to be 1. So by moving the test for tiny arguments, and consequently returning 1 directly now the expm1 value hasn't been computed by that point, this patch also fixes bug 17061, the (large number of ulps) inaccuracy for small arguments in those implementations. Tests for that bug are duly added. Tested x86_64 and x86 and ulps updated accordingly. Also tested for mips64 and powerpc32 to validate the ldbl-128 and ldbl-128ibm changes. [BZ #16354] [BZ #17061] * sysdeps/ieee754/dbl-64/e_cosh.c (__ieee754_cosh): Check for small arguments before calling __expm1. * sysdeps/ieee754/flt-32/e_coshf.c (__ieee754_coshf): Check for small arguments before calling __expm1f. * sysdeps/ieee754/ldbl-128/e_coshl.c (__ieee754_coshl): Check for small arguments before calling __expm1l. * sysdeps/ieee754/ldbl-128ibm/e_coshl.c (__ieee754_coshl): Likewise. * sysdeps/ieee754/ldbl-96/e_coshl.c (__ieee754_coshl): Likewise. * math/auto-libm-test-in: Add more cosh tests. Do not allow spurious underflow for some cosh tests. * math/auto-libm-test-out: Regenerated. * sysdeps/i386/fpu/libm-test-ulps: Update.
2014-06-24 04:20:10 +08:00
cosh min
cosh -min
cosh min_subnorm
cosh -min_subnorm
cosh 0x1p-56
cosh -0x1p-56
cosh 0x1p-72
cosh -0x1p-72
# Test values either side of overflow for each floating-point format.
cosh 0x5.96a7ep+4
cosh 0x5.96a7e8p+4
cosh -0x5.96a7ep+4
cosh -0x5.96a7e8p+4
# GCC bug 59666: results on directed rounding may be incorrect.
cosh 0x2.c679d1f73f0fap+8 xfail-rounding:ldbl-128ibm
cosh 0x2.c679d1f73f0fcp+8 xfail-rounding:ldbl-128ibm
cosh -0x2.c679d1f73f0fap+8 xfail-rounding:ldbl-128ibm
cosh -0x2.c679d1f73f0fcp+8 xfail-rounding:ldbl-128ibm
cosh 0x2.c679d1f73f0fb624d358b213a7p+8 xfail-rounding:ldbl-128ibm
cosh 0x2.c679d1f73f0fb624d358b213a8p+8 xfail-rounding:ldbl-128ibm
cosh -0x2.c679d1f73f0fb624d358b213a7p+8 xfail-rounding:ldbl-128ibm
cosh -0x2.c679d1f73f0fb624d358b213a8p+8 xfail-rounding:ldbl-128ibm
cosh 0x2.c5d37700c6bb03a4p+12 no-test-inline xfail-rounding:ldbl-128ibm
cosh 0x2.c5d37700c6bb03a8p+12 no-test-inline xfail-rounding:ldbl-128ibm
cosh -0x2.c5d37700c6bb03a4p+12 no-test-inline xfail-rounding:ldbl-128ibm
cosh -0x2.c5d37700c6bb03a8p+12 no-test-inline xfail-rounding:ldbl-128ibm
cosh 0x2.c5d37700c6bb03a6c24b6c9b494cp+12 no-test-inline xfail-rounding:ldbl-128ibm
cosh 0x2.c5d37700c6bb03a6c24b6c9b494ep+12 no-test-inline xfail-rounding:ldbl-128ibm
cosh -0x2.c5d37700c6bb03a6c24b6c9b494cp+12 no-test-inline xfail-rounding:ldbl-128ibm
cosh -0x2.c5d37700c6bb03a6c24b6c9b494ep+12 no-test-inline xfail-rounding:ldbl-128ibm
Test cpow in all rounding modes. This patch enables testing of cpow in all rounding modes using ALL_RM_TEST. There were two reasons this was previously deferred: * MPC has complicated rounding-mode-dependent rules for the signs of exact zero real or imaginary parts in the result of mpc_pow. Annex G does not impose any such requirements and I don't think glibc should try to implement any particular logic here. This patch adds support for gen-auto-libm-tests passing the IGNORE_ZERO_INF_SIGN flag to libm-test.inc. * Error accumulations in some tests in non-default rounding modes exceed the maximum error permitted in libm-test.inc. This patch marks the problem tests with xfail-rounding. (It might be possible to reduce the accumulations a bit by using round-to-nearest when cpow calls clog, but I don't think there's much point; the implementation approach for cpow is fundamentally deficient, as discussed in the existing bug for cpow inaccuracy which can reasonably be considered to cover these less-inaccurate cases as well. It's possible that the test "cpow 2 0 10 0" will also need xfail-rounding on some platforms.) Tested x86_64 and x86 and ulps updated accordingly. * math/gen-auto-libm-tests.c: Document use of ignore-zero-inf-sign. (input_flag_type): Add value flag_ignore_zero_inf_sign. (input_flags): Add ignore-zero-inf-sign. (output_for_one_input_case): Handle flag_ignore_zero_inf_sign. * math/gen-libm-test.pl (generate_testfile): Handle ignore-zero-inf-sign. * math/auto-libm-test-in: Mark some cpow tests with ignore-zero-inf-sign and some with xfail-rounding. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (cpow_test): Use ALL_RM_TEST. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-06-24 04:15:14 +08:00
cpow 1 0 0 0 ignore-zero-inf-sign
cpow 2 0 10 0 ignore-zero-inf-sign
# Bug 14473: cpow results inaccurate.
cpow e 0 0 2pi xfail
Test cpow in all rounding modes. This patch enables testing of cpow in all rounding modes using ALL_RM_TEST. There were two reasons this was previously deferred: * MPC has complicated rounding-mode-dependent rules for the signs of exact zero real or imaginary parts in the result of mpc_pow. Annex G does not impose any such requirements and I don't think glibc should try to implement any particular logic here. This patch adds support for gen-auto-libm-tests passing the IGNORE_ZERO_INF_SIGN flag to libm-test.inc. * Error accumulations in some tests in non-default rounding modes exceed the maximum error permitted in libm-test.inc. This patch marks the problem tests with xfail-rounding. (It might be possible to reduce the accumulations a bit by using round-to-nearest when cpow calls clog, but I don't think there's much point; the implementation approach for cpow is fundamentally deficient, as discussed in the existing bug for cpow inaccuracy which can reasonably be considered to cover these less-inaccurate cases as well. It's possible that the test "cpow 2 0 10 0" will also need xfail-rounding on some platforms.) Tested x86_64 and x86 and ulps updated accordingly. * math/gen-auto-libm-tests.c: Document use of ignore-zero-inf-sign. (input_flag_type): Add value flag_ignore_zero_inf_sign. (input_flags): Add ignore-zero-inf-sign. (output_for_one_input_case): Handle flag_ignore_zero_inf_sign. * math/gen-libm-test.pl (generate_testfile): Handle ignore-zero-inf-sign. * math/auto-libm-test-in: Mark some cpow tests with ignore-zero-inf-sign and some with xfail-rounding. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (cpow_test): Use ALL_RM_TEST. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-06-24 04:15:14 +08:00
cpow 2 3 4 0 xfail-rounding
Test cpow in all rounding modes. This patch enables testing of cpow in all rounding modes using ALL_RM_TEST. There were two reasons this was previously deferred: * MPC has complicated rounding-mode-dependent rules for the signs of exact zero real or imaginary parts in the result of mpc_pow. Annex G does not impose any such requirements and I don't think glibc should try to implement any particular logic here. This patch adds support for gen-auto-libm-tests passing the IGNORE_ZERO_INF_SIGN flag to libm-test.inc. * Error accumulations in some tests in non-default rounding modes exceed the maximum error permitted in libm-test.inc. This patch marks the problem tests with xfail-rounding. (It might be possible to reduce the accumulations a bit by using round-to-nearest when cpow calls clog, but I don't think there's much point; the implementation approach for cpow is fundamentally deficient, as discussed in the existing bug for cpow inaccuracy which can reasonably be considered to cover these less-inaccurate cases as well. It's possible that the test "cpow 2 0 10 0" will also need xfail-rounding on some platforms.) Tested x86_64 and x86 and ulps updated accordingly. * math/gen-auto-libm-tests.c: Document use of ignore-zero-inf-sign. (input_flag_type): Add value flag_ignore_zero_inf_sign. (input_flags): Add ignore-zero-inf-sign. (output_for_one_input_case): Handle flag_ignore_zero_inf_sign. * math/gen-libm-test.pl (generate_testfile): Handle ignore-zero-inf-sign. * math/auto-libm-test-in: Mark some cpow tests with ignore-zero-inf-sign and some with xfail-rounding. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (cpow_test): Use ALL_RM_TEST. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-06-24 04:15:14 +08:00
cpow 0.75 1.25 0.75 1.25 xfail-rounding
cpow 0.75 1.25 1.0 1.0 xfail-rounding
cpow 0.75 1.25 1.0 0.0
cpow 0.75 1.25 0.0 1.0
csin 0.0 0.0
csin -0 0.0
csin 0.0 -0
csin -0 -0
csin 0.75 1.25
csin -2 -3
csin 0.75 89.5
csin 0.75 -89.5
csin -0.75 89.5
csin -0.75 -89.5
csin 0.75 710.5
csin 0.75 -710.5
csin -0.75 710.5
csin -0.75 -710.5
csin 0.75 11357.25
csin 0.75 -11357.25
csin -0.75 11357.25
csin -0.75 -11357.25
csin 0.75 1e6
csin 0.75 -1e6
csin -0.75 1e6
csin -0.75 -1e6
csin 0x1p-149 180
csin 0x1p-1074 1440
csin 0x1p-16434 22730
Fix cexp, ccos, ccosh, csin, csinh spurious underflows (bug 18594). cexp, ccos, ccosh, csin and csinh have spurious underflows in cases where they compute sin of the smallest normal, that produces an underflow exception (depending on which sin implementation is in use) but the final result does not underflow. ctan and ctanh may also have such underflows, or they may be latent (the issue there is that e.g. ctan (DBL_MIN) should, rounded upwards, be the next double value above DBL_MIN, which under glibc's accuracy goals may not have an underflow exception, but the intermediate computation of sin (DBL_MIN) would legitimately underflow on before-rounding architectures). This patch fixes all those functions so they use plain comparisons (> DBL_MIN etc.) instead of comparing the result of fpclassify with FP_SUBNORMAL (in all these cases, we already know the number being compared is finite). Note that in the case of csin / csinf / csinl, there is no need for fabs calls in the comparison because the real part has already been reduced to its absolute value. As the patch fixes the failures that previously obstructed moving tests of cexp to use ALL_RM_TEST, those tests are moved to ALL_RM_TEST by the patch (two functions remain yet to be converted). Tested for x86_64 and x86 and ulps updated accordingly. [BZ #18594] * math/s_ccosh.c (__ccosh): Compare with least normal value instead of comparing class with FP_SUBNORMAL. * math/s_ccoshf.c (__ccoshf): Likewise. * math/s_ccoshl.c (__ccoshl): Likewise. * math/s_cexp.c (__cexp): Likewise. * math/s_cexpf.c (__cexpf): Likewise. * math/s_cexpl.c (__cexpl): Likewise. * math/s_csin.c (__csin): Likewise. * math/s_csinf.c (__csinf): Likewise. * math/s_csinh.c (__csinh): Likewise. * math/s_csinhf.c (__csinhf): Likewise. * math/s_csinhl.c (__csinhl): Likewise. * math/s_csinl.c (__csinl): Likewise. * math/s_ctan.c (__ctan): Likewise. * math/s_ctanf.c (__ctanf): Likewise. * math/s_ctanh.c (__ctanh): Likewise. * math/s_ctanhf.c (__ctanhf): Likewise. * math/s_ctanhl.c (__ctanhl): Likewise. * math/s_ctanl.c (__ctanl): Likewise. * math/auto-libm-test-in: Add more tests of ccos, ccosh, cexp, csin, csinh, ctan and ctanh. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (cexp_test): Use ALL_RM_TEST. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2015-06-25 05:04:51 +08:00
csin min 1
csin -min 1
csin min_subnorm 80
csin -min_subnorm 80
csinh 0.0 0.0
csinh -0 0.0
csinh 0.0 -0
csinh -0 -0
csinh 0.75 1.25
csinh -2 -3
csinh 89.5 0.75
csinh -89.5 0.75
csinh 89.5 -0.75
csinh -89.5 -0.75
csinh 710.5 0.75
csinh -710.5 0.75
csinh 710.5 -0.75
csinh -710.5 -0.75
csinh 11357.25 0.75
csinh -11357.25 0.75
csinh 11357.25 -0.75
csinh -11357.25 -0.75
csinh 1e6 0.75
csinh -1e6 0.75
csinh 1e6 -0.75
csinh -1e6 -0.75
csinh 180 0x1p-149
csinh 1440 0x1p-1074
csinh 22730 0x1p-16434
Fix cexp, ccos, ccosh, csin, csinh spurious underflows (bug 18594). cexp, ccos, ccosh, csin and csinh have spurious underflows in cases where they compute sin of the smallest normal, that produces an underflow exception (depending on which sin implementation is in use) but the final result does not underflow. ctan and ctanh may also have such underflows, or they may be latent (the issue there is that e.g. ctan (DBL_MIN) should, rounded upwards, be the next double value above DBL_MIN, which under glibc's accuracy goals may not have an underflow exception, but the intermediate computation of sin (DBL_MIN) would legitimately underflow on before-rounding architectures). This patch fixes all those functions so they use plain comparisons (> DBL_MIN etc.) instead of comparing the result of fpclassify with FP_SUBNORMAL (in all these cases, we already know the number being compared is finite). Note that in the case of csin / csinf / csinl, there is no need for fabs calls in the comparison because the real part has already been reduced to its absolute value. As the patch fixes the failures that previously obstructed moving tests of cexp to use ALL_RM_TEST, those tests are moved to ALL_RM_TEST by the patch (two functions remain yet to be converted). Tested for x86_64 and x86 and ulps updated accordingly. [BZ #18594] * math/s_ccosh.c (__ccosh): Compare with least normal value instead of comparing class with FP_SUBNORMAL. * math/s_ccoshf.c (__ccoshf): Likewise. * math/s_ccoshl.c (__ccoshl): Likewise. * math/s_cexp.c (__cexp): Likewise. * math/s_cexpf.c (__cexpf): Likewise. * math/s_cexpl.c (__cexpl): Likewise. * math/s_csin.c (__csin): Likewise. * math/s_csinf.c (__csinf): Likewise. * math/s_csinh.c (__csinh): Likewise. * math/s_csinhf.c (__csinhf): Likewise. * math/s_csinhl.c (__csinhl): Likewise. * math/s_csinl.c (__csinl): Likewise. * math/s_ctan.c (__ctan): Likewise. * math/s_ctanf.c (__ctanf): Likewise. * math/s_ctanh.c (__ctanh): Likewise. * math/s_ctanhf.c (__ctanhf): Likewise. * math/s_ctanhl.c (__ctanhl): Likewise. * math/s_ctanl.c (__ctanl): Likewise. * math/auto-libm-test-in: Add more tests of ccos, ccosh, cexp, csin, csinh, ctan and ctanh. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (cexp_test): Use ALL_RM_TEST. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2015-06-25 05:04:51 +08:00
csinh 1 min
csinh 1 -min
csinh 80 min_subnorm
csinh 80 -min_subnorm
Move various TEST_c_c tests from libm-test.inc to auto-libm-test-inc. This patch moves tests of ccos, ccosh, cexp, clog, csqrt, ctan and ctanh to auto-libm-test-in, adding the required support to gen-auto-libm-tests. Other TEST_c_c functions aren't moved for now (although the relevant table entries are put in gen-auto-libm-tests for it to know how to handle them): clog10 because of a known MPC bug causing it to hang for at least some pure imaginary inputs (fixed in SVN, but I'd rather not rely on unreleased versions of MPFR or MPC even if relying on very recent releases); the inverse trig and hyperbolic functions because of known slowness in special cases; and csin / csinh because of observed slowness that I need to investigate and report to the MPC maintainers. Slowness can be bypassed by moving to incremental generation (only for new / changed tests) rather than regenerating the whole of auto-libm-test-out every time, but that needs implementing. (This patch takes the time for running gen-auto-libm-tests from about one second to seven, on my system, which I think is reasonable. The slow functions would make it take several minutes at least, which seems unreasonable.) Tested x86_64 and x86 and ulps updated accordingly. * math/auto-libm-test-in: Add tests of ccos, ccosh, cexp, clog, csqrt, ctan and ctanh. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (TEST_COND_x86_64): New macro. (TEST_COND_x86): Likewise. (ccos_test_data): Use AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (csqrt_test_data): Likewise. (ctan_test_data): Likewise. (ctan_tonearest_test_data): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_downward_test_data): Likewise. (ctan_upward_test_data): Likewise. (ctanh_test_data): Likewise. (ctanh_tonearest_test_data): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_upward_test_data): Likewise. * math/gen-auto-libm-tests.c (func_calc_method): Add value mpc_c_c. (func_calc_desc): Add mpc_c_c union field. (FUNC_mpc_c_c): New macro. (test_functions): Add cacos, cacosh, casin, casinh, catan, catanh, ccos, ccosh, cexp, clog, clog10, csin, csinh, csqrt, ctan and ctanh. (special_fill_min_subnorm_p120): New function. (special_real_inputs): Add min_subnorm_p120. (calc_generic_results): Handle mpc_c_c. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2013-12-20 20:32:44 +08:00
csqrt 0 0
csqrt 0 -0
csqrt -0 0
csqrt -0 -0
csqrt 16.0 -30.0
csqrt -1 0
csqrt 0 2
csqrt 119 120
csqrt 0.75 1.25
csqrt -2 -3
csqrt -2 3
# Principal square root should be returned (i.e., non-negative real part).
csqrt 0 -1
csqrt -0xe.6432ap-4 0xe.8175p-4
csqrt -0x4.d01448p-4 -0x7.c1915p+0
csqrt -0xd.e1d5fp-4 -0x1.054226p+4
csqrt 0x5.39e238p+0 -0x4.576278p-4
csqrt -0xe.735dbp+0 -0x5.26cb98p+40
csqrt -0x7.915fafbe9f588p-4 -0x2.5e01bcp+0
csqrt 0xe.229827fe17d08p-4 0xd.849ecp-4
csqrt -0x4.d0144005d7af4p-4 -0x7.c19148p+0
csqrt 0x8p-152 0x7.8p-148
csqrt -0x4.82773b736291p-4 -0x1.bcb7cep+0
csqrt 0xf.fffffp+124 0xe.7e0c2p+116
csqrt -0x4.15ca1p+0 -0x8p-152
csqrt 0xf.a24adp+28 0x8.0f148p+36
csqrt 0x1.f9610ap+4 0x9.87716p+4
csqrt 0x5.9cc21p-4 -0x1.fb1ec91b40dcdp+0
csqrt -0x7.31291c9fdae04p-160 -0x8p-152
csqrt 0x1.d60caep+0 0x7.a7d468p+0
csqrt -0xb.e2bc1cd6eaa7p-180 0x8p-152
csqrt 0xd.25d559ac5baap-168 0x8p-152
csqrt -0x9.0a61a7b482d28p-168 -0x8p-152
csqrt 0x3.f768f58949e3fe6cp-4 0x2.0c2e89a5cff98p+0
csqrt 0x6.b1a2e79e9c9acp-164 0x8p-152
csqrt -0x8.ec8932bf5603p-172 0x8p-152
csqrt -0x1.9edb24c83e22cp-172 -0x8p-152
csqrt -0x1.65c7ac7c97a25p-176 -0x8p-152
csqrt 0x1.0221e29d5a3cdp-188 -0x8p-152
csqrt -0x2.927275f6febb6p-184 0x8p-152
csqrt -0x8p-152 -0x2.c832ff5b163af0dcp-2444
csqrt -0x8p-152 -0x1.818bccp+0
Move various TEST_c_c tests from libm-test.inc to auto-libm-test-inc. This patch moves tests of ccos, ccosh, cexp, clog, csqrt, ctan and ctanh to auto-libm-test-in, adding the required support to gen-auto-libm-tests. Other TEST_c_c functions aren't moved for now (although the relevant table entries are put in gen-auto-libm-tests for it to know how to handle them): clog10 because of a known MPC bug causing it to hang for at least some pure imaginary inputs (fixed in SVN, but I'd rather not rely on unreleased versions of MPFR or MPC even if relying on very recent releases); the inverse trig and hyperbolic functions because of known slowness in special cases; and csin / csinh because of observed slowness that I need to investigate and report to the MPC maintainers. Slowness can be bypassed by moving to incremental generation (only for new / changed tests) rather than regenerating the whole of auto-libm-test-out every time, but that needs implementing. (This patch takes the time for running gen-auto-libm-tests from about one second to seven, on my system, which I think is reasonable. The slow functions would make it take several minutes at least, which seems unreasonable.) Tested x86_64 and x86 and ulps updated accordingly. * math/auto-libm-test-in: Add tests of ccos, ccosh, cexp, clog, csqrt, ctan and ctanh. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (TEST_COND_x86_64): New macro. (TEST_COND_x86): Likewise. (ccos_test_data): Use AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (csqrt_test_data): Likewise. (ctan_test_data): Likewise. (ctan_tonearest_test_data): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_downward_test_data): Likewise. (ctan_upward_test_data): Likewise. (ctanh_test_data): Likewise. (ctanh_tonearest_test_data): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_upward_test_data): Likewise. * math/gen-auto-libm-tests.c (func_calc_method): Add value mpc_c_c. (func_calc_desc): Add mpc_c_c union field. (FUNC_mpc_c_c): New macro. (test_functions): Add cacos, cacosh, casin, casinh, catan, catanh, ccos, ccosh, cexp, clog, clog10, csin, csinh, csqrt, ctan and ctanh. (special_fill_min_subnorm_p120): New function. (special_real_inputs): Add min_subnorm_p120. (calc_generic_results): Handle mpc_c_c. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2013-12-20 20:32:44 +08:00
csqrt 0x1.fffffep+127 0x1.fffffep+127
csqrt 0x1.fffffep+127 1.0
csqrt 0x1p-149 0x1p-149
csqrt 0x1p-147 0x1p-147
csqrt 0 0x1p-149
csqrt 0x1p-50 0x1p-149
csqrt 0x1p+127 0x1p-149
csqrt 0x1p-149 0x1p+127
csqrt 0x1.000002p-126 0x1.000002p-126
csqrt -0x1.000002p-126 -0x1.000002p-126
csqrt 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023
csqrt 0x1.fffffffffffffp+1023 0x1p+1023
csqrt 0x1p-1074 0x1p-1074
csqrt 0x1p-1073 0x1p-1073
csqrt 0 0x1p-1074
csqrt 0x1p-500 0x1p-1074
csqrt 0x1p+1023 0x1p-1074
csqrt 0x1p-1074 0x1p+1023
csqrt 0x1.0000000000001p-1022 0x1.0000000000001p-1022
csqrt -0x1.0000000000001p-1022 -0x1.0000000000001p-1022
csqrt 0x1.fp+16383 0x1.fp+16383
csqrt 0x1.fp+16383 0x1p+16383
csqrt 0x1p-16440 0x1p-16441
csqrt 0 0x1p-16445
csqrt 0x1p-5000 0x1p-16445
csqrt 0x1p+16383 0x1p-16445
csqrt 0x1p-16445 0x1p+16383
csqrt 0x1.0000000000000002p-16382 0x1.0000000000000002p-16382
csqrt -0x1.0000000000000002p-16382 -0x1.0000000000000002p-16382
csqrt 0 0x1p-16494
csqrt 0x1p-5000 0x1p-16494
csqrt 0x1p+16383 0x1p-16494
csqrt 0x1p-16494 0x1p+16383
csqrt 0x1.0000000000000000000000000001p-16382 0x1.0000000000000000000000000001p-16382
csqrt -0x1.0000000000000000000000000001p-16382 -0x1.0000000000000000000000000001p-16382
csqrt 0x0.ffp128 0x1.1p-61
csqrt -0x0.ffp128 0x1.1p-61
csqrt 0x0.ffp1024 0x1.1p-509
csqrt -0x0.ffp1024 0x1.1p-509
csqrt 0x0.ffp16384 0x1.1p-8189
csqrt -0x0.ffp16384 0x1.1p-8189
csqrt 0x1p-149 0x1.000002p-126
csqrt 0x1p-149 0x1.000004p-126
csqrt 0x1p-1074 0x1.0000000000001p-1022
csqrt 0x1p-1074 0x1.0000000000002p-1022
csqrt 0x1p-16445 0x1.0000000000000002p-16382
csqrt 0x1p-16445 0x1.0000000000000004p-16382
csqrt 0x1p-16494 0x1.0000000000000000000000000001p-16382
csqrt 0x1p-16494 0x1.0000000000000000000000000002p-16382
csqrt 1 min
csqrt 1 -min
csqrt -1 min
csqrt -1 -min
Move various TEST_c_c tests from libm-test.inc to auto-libm-test-inc. This patch moves tests of ccos, ccosh, cexp, clog, csqrt, ctan and ctanh to auto-libm-test-in, adding the required support to gen-auto-libm-tests. Other TEST_c_c functions aren't moved for now (although the relevant table entries are put in gen-auto-libm-tests for it to know how to handle them): clog10 because of a known MPC bug causing it to hang for at least some pure imaginary inputs (fixed in SVN, but I'd rather not rely on unreleased versions of MPFR or MPC even if relying on very recent releases); the inverse trig and hyperbolic functions because of known slowness in special cases; and csin / csinh because of observed slowness that I need to investigate and report to the MPC maintainers. Slowness can be bypassed by moving to incremental generation (only for new / changed tests) rather than regenerating the whole of auto-libm-test-out every time, but that needs implementing. (This patch takes the time for running gen-auto-libm-tests from about one second to seven, on my system, which I think is reasonable. The slow functions would make it take several minutes at least, which seems unreasonable.) Tested x86_64 and x86 and ulps updated accordingly. * math/auto-libm-test-in: Add tests of ccos, ccosh, cexp, clog, csqrt, ctan and ctanh. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (TEST_COND_x86_64): New macro. (TEST_COND_x86): Likewise. (ccos_test_data): Use AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (csqrt_test_data): Likewise. (ctan_test_data): Likewise. (ctan_tonearest_test_data): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_downward_test_data): Likewise. (ctan_upward_test_data): Likewise. (ctanh_test_data): Likewise. (ctanh_tonearest_test_data): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_upward_test_data): Likewise. * math/gen-auto-libm-tests.c (func_calc_method): Add value mpc_c_c. (func_calc_desc): Add mpc_c_c union field. (FUNC_mpc_c_c): New macro. (test_functions): Add cacos, cacosh, casin, casinh, catan, catanh, ccos, ccosh, cexp, clog, clog10, csin, csinh, csqrt, ctan and ctanh. (special_fill_min_subnorm_p120): New function. (special_real_inputs): Add min_subnorm_p120. (calc_generic_results): Handle mpc_c_c. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2013-12-20 20:32:44 +08:00
ctan 0 0
ctan 0 -0
ctan -0 0
ctan -0 -0
ctan 0.75 1.25
ctan -2 -3
ctan 1 45
ctan 1 47
ctan 1 355
ctan 1 365
# GCC bug 59666: results on directed rounding may be incorrect.
ctan 1 5680 xfail-rounding:ldbl-128ibm
ctan 1 5690 xfail-rounding:ldbl-128ibm
Move various TEST_c_c tests from libm-test.inc to auto-libm-test-inc. This patch moves tests of ccos, ccosh, cexp, clog, csqrt, ctan and ctanh to auto-libm-test-in, adding the required support to gen-auto-libm-tests. Other TEST_c_c functions aren't moved for now (although the relevant table entries are put in gen-auto-libm-tests for it to know how to handle them): clog10 because of a known MPC bug causing it to hang for at least some pure imaginary inputs (fixed in SVN, but I'd rather not rely on unreleased versions of MPFR or MPC even if relying on very recent releases); the inverse trig and hyperbolic functions because of known slowness in special cases; and csin / csinh because of observed slowness that I need to investigate and report to the MPC maintainers. Slowness can be bypassed by moving to incremental generation (only for new / changed tests) rather than regenerating the whole of auto-libm-test-out every time, but that needs implementing. (This patch takes the time for running gen-auto-libm-tests from about one second to seven, on my system, which I think is reasonable. The slow functions would make it take several minutes at least, which seems unreasonable.) Tested x86_64 and x86 and ulps updated accordingly. * math/auto-libm-test-in: Add tests of ccos, ccosh, cexp, clog, csqrt, ctan and ctanh. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (TEST_COND_x86_64): New macro. (TEST_COND_x86): Likewise. (ccos_test_data): Use AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (csqrt_test_data): Likewise. (ctan_test_data): Likewise. (ctan_tonearest_test_data): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_downward_test_data): Likewise. (ctan_upward_test_data): Likewise. (ctanh_test_data): Likewise. (ctanh_tonearest_test_data): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_upward_test_data): Likewise. * math/gen-auto-libm-tests.c (func_calc_method): Add value mpc_c_c. (func_calc_desc): Add mpc_c_c union field. (FUNC_mpc_c_c): New macro. (test_functions): Add cacos, cacosh, casin, casinh, catan, catanh, ccos, ccosh, cexp, clog, clog10, csin, csinh, csqrt, ctan and ctanh. (special_fill_min_subnorm_p120): New function. (special_real_inputs): Add min_subnorm_p120. (calc_generic_results): Handle mpc_c_c. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2013-12-20 20:32:44 +08:00
ctan 0x3.243f6cp-1 0
ctan 0x1p127 1
ctan 0x1p1023 1
ctan 0x1p16383 1
# GCC bug 59666: results on directed rounding may be incorrect.
ctan 50000 50000 xfail-rounding:ldbl-128ibm
ctan 50000 -50000 xfail-rounding:ldbl-128ibm
ctan -50000 50000 xfail-rounding:ldbl-128ibm
ctan -50000 -50000 xfail-rounding:ldbl-128ibm
Move various TEST_c_c tests from libm-test.inc to auto-libm-test-inc. This patch moves tests of ccos, ccosh, cexp, clog, csqrt, ctan and ctanh to auto-libm-test-in, adding the required support to gen-auto-libm-tests. Other TEST_c_c functions aren't moved for now (although the relevant table entries are put in gen-auto-libm-tests for it to know how to handle them): clog10 because of a known MPC bug causing it to hang for at least some pure imaginary inputs (fixed in SVN, but I'd rather not rely on unreleased versions of MPFR or MPC even if relying on very recent releases); the inverse trig and hyperbolic functions because of known slowness in special cases; and csin / csinh because of observed slowness that I need to investigate and report to the MPC maintainers. Slowness can be bypassed by moving to incremental generation (only for new / changed tests) rather than regenerating the whole of auto-libm-test-out every time, but that needs implementing. (This patch takes the time for running gen-auto-libm-tests from about one second to seven, on my system, which I think is reasonable. The slow functions would make it take several minutes at least, which seems unreasonable.) Tested x86_64 and x86 and ulps updated accordingly. * math/auto-libm-test-in: Add tests of ccos, ccosh, cexp, clog, csqrt, ctan and ctanh. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (TEST_COND_x86_64): New macro. (TEST_COND_x86): Likewise. (ccos_test_data): Use AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (csqrt_test_data): Likewise. (ctan_test_data): Likewise. (ctan_tonearest_test_data): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_downward_test_data): Likewise. (ctan_upward_test_data): Likewise. (ctanh_test_data): Likewise. (ctanh_tonearest_test_data): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_upward_test_data): Likewise. * math/gen-auto-libm-tests.c (func_calc_method): Add value mpc_c_c. (func_calc_desc): Add mpc_c_c union field. (FUNC_mpc_c_c): New macro. (test_functions): Add cacos, cacosh, casin, casinh, catan, catanh, ccos, ccosh, cexp, clog, clog10, csin, csinh, csqrt, ctan and ctanh. (special_fill_min_subnorm_p120): New function. (special_real_inputs): Add min_subnorm_p120. (calc_generic_results): Handle mpc_c_c. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2013-12-20 20:32:44 +08:00
ctan 0x1.921fb6p+0 0x1p-149
ctan 0x1.921fb54442d18p+0 0x1p-1074
ctan 0x1.921fb54442d1846ap+0 0x1p-16445
ctan min 0
ctan -min 0
ctan min_subnorm 0
ctan -min_subnorm 0
ctan 0 min
ctan 0 -min
ctan 0 min_subnorm
ctan 0 -min_subnorm
Fix cexp, ccos, ccosh, csin, csinh spurious underflows (bug 18594). cexp, ccos, ccosh, csin and csinh have spurious underflows in cases where they compute sin of the smallest normal, that produces an underflow exception (depending on which sin implementation is in use) but the final result does not underflow. ctan and ctanh may also have such underflows, or they may be latent (the issue there is that e.g. ctan (DBL_MIN) should, rounded upwards, be the next double value above DBL_MIN, which under glibc's accuracy goals may not have an underflow exception, but the intermediate computation of sin (DBL_MIN) would legitimately underflow on before-rounding architectures). This patch fixes all those functions so they use plain comparisons (> DBL_MIN etc.) instead of comparing the result of fpclassify with FP_SUBNORMAL (in all these cases, we already know the number being compared is finite). Note that in the case of csin / csinf / csinl, there is no need for fabs calls in the comparison because the real part has already been reduced to its absolute value. As the patch fixes the failures that previously obstructed moving tests of cexp to use ALL_RM_TEST, those tests are moved to ALL_RM_TEST by the patch (two functions remain yet to be converted). Tested for x86_64 and x86 and ulps updated accordingly. [BZ #18594] * math/s_ccosh.c (__ccosh): Compare with least normal value instead of comparing class with FP_SUBNORMAL. * math/s_ccoshf.c (__ccoshf): Likewise. * math/s_ccoshl.c (__ccoshl): Likewise. * math/s_cexp.c (__cexp): Likewise. * math/s_cexpf.c (__cexpf): Likewise. * math/s_cexpl.c (__cexpl): Likewise. * math/s_csin.c (__csin): Likewise. * math/s_csinf.c (__csinf): Likewise. * math/s_csinh.c (__csinh): Likewise. * math/s_csinhf.c (__csinhf): Likewise. * math/s_csinhl.c (__csinhl): Likewise. * math/s_csinl.c (__csinl): Likewise. * math/s_ctan.c (__ctan): Likewise. * math/s_ctanf.c (__ctanf): Likewise. * math/s_ctanh.c (__ctanh): Likewise. * math/s_ctanhf.c (__ctanhf): Likewise. * math/s_ctanhl.c (__ctanhl): Likewise. * math/s_ctanl.c (__ctanl): Likewise. * math/auto-libm-test-in: Add more tests of ccos, ccosh, cexp, csin, csinh, ctan and ctanh. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (cexp_test): Use ALL_RM_TEST. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2015-06-25 05:04:51 +08:00
Move various TEST_c_c tests from libm-test.inc to auto-libm-test-inc. This patch moves tests of ccos, ccosh, cexp, clog, csqrt, ctan and ctanh to auto-libm-test-in, adding the required support to gen-auto-libm-tests. Other TEST_c_c functions aren't moved for now (although the relevant table entries are put in gen-auto-libm-tests for it to know how to handle them): clog10 because of a known MPC bug causing it to hang for at least some pure imaginary inputs (fixed in SVN, but I'd rather not rely on unreleased versions of MPFR or MPC even if relying on very recent releases); the inverse trig and hyperbolic functions because of known slowness in special cases; and csin / csinh because of observed slowness that I need to investigate and report to the MPC maintainers. Slowness can be bypassed by moving to incremental generation (only for new / changed tests) rather than regenerating the whole of auto-libm-test-out every time, but that needs implementing. (This patch takes the time for running gen-auto-libm-tests from about one second to seven, on my system, which I think is reasonable. The slow functions would make it take several minutes at least, which seems unreasonable.) Tested x86_64 and x86 and ulps updated accordingly. * math/auto-libm-test-in: Add tests of ccos, ccosh, cexp, clog, csqrt, ctan and ctanh. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (TEST_COND_x86_64): New macro. (TEST_COND_x86): Likewise. (ccos_test_data): Use AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (csqrt_test_data): Likewise. (ctan_test_data): Likewise. (ctan_tonearest_test_data): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_downward_test_data): Likewise. (ctan_upward_test_data): Likewise. (ctanh_test_data): Likewise. (ctanh_tonearest_test_data): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_upward_test_data): Likewise. * math/gen-auto-libm-tests.c (func_calc_method): Add value mpc_c_c. (func_calc_desc): Add mpc_c_c union field. (FUNC_mpc_c_c): New macro. (test_functions): Add cacos, cacosh, casin, casinh, catan, catanh, ccos, ccosh, cexp, clog, clog10, csin, csinh, csqrt, ctan and ctanh. (special_fill_min_subnorm_p120): New function. (special_real_inputs): Add min_subnorm_p120. (calc_generic_results): Handle mpc_c_c. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2013-12-20 20:32:44 +08:00
ctanh 0 0
ctanh 0 -0
ctanh -0 0
ctanh -0 -0
ctanh 0 pi/4
ctanh 0.75 1.25
ctanh -2 -3
ctanh 45 1
ctanh 47 1
ctanh 355 1
ctanh 365 1
# GCC bug 59666: results on directed rounding may be incorrect.
ctanh 5680 1 xfail-rounding:ldbl-128ibm
ctanh 5690 1 xfail-rounding:ldbl-128ibm
Move various TEST_c_c tests from libm-test.inc to auto-libm-test-inc. This patch moves tests of ccos, ccosh, cexp, clog, csqrt, ctan and ctanh to auto-libm-test-in, adding the required support to gen-auto-libm-tests. Other TEST_c_c functions aren't moved for now (although the relevant table entries are put in gen-auto-libm-tests for it to know how to handle them): clog10 because of a known MPC bug causing it to hang for at least some pure imaginary inputs (fixed in SVN, but I'd rather not rely on unreleased versions of MPFR or MPC even if relying on very recent releases); the inverse trig and hyperbolic functions because of known slowness in special cases; and csin / csinh because of observed slowness that I need to investigate and report to the MPC maintainers. Slowness can be bypassed by moving to incremental generation (only for new / changed tests) rather than regenerating the whole of auto-libm-test-out every time, but that needs implementing. (This patch takes the time for running gen-auto-libm-tests from about one second to seven, on my system, which I think is reasonable. The slow functions would make it take several minutes at least, which seems unreasonable.) Tested x86_64 and x86 and ulps updated accordingly. * math/auto-libm-test-in: Add tests of ccos, ccosh, cexp, clog, csqrt, ctan and ctanh. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (TEST_COND_x86_64): New macro. (TEST_COND_x86): Likewise. (ccos_test_data): Use AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (csqrt_test_data): Likewise. (ctan_test_data): Likewise. (ctan_tonearest_test_data): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_downward_test_data): Likewise. (ctan_upward_test_data): Likewise. (ctanh_test_data): Likewise. (ctanh_tonearest_test_data): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_upward_test_data): Likewise. * math/gen-auto-libm-tests.c (func_calc_method): Add value mpc_c_c. (func_calc_desc): Add mpc_c_c union field. (FUNC_mpc_c_c): New macro. (test_functions): Add cacos, cacosh, casin, casinh, catan, catanh, ccos, ccosh, cexp, clog, clog10, csin, csinh, csqrt, ctan and ctanh. (special_fill_min_subnorm_p120): New function. (special_real_inputs): Add min_subnorm_p120. (calc_generic_results): Handle mpc_c_c. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2013-12-20 20:32:44 +08:00
ctanh 0 0x3.243f6cp-1
ctanh 1 0x1p127
ctanh 1 0x1p1023
ctanh 1 0x1p16383
# GCC bug 59666: results on directed rounding may be incorrect.
ctanh 50000 50000 xfail-rounding:ldbl-128ibm
ctanh 50000 -50000 xfail-rounding:ldbl-128ibm
ctanh -50000 50000 xfail-rounding:ldbl-128ibm
ctanh -50000 -50000 xfail-rounding:ldbl-128ibm
Move various TEST_c_c tests from libm-test.inc to auto-libm-test-inc. This patch moves tests of ccos, ccosh, cexp, clog, csqrt, ctan and ctanh to auto-libm-test-in, adding the required support to gen-auto-libm-tests. Other TEST_c_c functions aren't moved for now (although the relevant table entries are put in gen-auto-libm-tests for it to know how to handle them): clog10 because of a known MPC bug causing it to hang for at least some pure imaginary inputs (fixed in SVN, but I'd rather not rely on unreleased versions of MPFR or MPC even if relying on very recent releases); the inverse trig and hyperbolic functions because of known slowness in special cases; and csin / csinh because of observed slowness that I need to investigate and report to the MPC maintainers. Slowness can be bypassed by moving to incremental generation (only for new / changed tests) rather than regenerating the whole of auto-libm-test-out every time, but that needs implementing. (This patch takes the time for running gen-auto-libm-tests from about one second to seven, on my system, which I think is reasonable. The slow functions would make it take several minutes at least, which seems unreasonable.) Tested x86_64 and x86 and ulps updated accordingly. * math/auto-libm-test-in: Add tests of ccos, ccosh, cexp, clog, csqrt, ctan and ctanh. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (TEST_COND_x86_64): New macro. (TEST_COND_x86): Likewise. (ccos_test_data): Use AUTO_TESTS_c_c. (ccosh_test_data): Likewise. (cexp_test_data): Likewise. (clog_test_data): Likewise. (csqrt_test_data): Likewise. (ctan_test_data): Likewise. (ctan_tonearest_test_data): Likewise. (ctan_towardzero_test_data): Likewise. (ctan_downward_test_data): Likewise. (ctan_upward_test_data): Likewise. (ctanh_test_data): Likewise. (ctanh_tonearest_test_data): Likewise. (ctanh_towardzero_test_data): Likewise. (ctanh_downward_test_data): Likewise. (ctanh_upward_test_data): Likewise. * math/gen-auto-libm-tests.c (func_calc_method): Add value mpc_c_c. (func_calc_desc): Add mpc_c_c union field. (FUNC_mpc_c_c): New macro. (test_functions): Add cacos, cacosh, casin, casinh, catan, catanh, ccos, ccosh, cexp, clog, clog10, csin, csinh, csqrt, ctan and ctanh. (special_fill_min_subnorm_p120): New function. (special_real_inputs): Add min_subnorm_p120. (calc_generic_results): Handle mpc_c_c. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2013-12-20 20:32:44 +08:00
ctanh 0x1p-149 0x1.921fb6p+0
ctanh 0x1p-1074 0x1.921fb54442d18p+0
ctanh 0x1p-16445 0x1.921fb54442d1846ap+0
ctanh 0 min
ctanh 0 -min
ctanh 0 min_subnorm
ctanh 0 -min_subnorm
ctanh min 0
ctanh -min 0
ctanh min_subnorm 0
ctanh -min_subnorm 0
Fix cexp, ccos, ccosh, csin, csinh spurious underflows (bug 18594). cexp, ccos, ccosh, csin and csinh have spurious underflows in cases where they compute sin of the smallest normal, that produces an underflow exception (depending on which sin implementation is in use) but the final result does not underflow. ctan and ctanh may also have such underflows, or they may be latent (the issue there is that e.g. ctan (DBL_MIN) should, rounded upwards, be the next double value above DBL_MIN, which under glibc's accuracy goals may not have an underflow exception, but the intermediate computation of sin (DBL_MIN) would legitimately underflow on before-rounding architectures). This patch fixes all those functions so they use plain comparisons (> DBL_MIN etc.) instead of comparing the result of fpclassify with FP_SUBNORMAL (in all these cases, we already know the number being compared is finite). Note that in the case of csin / csinf / csinl, there is no need for fabs calls in the comparison because the real part has already been reduced to its absolute value. As the patch fixes the failures that previously obstructed moving tests of cexp to use ALL_RM_TEST, those tests are moved to ALL_RM_TEST by the patch (two functions remain yet to be converted). Tested for x86_64 and x86 and ulps updated accordingly. [BZ #18594] * math/s_ccosh.c (__ccosh): Compare with least normal value instead of comparing class with FP_SUBNORMAL. * math/s_ccoshf.c (__ccoshf): Likewise. * math/s_ccoshl.c (__ccoshl): Likewise. * math/s_cexp.c (__cexp): Likewise. * math/s_cexpf.c (__cexpf): Likewise. * math/s_cexpl.c (__cexpl): Likewise. * math/s_csin.c (__csin): Likewise. * math/s_csinf.c (__csinf): Likewise. * math/s_csinh.c (__csinh): Likewise. * math/s_csinhf.c (__csinhf): Likewise. * math/s_csinhl.c (__csinhl): Likewise. * math/s_csinl.c (__csinl): Likewise. * math/s_ctan.c (__ctan): Likewise. * math/s_ctanf.c (__ctanf): Likewise. * math/s_ctanh.c (__ctanh): Likewise. * math/s_ctanhf.c (__ctanhf): Likewise. * math/s_ctanhl.c (__ctanhl): Likewise. * math/s_ctanl.c (__ctanl): Likewise. * math/auto-libm-test-in: Add more tests of ccos, ccosh, cexp, csin, csinh, ctan and ctanh. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (cexp_test): Use ALL_RM_TEST. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2015-06-25 05:04:51 +08:00
erf 0
erf -0
erf 0.125
erf 0.75
erf 1.25
erf 2.0
erf 4.125
erf 27.0
erf -27.0
erf -0x1.fffffffffffff8p-2
Fix erf underflow handling near 0 (bug 16516). Bug 16516 reports spurious underflows from erf (for all floating-point types), when the result is close to underflowing but does not actually underflow. erf (x) is about (2/sqrt(pi))*x for x close to 0, so there are subnormal arguments for which it does not underflow. The various implementations do (x + efx*x) (for efx = 2/sqrt(pi) - 1), for greater accuracy than if just using a single multiplication by an approximation to 2/sqrt(pi) (effectively, this way there are a few more bits in the approximation to 2/sqrt(pi)). This can introduce underflows when efx*x underflows even though the final result does not, so a scaled calculation with 8*efx is done in these cases - but 8 is not a big enough scale factor to avoid all such underflows. 16 is (any underflows with a scale factor of 16 would only occur when the final result underflows), so this patch changes the code to use that factor. Rather than recomputing all the values of the efx8 variable, it is removed, leaving it to the compiler's constant folding to compute 16*efx. As such scaling can also lose underflows when the final scaling down happens to be exact, appropriate checks are added to ensure underflow exceptions occur when required in such cases. Tested x86_64 and x86; no ulps updates needed. Also spot-checked for powerpc32 and mips64 to verify the changes to the ldbl-128ibm and ldbl-128 implementations. [BZ #16516] * sysdeps/ieee754/dbl-64/s_erf.c (efx8): Remove variable. (__erf): Scale by 16 instead of 8 in potentially underflowing case. Ensure exception if result actually underflows. * sysdeps/ieee754/flt-32/s_erff.c (efx8): Remove variable. (__erff): Scale by 16 instead of 8 in potentially underflowing case. Ensure exception if result actually underflows. * sysdeps/ieee754/ldbl-128/s_erfl.c: Include <float.h>. (efx8): Remove variable. (__erfl): Scale by 16 instead of 8 in potentially underflowing case. Ensure exception if result actually underflows. * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: Include <float.h>. (efx8): Remove variable. (__erfl): Scale by 16 instead of 8 in potentially underflowing case. Ensure exception if result actually underflows. * sysdeps/ieee754/ldbl-96/s_erfl.c: Include <float.h>. (efx8): Remove variable. (__erfl): Scale by 16 instead of 8 in potentially underflowing case. Ensure exception if result actually underflows. * math/auto-libm-test-in: Add more tests of erf. * math/auto-libm-test-out: Regenerated.
2014-05-14 20:34:03 +08:00
erf 0x1.c5bf94p-127
erf 0x3.8b7fa8p-128
erf -0x3.8b7f12369ded8p-1024
erf 0x3.8b7f12369ded5518p-16384
erf 26.0
erf 28.0
erf 100
erf 106
erf 106.5
erf 106.625
erf 107
erf 108
erf 1000
erf max
erf -0x1.ddaea4p+0
erf -0x1.2b1f68p+0
erf 0x1.44e722p+0
erf -0x1.3a0d48p+0
erf -0x1.c975cap+0
erf -0x1.e6a006p+0
erf -0x1.4d32f4p-12
erfc 0.0
erfc -0
erfc 0x1p-55
erfc -0x1p-55
erfc 0.125
erfc 0.75
erfc 1.25
erfc 2.0
erfc 0x1.f7303cp+1
erfc 4.125
erfc 0x1.ffa002p+2
erfc 0x1.ffffc8p+2
erfc -0x1.fffffffffffff8p-2
erfc 26.0
erfc 27.0
erfc 28.0
erfc 0x1.ffff56789abcdef0123456789a8p+2
erfc 100
erfc 106
erfc 106.5
erfc 106.625
erfc 107
erfc 108
erfc 1000
erfc max
erfc 0x1.8a0c64p+0
erfc 0x1.8a0c62p+0
erfc 0x1.64dafap+0
erfc 0x6.88fb08p+0
erfc 0xd.361d9p-4
erfc 0x8.c66b44ca40038p+0
erfc 0x2.586f1cp+0
erfc 0xb.acb72p+0
erfc 0xb.227499103357d84p+0
erfc 0xd.28abfp-4
erfc 0x1.5289fep+0
erfc 0x4.b48498p+0
erfc 0x2.f8646cp+0
erfc 0x1.514548p+0
erfc 0x2.36c504p+0
erfc 0x1.65e31p+0
erfc 0xd.44cd3p-4
erfc 0xd.47425b3cafa48p-4
erfc 0x1.2f644ep+0
erfc 0x2.56af04p+0
erfc 0x2.b7f8cb76737d2af98dead7c4c5eep+0
erfc 0x2.dfb9b4p+0
erfc 0x1.e33c9ep+0
exp 0
exp -0
exp 1
exp 2
exp 3
exp 0.75
exp 50.0
exp 88.72269439697265625
exp 709.75
# GCC bug 59666: results on directed rounding may be incorrect.
exp 1000.0 xfail-rounding:ldbl-128ibm
exp 710 xfail-rounding:ldbl-128ibm
exp -1234
# GCC bug 59666: results on directed rounding may be incorrect.
exp 0x2.c679d1f73f0fb628p+8 xfail-rounding:ldbl-128ibm
exp 1e5 xfail-rounding:ldbl-128ibm
exp max xfail-rounding:ldbl-128ibm
exp -7.4444006192138124e+02
exp -0x1.75f113c30b1c8p+9
exp -max
exp -11342.8125
exp -0x2.c5b2319c4843acc0p12
exp -0x2.c469d9p+8
exp -0x2.c46d96p+8
exp -0x2.c46727p+8
exp -0x2.c469dep+8
exp -0x2.c46c04p+8
exp -0x2.c46adep+8
exp -0x2.c471b3p+8
exp -0x2.c46993p+8
exp -0x2.c49fap+8
exp -0x2.c4ac1p+8
exp -0x2.c4d89p+8
exp 0x1p-10
exp -0x1p-10
exp 0x1p-20
exp -0x1p-20
exp 0x1p-30
exp -0x1p-30
exp 0x1p-40
exp -0x1p-40
exp 0x1p-50
exp -0x1p-50
exp 0x1p-60
exp -0x1p-60
exp 0x1p-100
exp -0x1p-100
exp min
exp -min
exp min_subnorm
exp -min_subnorm
exp -0x1.760cd14774bd9p+0
exp 0x1.4bed28p+0
exp -0x1.f1cf36p+8
exp 0x3.248524p+0
exp 0x1.f0b362p+0
exp 0xd.89746a799ac4eedp+0
exp -0x6.58b64p-4
exp10 0
exp10 -0
exp10 3
exp10 -1
exp10 36
exp10 -36
exp10 305
exp10 -305
# GCC bug 59666: results on directed rounding may be incorrect.
exp10 4932 xfail-rounding:ldbl-128ibm
exp10 -4932
exp10 -0x1.343793004f503232p12
# GCC bug 59666: results on directed rounding may be incorrect.
exp10 1e5 xfail-rounding:ldbl-128ibm
exp10 -1e5
# GCC bug 59666: results on directed rounding may be incorrect.
exp10 1e6 xfail-rounding:ldbl-128ibm
exp10 -1e6
# GCC bug 59666: results on directed rounding may be incorrect.
exp10 max xfail-rounding:ldbl-128ibm
exp10 -max
exp10 0.75
# GCC bug 59666: results on directed rounding may be incorrect.
exp10 0x1.348e45573a1dd72cp+8 xfail-rounding:ldbl-128ibm
exp10 -0x1.33aa03p+8
exp10 -0x1.33ad17p+8
exp10 -0x1.33afcap+8
exp10 0x1p-10
exp10 -0x1p-10
exp10 0x1p-20
exp10 -0x1p-20
exp10 0x1p-30
exp10 -0x1p-30
exp10 0x1p-40
exp10 -0x1p-40
exp10 0x1p-50
exp10 -0x1p-50
exp10 0x1p-60
exp10 -0x1p-60
exp10 0x1p-100
exp10 -0x1p-100
exp10 min
exp10 -min
exp10 min_subnorm
exp10 -min_subnorm
exp10 0xd.f73d6p-4
exp10 0x1.cc6776p+0
exp10 0x5.b00bcd891ffe56fp+0
exp10 0xe.8b349p+4
exp10 0x3.495c78p+0
exp10 0xf.f33f6p+0
exp2 0
exp2 -0
exp2 10
exp2 -1
exp2 1e6
exp2 -1e6
exp2 max
exp2 -max
exp2 0.75
exp2 100.5
exp2 -116.5
exp2 -123.5
exp2 -124.5
exp2 -125.5
exp2 127
exp2 -149
exp2 1000.25
exp2 -1019.5
exp2 -1020.5
exp2 -1021.5
exp2 1023
exp2 -1074
exp2 16383
exp2 -16400
Fix exp2 missing underflows (bug 16521). Various exp2 implementations in glibc can miss underflow exceptions when the scaling down part of the calculation is exact (or, in the x86 case, when the conversion from extended precision to the target precision is exact). This patch forces the exception in a similar way to previous fixes. The x86 exp2f changes may in fact not be needed for this purpose - it's likely to be the case that no argument of type float has an exp2 result so close to an exact subnormal float value that it equals that value when rounded to 64 bits (even taking account of variation between different x86 implementations). However, they are included for consistency with the changes to exp2 and so as to fix the exp2f part of bug 18875 by ensuring that excess range and precision is removed from underflowing return values. Tested for x86_64, x86 and mips64. [BZ #16521] [BZ #18875] * math/e_exp2l.c (__ieee754_exp2l): Force underflow exception for small results. * sysdeps/i386/fpu/e_exp2.S (dbl_min): New object. (MO): New macro. (__ieee754_exp2): For small results, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/e_exp2f.S (flt_min): New object. (MO): New macro. (__ieee754_exp2f): For small results, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/e_exp2l.S (ldbl_min): New object. (MO): New macro. (__ieee754_exp2l): Force underflow exception for small results. * sysdeps/ieee754/dbl-64/e_exp2.c (__ieee754_exp2): Likewise. * sysdeps/ieee754/flt-32/e_exp2f.c (__ieee754_exp2f): Likewise. * sysdeps/x86_64/fpu/e_exp2l.S (ldbl_min): New object. (MO): New macro. (__ieee754_exp2l): Force underflow exception for small results. * math/auto-libm-test-in: Add more tests or exp2. * math/auto-libm-test-out: Regenerated.
2015-09-15 06:00:12 +08:00
exp2 -126.125
exp2 -126.25
exp2 -126.375
exp2 -126.5
exp2 -126.625
exp2 -126.75
exp2 -126.875
exp2 -1022.125
exp2 -1022.25
exp2 -1022.375
exp2 -1022.5
exp2 -1022.625
exp2 -1022.75
exp2 -1022.875
exp2 -0x3.fe4e8p+8
exp2 -0x3.fe513p+8
exp2 -16382.125
exp2 -16382.25
exp2 -16382.375
exp2 -16382.5
exp2 -16382.625
exp2 -16382.75
exp2 -16382.875
exp2 0x1p-10
exp2 -0x1p-10
exp2 0x1p-20
exp2 -0x1p-20
exp2 0x1p-30
exp2 -0x1p-30
exp2 0x1p-40
exp2 -0x1p-40
exp2 0x1p-50
exp2 -0x1p-50
exp2 0x1p-60
exp2 -0x1p-60
exp2 0x1p-100
exp2 -0x1p-100
exp2 min
exp2 -min
exp2 min_subnorm
exp2 -min_subnorm
exp2 0xb.71754p-4
exp2 0xd.d77dp+0
exp2 0xc.122c4p-4
exp2 -0x1.567cc8p+0
exp2 -0x1.bbbd76p+0
exp2 -0x1.3045fep+8
exp2 0xa.87b8bp+0
exp2 -0xe.2ce69p-4
exp2 -0xc.1bf12p-16
exp2 -0x4.8ce878p-4
exp2 0xf.93d18bf7be8d272p-4
expm1 0
expm1 -0
expm1 1
expm1 0.75
expm1 50.0
expm1 127.0
expm1 500.0
# GCC bug 59666: results on directed rounding may be incorrect.
expm1 11356.25 xfail-rounding:ldbl-128ibm
expm1 -10.0
expm1 -16.0
expm1 -17.0
expm1 -18.0
expm1 -36.0
expm1 -37.0
expm1 -38.0
expm1 -44.0
expm1 -45.0
expm1 -46.0
expm1 -73.0
expm1 -74.0
expm1 -75.0
expm1 -78.0
expm1 -79.0
expm1 -80.0
expm1 -100.0
expm1 -1000.0
expm1 -10000.0
expm1 -100000.0
# GCC bug 59666: results on directed rounding may be incorrect.
expm1 100000.0 xfail-rounding:ldbl-128ibm
expm1 max xfail-rounding:ldbl-128ibm
expm1 -max
Fix x86/x86_64 expm1 inaccuracy near 0 in directed rounding modes (bug 16293). Bug 16293 is inaccuracy of x86/x86_64 versions of expm1, near 0 in directed rounding modes, that arises from frndint rounding the exponent to 1 or -1 instead of 0, resulting in large cancellation error. This inaccuracy in turn affects other functions such as sinh that use expm1. This patch fixes the problem by setting round-to-nearest mode temporarily around the affected calls to frndint. I don't think this is needed for other uses of frndint, such as in exp itself, as only for expm1 is the cancellation error significant. Tested x86_64 and x86 and ulps updated accordingly. * sysdeps/i386/fpu/e_expl.S (IEEE754_EXPL) [USE_AS_EXPM1L]: Set round-to-nearest mode when using frndint. * sysdeps/i386/fpu/s_expm1.S (__expm1): Likewise. * sysdeps/i386/fpu/s_expm1f.S (__expm1f): Likewise. * sysdeps/x86_64/fpu/e_expl.S (IEEE754_EXPL) [USE_AS_EXPM1L]: Likewise. * math/auto-libm-test-in: Add more tests of expm1. Do not expect sinh test to fail. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (TEST_COND_x86_64): Remove macro. (TEST_COND_x86): Likewise. (expm1_tonearest_test_data): New array. (expm1_test_tonearest): New function. (expm1_towardzero_test_data): New array. (expm1_test_towardzero): New function. (expm1_downward_test_data): New array. (expm1_test_downward): New function. (expm1_upward_test_data): New array. (expm1_test_upward): New function. (main): Run the new test functions. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2013-12-19 21:36:10 +08:00
expm1 0x1p-2
expm1 -0x1p-2
expm1 0x1p-10
expm1 -0x1p-10
expm1 0x1p-20
expm1 -0x1p-20
expm1 0x1p-29
expm1 -0x1p-29
expm1 0x1p-32
expm1 -0x1p-32
expm1 0x1p-50
expm1 -0x1p-50
expm1 0x1p-64
expm1 -0x1p-64
expm1 0x1p-100
expm1 -0x1p-100
expm1 0xe.4152ac57cd1ea7ap-60
expm1 0x6.660247486aed8p-4
expm1 0x6.289a78p-4
expm1 0x6.1b4d318238d4a2a8p-4
expm1 0x5.fb8dc64e91a74p-4
expm1 0x3.735f497c4e67535cp-4
expm1 -0x7.d6c50b469d404p+0
expm1 0x4.857de8p+4
expm1 0x5.dfeb68p-4
2015-06-23 05:06:19 +08:00
expm1 0x4.0000000000000028p-16384
expm1 min
expm1 -min
expm1 min_subnorm
expm1 -min_subnorm
Move tests of fma from libm-test.inc to auto-libm-test-in. This patch moves tests of fma to auto-libm-test-in, adding the required support to gen-auto-libm-tests. Because fma can have exact zero results depending on the rounding mode, results of fma cannot always be determined from a single value computed in higher precision with a sticky bit. Thus, this patch adds support for recomputing results with the original MPFR/MPC function in the case where an exact zero is involved. (This also affects some results for cpow; when we start testing cpow in all rounding modes, I think it will be most appropriate to make those tests use IGNORE_ZERO_INF_SIGN, since ISO C does not attempt to determine signs of zero results, or special caes in general, for cpow, and I think signs of zero for cpow are beyond the scope of glibc's accuracy goals.) Simply treating the existing test inputs for fma like those for other functions (i.e., as representing the given value rounded up or down to any of the supported floating-point formats) increases the size of auto-libm-test-out by about 16MB (i.e., about half the file is fma test data). While rounded versions of tests are perfectly reasonable test inputs for fma, in this case having them seems excessive, so this patch allows functions to specify in gen-auto-libm-tests that the given test inputs are only to be interpreted exactly, not as corresponding to values rounded up and down. This reduces the size of the generated test data for fma to a more reasonable 2MB. A consequence of this patch is that fma is now tested for correct presence or absence of "inexact" exceptions, where previously this wasn't tested because I didn't want to try to add that test coverage manually to all the existing tests. As far as I know, the existing fma implementations are already correct in this regard. This patch provides the first cases where the gen-auto-libm-tests support for distinguishing before-rounding/after-rounding underflow actually produces separate entries in auto-libm-test-out (for functions without exactly determined results, the affected cases are all considered underflow-optional, so this only affects functions like fma with exactly determined results). I didn't see any signs of problems with this logic in the output. Tested x86_64 and x86. * math/auto-libm-test-in: Add tests of fma. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (fma_test_data): Use AUTO_TESTS_fff_f. (fma_towardzero_test_data): Likewise. (fma_downward_test_data): Likewise. (fma_upward_test_data): Likewise. * math/gen-auto-libm-tests.c (rounding_mode_desc): Add field mpc_mode. (rounding_modes): Add values for new field. (func_calc_method): Add value mpfr_fff_f. (func_calc_desc): Add mpfr_fff_f union field. (test_function): Add field exact_args. (FUNC): Add macro argument EXACT_ARGS. (FUNC_mpfr_f_f): Update call to FUNC. (FUNC_mpfr_f_f): Likewise. (FUNC_mpfr_ff_f): Likewise. (FUNC_mpfr_if_f): Likewise. (FUNC_mpc_c_f): Likewise. (FUNC_mpc_c_c): Likewise. (test_functions): Add fma. Update calls to FUNC. (handle_input_arg): Add argument exact_args. (add_test): Update call to handle_input_arg. (calc_generic_results): Add argument mode. Handle mpfr_fff_f. (output_for_one_input_case): Update call to calc_generic_results. Recalculate exact zero results in each rounding mode.
2014-02-19 05:48:51 +08:00
fma 1.0 2.0 3.0
fma 1.25 0.75 0.0625
fma 0 0 0
fma 0 0 -0
fma 0 -0 0
fma 0 -0 -0
fma -0 0 0
fma -0 0 -0
fma -0 -0 0
fma -0 -0 -0
fma 1.0 0 0
fma 1.0 0 -0
fma 1.0 -0 0
fma 1.0 -0 -0
fma -1.0 0 0
fma -1.0 0 -0
fma -1.0 -0 0
fma -1.0 -0 -0
fma 0 1.0 0
fma 0 1.0 -0
fma 0 -1.0 0
fma 0 -1.0 -0
fma -0 1.0 0
fma -0 1.0 -0
fma -0 -1.0 0
fma -0 -1.0 -0
fma 1.0 1.0 -1.0
fma 1.0 -1.0 1.0
fma -1.0 1.0 1.0
fma -1.0 -1.0 -1.0
fma 0 0 1
fma 0 0 2
fma 0 0 max
fma 0 1 1
fma 1 0 1
fma 0 1 2
fma 1 0 2
fma 0 1 max
fma 1 0 max
Move tests of fma from libm-test.inc to auto-libm-test-in. This patch moves tests of fma to auto-libm-test-in, adding the required support to gen-auto-libm-tests. Because fma can have exact zero results depending on the rounding mode, results of fma cannot always be determined from a single value computed in higher precision with a sticky bit. Thus, this patch adds support for recomputing results with the original MPFR/MPC function in the case where an exact zero is involved. (This also affects some results for cpow; when we start testing cpow in all rounding modes, I think it will be most appropriate to make those tests use IGNORE_ZERO_INF_SIGN, since ISO C does not attempt to determine signs of zero results, or special caes in general, for cpow, and I think signs of zero for cpow are beyond the scope of glibc's accuracy goals.) Simply treating the existing test inputs for fma like those for other functions (i.e., as representing the given value rounded up or down to any of the supported floating-point formats) increases the size of auto-libm-test-out by about 16MB (i.e., about half the file is fma test data). While rounded versions of tests are perfectly reasonable test inputs for fma, in this case having them seems excessive, so this patch allows functions to specify in gen-auto-libm-tests that the given test inputs are only to be interpreted exactly, not as corresponding to values rounded up and down. This reduces the size of the generated test data for fma to a more reasonable 2MB. A consequence of this patch is that fma is now tested for correct presence or absence of "inexact" exceptions, where previously this wasn't tested because I didn't want to try to add that test coverage manually to all the existing tests. As far as I know, the existing fma implementations are already correct in this regard. This patch provides the first cases where the gen-auto-libm-tests support for distinguishing before-rounding/after-rounding underflow actually produces separate entries in auto-libm-test-out (for functions without exactly determined results, the affected cases are all considered underflow-optional, so this only affects functions like fma with exactly determined results). I didn't see any signs of problems with this logic in the output. Tested x86_64 and x86. * math/auto-libm-test-in: Add tests of fma. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (fma_test_data): Use AUTO_TESTS_fff_f. (fma_towardzero_test_data): Likewise. (fma_downward_test_data): Likewise. (fma_upward_test_data): Likewise. * math/gen-auto-libm-tests.c (rounding_mode_desc): Add field mpc_mode. (rounding_modes): Add values for new field. (func_calc_method): Add value mpfr_fff_f. (func_calc_desc): Add mpfr_fff_f union field. (test_function): Add field exact_args. (FUNC): Add macro argument EXACT_ARGS. (FUNC_mpfr_f_f): Update call to FUNC. (FUNC_mpfr_f_f): Likewise. (FUNC_mpfr_ff_f): Likewise. (FUNC_mpfr_if_f): Likewise. (FUNC_mpc_c_f): Likewise. (FUNC_mpc_c_c): Likewise. (test_functions): Add fma. Update calls to FUNC. (handle_input_arg): Add argument exact_args. (add_test): Update call to handle_input_arg. (calc_generic_results): Add argument mode. Handle mpfr_fff_f. (output_for_one_input_case): Update call to calc_generic_results. Recalculate exact zero results in each rounding mode.
2014-02-19 05:48:51 +08:00
# Bug 6801: errno setting may be missing.
fma min min 0 missing-errno
fma min min -0 missing-errno
fma min -min 0 missing-errno
fma min -min -0 missing-errno
fma -min min 0 missing-errno
fma -min min -0 missing-errno
fma -min -min 0 missing-errno
fma -min -min -0 missing-errno
# Bug 6801: errno setting may be missing.
# Bug 13304: results on directed rounding may be incorrect.
fma max max min missing-errno xfail-rounding:ldbl-128ibm
fma max max -min missing-errno xfail-rounding:ldbl-128ibm
fma max -max min missing-errno xfail-rounding:ldbl-128ibm
fma max -max -min missing-errno xfail-rounding:ldbl-128ibm
fma -max max min missing-errno xfail-rounding:ldbl-128ibm
fma -max max -min missing-errno xfail-rounding:ldbl-128ibm
fma -max -max min missing-errno xfail-rounding:ldbl-128ibm
fma -max -max -min missing-errno xfail-rounding:ldbl-128ibm
fma 0x1.7ff8p+13 0x1.000002p+0 0x1.ffffp-24
fma 0x1.fffp+0 0x1.00001p+0 -0x1.fffp+0
fma 0x1.9abcdep+127 0x0.9abcdep-126 -0x1.f08948p+0
fma 0x1.9abcdep+100 0x0.9abcdep-126 -0x1.f08948p-27
fma 0x1.fffffep+127 0x1.001p+0 -0x1.fffffep+127
fma -0x1.fffffep+127 0x1.fffffep+0 0x1.fffffep+127
fma 0x1.fffffep+127 2.0 -0x1.fffffep+127
fma 0x1.4p-126 0x1.000004p-1 0x1p-128
fma -0x1.4p-126 0x1.000004p-1 -0x1p-128
fma 0x1.fffff8p-126 0x1.000002p-1 0x1p-149
fma -0x1.fffff8p-126 0x1.000002p-1 -0x1p-149
fma 0x1p-149 0x1p-1 0x0.fffffep-126
fma -0x1p-149 0x1p-1 -0x0.fffffep-126
fma 0x1p-149 0x1.1p-1 0x0.fffffep-126
fma -0x1p-149 0x1.1p-1 -0x0.fffffep-126
fma 0x1p-149 0x1p-149 0x1p127
fma 0x1p-149 -0x1p-149 0x1p127
fma 0x1p-149 0x1p-149 -0x1p127
fma 0x1p-149 -0x1p-149 -0x1p127
fma 0x1p-149 0x1p-149 0x1p-126
fma 0x1p-149 -0x1p-149 0x1p-126
fma 0x1p-149 0x1p-149 -0x1p-126
fma 0x1p-149 -0x1p-149 -0x1p-126
fma 0x1p-149 0x1p-149 0x0.fffffep-126
fma 0x1p-149 -0x1p-149 0x0.fffffep-126
fma 0x1p-149 0x1p-149 -0x0.fffffep-126
fma 0x1p-149 -0x1p-149 -0x0.fffffep-126
fma 0x1p-149 0x1p-149 0x1p-149
# Bug 6801: errno setting may be missing.
fma 0x1p-149 -0x1p-149 0x1p-149 missing-errno
fma 0x1p-149 0x1p-149 -0x1p-149 missing-errno
fma 0x1p-149 -0x1p-149 -0x1p-149
fma 0x0.fffp0 0x0.fffp0 -0x0.ffep0
fma 0x0.fffp0 -0x0.fffp0 0x0.ffep0
fma -0x0.fffp0 0x0.fffp0 0x0.ffep0
fma -0x0.fffp0 -0x0.fffp0 -0x0.ffep0
fma 0x1.000002p-126 0x1.000002p-26 0x1p127
fma 0x1.000002p-126 -0x1.000002p-26 0x1p127
fma 0x1.000002p-126 0x1.000002p-26 -0x1p127
fma 0x1.000002p-126 -0x1.000002p-26 -0x1p127
fma 0x1.000002p-126 0x1.000002p-26 0x1p103
fma 0x1.000002p-126 -0x1.000002p-26 0x1p103
fma 0x1.000002p-126 0x1.000002p-26 -0x1p103
fma 0x1.000002p-126 -0x1.000002p-26 -0x1p103
fma 0x1.7fp+13 0x1.0000000000001p+0 0x1.ffep-48
fma 0x1.fffp+0 0x1.0000000000001p+0 -0x1.fffp+0
fma 0x1.0000002p+0 0x1.ffffffcp-1 0x1p-300
fma 0x1.0000002p+0 0x1.ffffffcp-1 -0x1p-300
fma 0x1.deadbeef2feedp+1023 0x0.deadbeef2feedp-1022 -0x1.a05f8c01a4bfbp+1
fma 0x1.deadbeef2feedp+900 0x0.deadbeef2feedp-1022 -0x1.a05f8c01a4bfbp-122
fma 0x1.fffffffffffffp+1023 0x1.001p+0 -0x1.fffffffffffffp+1023
fma -0x1.fffffffffffffp+1023 0x1.fffffffffffffp+0 0x1.fffffffffffffp+1023
fma 0x1.fffffffffffffp+1023 2.0 -0x1.fffffffffffffp+1023
# Bug 6801: errno setting may be missing.
fma 0x1.6a09e667f3bccp-538 0x1.6a09e667f3bccp-538 0.0 missing-errno
fma 0x1.deadbeef2feedp-495 0x1.deadbeef2feedp-495 -0x1.bf86a5786a574p-989
fma 0x1.deadbeef2feedp-503 0x1.deadbeef2feedp-503 -0x1.bf86a5786a574p-1005
fma 0x1p-537 0x1p-538 0x1p-1074
fma 0x1.7fffff8p-968 0x1p-106 0x0.000001p-1022
fma 0x1.4000004p-967 0x1p-106 0x0.000001p-1022
fma 0x1.4p-967 -0x1p-106 -0x0.000001p-1022
fma -0x1.19cab66d73e17p-959 0x1.c7108a8c5ff51p-107 -0x0.80b0ad65d9b64p-1022
fma -0x1.d2eaed6e8e9d3p-979 -0x1.4e066c62ac9ddp-63 -0x0.9245e6b003454p-1022
fma 0x1.153d650bb9f06p-907 0x1.2d01230d48407p-125 -0x0.b278d5acfc3cp-1022
fma -0x1.fffffffffffffp-711 0x1.fffffffffffffp-275 0x1.fffffe00007ffp-983
fma 0x1.4p-1022 0x1.0000000000002p-1 0x1p-1024
fma -0x1.4p-1022 0x1.0000000000002p-1 -0x1p-1024
fma 0x1.ffffffffffffcp-1022 0x1.0000000000001p-1 0x1p-1074
fma -0x1.ffffffffffffcp-1022 0x1.0000000000001p-1 -0x1p-1074
fma 0x1p-1074 0x1p-1 0x0.fffffffffffffp-1022
fma -0x1p-1074 0x1p-1 -0x0.fffffffffffffp-1022
fma 0x1p-1074 0x1.1p-1 0x0.fffffffffffffp-1022
fma -0x1p-1074 0x1.1p-1 -0x0.fffffffffffffp-1022
fma 0x1p-1074 0x1p-1074 0x1p1023
fma 0x1p-1074 -0x1p-1074 0x1p1023
fma 0x1p-1074 0x1p-1074 -0x1p1023
fma 0x1p-1074 -0x1p-1074 -0x1p1023
fma 0x1p-1074 0x1p-1074 0x1p-1022
fma 0x1p-1074 -0x1p-1074 0x1p-1022
fma 0x1p-1074 0x1p-1074 -0x1p-1022
fma 0x1p-1074 -0x1p-1074 -0x1p-1022
fma 0x1p-1074 0x1p-1074 0x0.fffffffffffffp-1022
fma 0x1p-1074 -0x1p-1074 0x0.fffffffffffffp-1022
fma 0x1p-1074 0x1p-1074 -0x0.fffffffffffffp-1022
fma 0x1p-1074 -0x1p-1074 -0x0.fffffffffffffp-1022
fma 0x1p-1074 0x1p-1074 0x1p-1074
# Bug 6801: errno setting may be missing.
fma 0x1p-1074 -0x1p-1074 0x1p-1074 missing-errno
fma 0x1p-1074 0x1p-1074 -0x1p-1074 missing-errno
fma 0x1p-1074 -0x1p-1074 -0x1p-1074
fma 0x0.fffffffffffff8p0 0x0.fffffffffffff8p0 -0x0.fffffffffffffp0
fma 0x0.fffffffffffff8p0 -0x0.fffffffffffff8p0 0x0.fffffffffffffp0
fma -0x0.fffffffffffff8p0 0x0.fffffffffffff8p0 0x0.fffffffffffffp0
fma -0x0.fffffffffffff8p0 -0x0.fffffffffffff8p0 -0x0.fffffffffffffp0
fma 0x1.0000000000001p-1022 0x1.0000000000001p-55 0x1p1023
fma 0x1.0000000000001p-1022 -0x1.0000000000001p-55 0x1p1023
fma 0x1.0000000000001p-1022 0x1.0000000000001p-55 -0x1p1023
fma 0x1.0000000000001p-1022 -0x1.0000000000001p-55 -0x1p1023
fma 0x1.0000000000001p-1022 0x1.0000000000001p-55 0x1p970
fma 0x1.0000000000001p-1022 -0x1.0000000000001p-55 0x1p970
fma 0x1.0000000000001p-1022 0x1.0000000000001p-55 -0x1p970
fma 0x1.0000000000001p-1022 -0x1.0000000000001p-55 -0x1p970
fma -0x8.03fcp+3696 0xf.fffffffffffffffp-6140 0x8.3ffffffffffffffp-2450
fma 0x9.fcp+2033 -0x8.000e1f000ff800fp-3613 -0xf.fffffffffffc0ffp-1579
fma 0xc.7fc000003ffffffp-1194 0x8.1e0003fffffffffp+15327 -0x8.fffep+14072
fma -0x8.0001fc000000003p+1798 0xcp-2230 0x8.f7e000000000007p-468
fma 0xc.0000000000007ffp+10130 -0x8.000000000000001p+4430 0xc.07000000001ffffp+14513
fma 0xb.ffffp-4777 0x8.000000fffffffffp-11612 -0x0.3800fff8p-16385
fma 0x1.4p-16382 0x1.0000000000000004p-1 0x1p-16384
fma -0x1.4p-16382 0x1.0000000000000004p-1 -0x1p-16384
fma 0x1.fffffffffffffff8p-16382 0x1.0000000000000002p-1 0x1p-16445
fma -0x1.fffffffffffffff8p-16382 0x1.0000000000000002p-1 -0x1p-16445
fma 0x1p-16445 0x1p-1 0x0.fffffffffffffffep-16382
fma -0x1p-16445 0x1p-1 -0x0.fffffffffffffffep-16382
fma 0x1p-16445 0x1.1p-1 0x0.fffffffffffffffep-16382
fma -0x1p-16445 0x1.1p-1 -0x0.fffffffffffffffep-16382
fma 0x1p-16445 0x1p-16445 0x1p16383
fma 0x1p-16445 -0x1p-16445 0x1p16383
fma 0x1p-16445 0x1p-16445 -0x1p16383
fma 0x1p-16445 -0x1p-16445 -0x1p16383
fma 0x1p-16445 0x1p-16445 0x1p-16382
fma 0x1p-16445 -0x1p-16445 0x1p-16382
fma 0x1p-16445 0x1p-16445 -0x1p-16382
fma 0x1p-16445 -0x1p-16445 -0x1p-16382
fma 0x1p-16445 0x1p-16445 0x0.fffffffffffffffep-16382
fma 0x1p-16445 -0x1p-16445 0x0.fffffffffffffffep-16382
fma 0x1p-16445 0x1p-16445 -0x0.fffffffffffffffep-16382
fma 0x1p-16445 -0x1p-16445 -0x0.fffffffffffffffep-16382
fma 0x1p-16445 0x1p-16445 0x1p-16445
# Bug 6801: errno setting may be missing.
fma 0x1p-16445 -0x1p-16445 0x1p-16445 missing-errno
fma 0x1p-16445 0x1p-16445 -0x1p-16445 missing-errno
fma 0x1p-16445 -0x1p-16445 -0x1p-16445
fma 0x0.ffffffffffffffffp0 0x0.ffffffffffffffffp0 -0x0.fffffffffffffffep0
fma 0x0.ffffffffffffffffp0 -0x0.ffffffffffffffffp0 0x0.fffffffffffffffep0
fma -0x0.ffffffffffffffffp0 0x0.ffffffffffffffffp0 0x0.fffffffffffffffep0
fma -0x0.ffffffffffffffffp0 -0x0.ffffffffffffffffp0 -0x0.fffffffffffffffep0
fma 0x1.0000000000000002p-16382 0x1.0000000000000002p-66 0x1p16383
fma 0x1.0000000000000002p-16382 -0x1.0000000000000002p-66 0x1p16383
fma 0x1.0000000000000002p-16382 0x1.0000000000000002p-66 -0x1p16383
fma 0x1.0000000000000002p-16382 -0x1.0000000000000002p-66 -0x1p16383
fma 0x1.0000000000000002p-16382 0x1.0000000000000002p-66 0x1p16319
fma 0x1.0000000000000002p-16382 -0x1.0000000000000002p-66 0x1p16319
fma 0x1.0000000000000002p-16382 0x1.0000000000000002p-66 -0x1p16319
fma 0x1.0000000000000002p-16382 -0x1.0000000000000002p-66 -0x1p16319
fma 0x1.bb2de33e02ccbbfa6e245a7c1f71p-2584 -0x1.6b500daf0580d987f1bc0cadfcddp-13777 0x1.613cd91d9fed34b33820e5ab9d8dp-16378
fma -0x1.f949b880cacb0f0c61540105321dp-5954 -0x1.3876cec84b4140f3bd6198731b7ep-10525 -0x0.a5dc1c6cfbc498c54fb0b504bf19p-16382
fma -0x1.0000fffffffffp-16221 0x1.0000001fffff8007fep-239 0x0.ff87ffffffffffffe000003fffffp-16382
fma -0x1.ac79c9376ef447f3827c9e9de008p-2228 -0x1.5ba830022b6139e21fbe7270cad8p-6314 0x1.e8282b6a26bb6a9daf5c8e73e9f9p-8616
fma -0x1.c69749ec574caaa2ab8e97ddb9f3p+2652 0x1.f34235ff9d095449c29b4831b62dp+3311 0x1.fbe4302df23354dbd0c4d3cfe606p+5879
fma -0x1.ca8835fc6ecfb5398625fc891be5p-1686 0x1.621e1972bbe2180e5be9dd7d8df5p-7671 -0x1.7d2d21b73b52cf20dec2a83902a4p-9395
fma -0x1.55cff679ec49c2541fab41fc843ep-11819 0x1.e60e9f464f9e8df0509647c7c971p+12325 0x1.eaa2a7649d765c2f564f7a5beca7p+454
fma 0x1.f0e7b1454908576f2537d863cf9bp+11432 0x1.cdce52f09d4ca76e68706f34b5d5p-1417 -0x1.2e986187c70f146235ea2066e486p+9979
fma 0x1.f102f7da4a57a3a4aab620e29452p-3098 -0x1.cc06a4ff40248f9e2dcc4b6afd84p-11727 0x1.d512a11126b5ac8ed8973b8580c8p-14849
fma -0x1.fc47ac7434b993cd8dcb2b431f25p-3816 0x1.fbc9750da8468852d84558e1db6dp-5773 -0x1.00a98abf783f75c40fe5b7a37d86p-9607
fma 0x1.00000000000007ffffffffffffffp-9045 -0x1.ffffffffffff80000001ffffffffp+4773 -0x1.f8p-4316
fma 0x1.4e922764c90701d4a2f21d01893dp-8683 -0x1.955a12e2d7c9447c27fa022fc865p+212 -0x1.e9634462eaef96528b90b6944578p-8521
fma 0x1.801181509c03bdbef10d6165588cp-15131 0x1.ad86f8e57d3d40bfa8007780af63p-368 -0x1.6e9df0dab1c9f1d7a6043c390741p-15507
fma 0x1.ffffffffffffffp0 0x1.000000000000008p0 -0x1p-1000
fma 0x1.4p-16382 0x1.0000000000000000000000000002p-1 0x1p-16384
fma -0x1.4p-16382 0x1.0000000000000000000000000002p-1 -0x1p-16384
fma 0x1.fffffffffffffffffffffffffffcp-16382 0x1.0000000000000000000000000001p-1 0x1p-16494
fma -0x1.fffffffffffffffffffffffffffcp-16382 0x1.0000000000000000000000000001p-1 -0x1p-16494
fma 0x1p-16494 0x1p-1 0x0.ffffffffffffffffffffffffffffp-16382
fma -0x1p-16494 0x1p-1 -0x0.ffffffffffffffffffffffffffffp-16382
fma 0x1p-16494 0x1.1p-1 0x0.ffffffffffffffffffffffffffffp-16382
fma -0x1p-16494 0x1.1p-1 -0x0.ffffffffffffffffffffffffffffp-16382
fma 0x1p-16494 0x1p-16494 0x1p16383
fma 0x1p-16494 -0x1p-16494 0x1p16383
fma 0x1p-16494 0x1p-16494 -0x1p16383
fma 0x1p-16494 -0x1p-16494 -0x1p16383
fma 0x1p-16494 0x1p-16494 0x1p-16382
fma 0x1p-16494 -0x1p-16494 0x1p-16382
fma 0x1p-16494 0x1p-16494 -0x1p-16382
fma 0x1p-16494 -0x1p-16494 -0x1p-16382
fma 0x1p-16494 0x1p-16494 0x0.ffffffffffffffffffffffffffffp-16382
fma 0x1p-16494 -0x1p-16494 0x0.ffffffffffffffffffffffffffffp-16382
fma 0x1p-16494 0x1p-16494 -0x0.ffffffffffffffffffffffffffffp-16382
fma 0x1p-16494 -0x1p-16494 -0x0.ffffffffffffffffffffffffffffp-16382
fma 0x1p-16494 0x1p-16494 0x1p-16494
# Bug 6801: errno setting may be missing.
fma 0x1p-16494 -0x1p-16494 0x1p-16494 missing-errno
fma 0x1p-16494 0x1p-16494 -0x1p-16494 missing-errno
fma 0x1p-16494 -0x1p-16494 -0x1p-16494
fma 0x0.ffffffffffffffffffffffffffff8p0 0x0.ffffffffffffffffffffffffffff8p0 -0x0.ffffffffffffffffffffffffffffp0
fma 0x0.ffffffffffffffffffffffffffff8p0 -0x0.ffffffffffffffffffffffffffff8p0 0x0.ffffffffffffffffffffffffffffp0
fma -0x0.ffffffffffffffffffffffffffff8p0 0x0.ffffffffffffffffffffffffffff8p0 0x0.ffffffffffffffffffffffffffffp0
fma -0x0.ffffffffffffffffffffffffffff8p0 -0x0.ffffffffffffffffffffffffffff8p0 -0x0.ffffffffffffffffffffffffffffp0
fma 0x1.0000000000000000000000000001p-16382 0x1.0000000000000000000000000001p-66 0x1p16383
fma 0x1.0000000000000000000000000001p-16382 -0x1.0000000000000000000000000001p-66 0x1p16383
fma 0x1.0000000000000000000000000001p-16382 0x1.0000000000000000000000000001p-66 -0x1p16383
fma 0x1.0000000000000000000000000001p-16382 -0x1.0000000000000000000000000001p-66 -0x1p16383
fma 0x1.0000000000000000000000000001p-16382 0x1.0000000000000000000000000001p-66 0x1p16319
fma 0x1.0000000000000000000000000001p-16382 -0x1.0000000000000000000000000001p-66 0x1p16319
fma 0x1.0000000000000000000000000001p-16382 0x1.0000000000000000000000000001p-66 -0x1p16319
fma 0x1.0000000000000000000000000001p-16382 -0x1.0000000000000000000000000001p-66 -0x1p16319
Fix fma spurious underflows (bug 18824). Various fma implementations have logic that, when computing fma (x, y, z) where z is large (so care needs taking to avoid internal overflow) but x * y is small, scale x * y up instead of down to avoid internal underflows resulting from scaling down. (In these cases, x * y is small enough that only its sign actually matters rather than the exact value.) The threshold for scaling up instead of down was correct for "if the unscaled values were multiplied, the low part of the multiplication could underflow", and the scaling was sufficient to ensure that the low part of the multiplication did not underflow (given that cases of very small x * y - less than half the least subnormal - were previously dealt with). However, the choice in the functions wasn't between scaling up or no scaling, but between scaling up and scaling down (scaling down actually being needed when x * y isn't so small compared to z and so the exact value does matter). Thus a larger threshold is needed to ensure that scaling down doesn't produce values the multiplication of whose low parts underflows. This patch increases the thresholds accordingly. Tested for x86_64, x86 and mips64 (with the MIPS version of s_fmal.c removed so that the ldbl-128 version gets tested instead of the soft-fp one). [BZ #18824] * sysdeps/ieee754/dbl-64/s_fma.c (__fma): Increase threshold for scaling x * y up instead of down. * sysdeps/ieee754/ldbl-128/s_fmal.c (__fmal): Likewise. * sysdeps/ieee754/ldbl-96/s_fmal.c (__fmal): Likewise. * math/auto-libm-test-in: Add more tests of fma. * math/auto-libm-test-out: Regenerated.
2015-08-15 01:15:06 +08:00
# Bug 6801: errno setting may be missing.
fma 0x1.fffffep-126 0x1.fffffep25 0x1.fffffep127 missing-errno
fma 0x1.fffffep-126 -0x1.fffffep25 0x1.fffffep127
fma 0x1.fffffep-126 0x1.fffffep25 -0x1.fffffep127
fma 0x1.fffffep-126 -0x1.fffffep25 -0x1.fffffep127 missing-errno
fma 0x1.fffffffffffffp-1022 0x1.fffffffffffffp54 0x1.fffffffffffffp1023 missing-errno
fma 0x1.fffffffffffffp-1022 -0x1.fffffffffffffp54 0x1.fffffffffffffp1023
fma 0x1.fffffffffffffp-1022 0x1.fffffffffffffp54 -0x1.fffffffffffffp1023
fma 0x1.fffffffffffffp-1022 -0x1.fffffffffffffp54 -0x1.fffffffffffffp1023 missing-errno
fma 0x1.fffffffffffffffep-16382 0x1.fffffffffffffffep65 0x1.fffffffffffffffep16383 missing-errno
fma 0x1.fffffffffffffffep-16382 -0x1.fffffffffffffffep65 0x1.fffffffffffffffep16383
fma 0x1.fffffffffffffffep-16382 0x1.fffffffffffffffep65 -0x1.fffffffffffffffep16383
fma 0x1.fffffffffffffffep-16382 -0x1.fffffffffffffffep65 -0x1.fffffffffffffffep16383 missing-errno
fma 0x1.ffffffffffffffffffffffffffffp-16382 0x1.ffffffffffffffffffffffffffffp114 0x1.ffffffffffffffffffffffffffffp16383 missing-errno
fma 0x1.ffffffffffffffffffffffffffffp-16382 -0x1.ffffffffffffffffffffffffffffp114 0x1.ffffffffffffffffffffffffffffp16383
fma 0x1.ffffffffffffffffffffffffffffp-16382 0x1.ffffffffffffffffffffffffffffp114 -0x1.ffffffffffffffffffffffffffffp16383
fma 0x1.ffffffffffffffffffffffffffffp-16382 -0x1.ffffffffffffffffffffffffffffp114 -0x1.ffffffffffffffffffffffffffffp16383 missing-errno
hypot 0 0
hypot 0 -0
hypot -0 0
hypot -0 -0
# hypot (x,y) == hypot (+-x, +-y).
hypot 0.7 12.4
hypot -0.7 12.4
hypot 0.7 -12.4
hypot -0.7 -12.4
hypot 12.4 0.7
hypot -12.4 0.7
hypot 12.4 -0.7
hypot -12.4 -0.7
# hypot (x,0) == fabs (x).
hypot 0.75 0
hypot -0.75 0
hypot -5.7e7 0
hypot 0.75 1.25
hypot 1.0 0x1p-61
hypot 0x1p+0 0x1.fp-129
hypot 0x1.23456789abcdef0123456789ab8p-500 0x1.23456789abcdef0123456789ab8p-500
hypot 0x3p125 0x4p125 no-test-inline:flt-32
hypot 0x1.234566p-126 0x1.234566p-126 no-test-inline:flt-32
hypot 0x3p1021 0x4p1021 no-test-inline:dbl-64
hypot 0x1p+0 0x0.3ep-1022 no-test-inline:dbl-64
hypot 0x3p16381 0x4p16381 no-test-inline
hypot 0x1p-149 0x1p-149
hypot 0x1p-1074 0x1p-1074
hypot 0x1p-16445 0x1p-16445 no-test-inline
hypot 0x1p-16494 0x1p-16494 no-test-inline
hypot 0x0.fffffep-126 0x0.fp-127
hypot 0x0.fffffep-126 0x0.fp-130
hypot 0x0.fffffffffffffp-1022 0x0.fp-1023
hypot 0x0.fffffffffffffp-1022 0x0.fp-1026
hypot 0x0.ffffffp-16382 0x0.fp-16383 no-test-inline
hypot 0x0.ffffffp-16382 0x0.fp-16386 no-test-inline
hypot 0 min_subnorm no-test-inline
Fix hypot missing underflows (bug 18803). Similar to various other bugs in this area, hypot functions can fail to raise the underflow exception when the result is tiny and inexact but one or more low bits of the intermediate result that is scaled down (or, in the i386 case, converted from a wider evaluation format) are zero. This patch forces the exception in a similar way to previous fixes. Note that this issue cannot arise for implementations of hypotf using double (or wider) for intermediate evaluation (if hypotf should underflow, that means the double square root is being computed of some number of the form N*2^-298, for 0 < N < 2^46, which is exactly represented as a double, and whatever the rounding mode such a square root cannot have a mantissa with all zeroes after the initial 23 bits). Thus no changes are made to hypotf implementations in this patch, only to hypot and hypotl. Tested for x86_64, x86, mips64 and powerpc. [BZ #18803] * sysdeps/i386/fpu/e_hypot.S: Use DEFINE_DBL_MIN. (MO): New macro. (__ieee754_hypot) [PIC]: Load PIC register. (__ieee754_hypot): Use DBL_NARROW_EVAL_UFLOW_NONNEG instead of DBL_NARROW_EVAL. * sysdeps/ieee754/dbl-64/e_hypot.c (__ieee754_hypot): Use math_check_force_underflow_nonneg in case where result might be tiny. * sysdeps/ieee754/ldbl-128/e_hypotl.c (__ieee754_hypotl): Likewise. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c (__ieee754_hypotl): Likewise. * sysdeps/ieee754/ldbl-96/e_hypotl.c (__ieee754_hypotl): Likewise. * sysdeps/powerpc/fpu/e_hypot.c (__ieee754_hypot): Likewise. * math/auto-libm-test-in: Add more tests of hypot. * math/auto-libm-test-out: Regenerated.
2015-09-25 07:43:57 +08:00
hypot 0x1p-127 0x1p-149
hypot 0x1p-1023 0x1p-1074
hypot 0x1p-970 0x1p-1074
hypot 0x1p-16383 0x1p-16445 no-test-inline
hypot 0x1p-16384 0x1p-16446 no-test-inline
hypot 0x1p-16383 0x1p-16494 no-test-inline
hypot -0x1.fa7deap+0 0x1.a761bab383ac8p+0
j0 -1.0
j0 0.0
j0 0.125
j0 0.75
j0 1.0
j0 1.5
j0 2.0
j0 8.0
j0 10.0
j0 4.0
j0 -4.0
j0 0x1.d7ce3ap+107
j0 -0x1.001000001p+593
j0 0x1p1023
j0 0x1p16382
j0 0x1p16383
j1 -1.0
j1 0.0
j1 0.125
j1 0.75
j1 1.0
j1 1.5
j1 2.0
j1 8.0
j1 10.0
j1 0x1.3ffp+74
j1 0x1.ff00000000002p+840
j1 0x1p1023
j1 0x1p16382
j1 0x1p16383
j1 0x1p-100
j1 0x1p-600
j1 0x1p-10000
# Bug 18611: errno setting may be missing.
j1 min missing-errno
j1 -min missing-errno
j1 min_subnorm missing-errno
j1 -min_subnorm missing-errno
# jn (0, x) == j0 (x).
jn 0 -1.0
jn 0 0.0
jn 0 0.125
jn 0 0.75
jn 0 1.0
jn 0 1.5
jn 0 2.0
jn 0 8.0
jn 0 10.0
jn 0 4.0
jn 0 -4.0
# jn (1, x) == j1 (x).
jn 1 -1.0
jn 1 0.0
jn 1 0.125
jn 1 0.75
jn 1 1.0
jn 1 1.5
jn 1 2.0
jn 1 8.0
jn 1 10.0
# Bug 18611: errno setting may be missing.
jn 1 min missing-errno
jn 1 -min missing-errno
jn 1 min_subnorm missing-errno
jn 1 -min_subnorm missing-errno
jn 3 -1.0
jn 3 0.0
jn 3 0.125
jn 3 0.75
jn 3 1.0
jn 3 2.0
jn 3 10.0
jn 10 -1.0
jn 10 0.0
jn 10 0.125
jn 10 0.75
jn 10 1.0
jn 10 2.0
jn 10 10.0
jn 2 2.4048255576957729
jn 3 2.4048255576957729
jn 4 2.4048255576957729
jn 5 2.4048255576957729
jn 6 2.4048255576957729
jn 7 2.4048255576957729
jn 8 2.4048255576957729
jn 9 2.4048255576957729
jn 2 0x1.ffff62p+99
jn 2 0x1p127
jn 2 0x1p1023
jn 2 0x1p16383
# Bug 18611: errno setting may be missing.
jn 10 min missing-errno
jn 10 -min missing-errno
jn 10 min_subnorm missing-errno
jn 10 -min_subnorm missing-errno
lgamma max
lgamma 1
lgamma 3
lgamma 0.5
lgamma 0.7
lgamma 1.2
lgamma 0x3.8p56
lgamma 0x1p-5
lgamma -0x1p-5
lgamma 0x1p-10
lgamma -0x1p-10
lgamma 0x1p-15
lgamma -0x1p-15
lgamma 0x1p-20
lgamma -0x1p-20
lgamma 0x1p-25
lgamma -0x1p-25
lgamma 0x1p-30
lgamma -0x1p-30
lgamma 0x1p-40
lgamma -0x1p-40
lgamma 0x1p-50
lgamma -0x1p-50
lgamma 0x1p-60
lgamma -0x1p-60
lgamma 0x1p-64
lgamma -0x1p-64
lgamma 0x1p-70
lgamma -0x1p-70
lgamma 0x1p-100
lgamma -0x1p-100
lgamma 0x1p-126
lgamma -0x1p-126
lgamma 0x1p-149
lgamma -0x1p-149
lgamma 0x1p-200
lgamma -0x1p-200
lgamma 0x1p-500
lgamma -0x1p-500
lgamma 0x1p-1000
lgamma -0x1p-1000
lgamma 0x1p-1022
lgamma -0x1p-1022
lgamma 0x1p-1074
lgamma -0x1p-1074
lgamma 0x1p-5000
lgamma -0x1p-5000
lgamma 0x1p-10000
lgamma -0x1p-10000
lgamma 0x1p-16382
lgamma -0x1p-16382
lgamma 0x1p-16445
lgamma -0x1p-16445
lgamma 0x1p-16494
lgamma -0x1p-16494
Fix lgamma (negative) inaccuracy (bug 2542, bug 2543, bug 2558). The existing implementations of lgamma functions (except for the ia64 versions) use the reflection formula for negative arguments. This suffers large inaccuracy from cancellation near zeros of lgamma (near where the gamma function is +/- 1). This patch fixes this inaccuracy. For arguments above -2, there are no zeros and no large cancellation, while for sufficiently large negative arguments the zeros are so close to integers that even for integers +/- 1ulp the log(gamma(1-x)) term dominates and cancellation is not significant. Thus, it is only necessary to take special care about cancellation for arguments around a limited number of zeros. Accordingly, this patch uses precomputed tables of relevant zeros, expressed as the sum of two floating-point values. The log of the ratio of two sines can be computed accurately using log1p in cases where log would lose accuracy. The log of the ratio of two gamma(1-x) values can be computed using Stirling's approximation (the difference between two values of that approximation to lgamma being computable without computing the two values and then subtracting), with appropriate adjustments (which don't reduce accuracy too much) in cases where 1-x is too small to use Stirling's approximation directly. In the interval from -3 to -2, using the ratios of sines and of gamma(1-x) can still produce too much cancellation between those two parts of the computation (and that interval is also the worst interval for computing the ratio between gamma(1-x) values, which computation becomes more accurate, while being less critical for the final result, for larger 1-x). Because this can result in errors slightly above those accepted in glibc, this interval is instead dealt with by polynomial approximations. Separate polynomial approximations to (|gamma(x)|-1)(x-n)/(x-x0) are used for each interval of length 1/8 from -3 to -2, where n (-3 or -2) is the nearest integer to the 1/8-interval and x0 is the zero of lgamma in the relevant half-integer interval (-3 to -2.5 or -2.5 to -2). Together, the two approaches are intended to give sufficient accuracy for all negative arguments in the problem range. Outside that range, the previous implementation continues to be used. Tested for x86_64, x86, mips64 and powerpc. The mips64 and powerpc testing shows up pre-existing problems for ldbl-128 and ldbl-128ibm with large negative arguments giving spurious "invalid" exceptions (exposed by newly added tests for cases this patch doesn't affect the logic for); I'll address those problems separately. [BZ #2542] [BZ #2543] [BZ #2558] * sysdeps/ieee754/dbl-64/e_lgamma_r.c (__ieee754_lgamma_r): Call __lgamma_neg for arguments from -28.0 to -2.0. * sysdeps/ieee754/flt-32/e_lgammaf_r.c (__ieee754_lgammaf_r): Call __lgamma_negf for arguments from -15.0 to -2.0. * sysdeps/ieee754/ldbl-128/e_lgammal_r.c (__ieee754_lgammal_r): Call __lgamma_negl for arguments from -48.0 or -50.0 to -2.0. * sysdeps/ieee754/ldbl-96/e_lgammal_r.c (__ieee754_lgammal_r): Call __lgamma_negl for arguments from -33.0 to -2.0. * sysdeps/ieee754/dbl-64/lgamma_neg.c: New file. * sysdeps/ieee754/dbl-64/lgamma_product.c: Likewise. * sysdeps/ieee754/flt-32/lgamma_negf.c: Likewise. * sysdeps/ieee754/flt-32/lgamma_productf.c: Likewise. * sysdeps/ieee754/ldbl-128/lgamma_negl.c: Likewise. * sysdeps/ieee754/ldbl-128/lgamma_productl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/lgamma_negl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/lgamma_productl.c: Likewise. * sysdeps/ieee754/ldbl-96/lgamma_negl.c: Likewise. * sysdeps/ieee754/ldbl-96/lgamma_product.c: Likewise. * sysdeps/ieee754/ldbl-96/lgamma_productl.c: Likewise. * sysdeps/generic/math_private.h (__lgamma_negf): New prototype. (__lgamma_neg): Likewise. (__lgamma_negl): Likewise. (__lgamma_product): Likewise. (__lgamma_productl): Likewise. * math/Makefile (libm-calls): Add lgamma_neg and lgamma_product. * math/auto-libm-test-in: Add more tests of lgamma. * math/auto-libm-test-out: Regenerated. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2015-09-11 06:27:58 +08:00
lgamma -0x1.fa471547c2fe5p+1
lgamma -0x1.9260dcp+1
lgamma -0xffffffp-1
lgamma -0x1fffffffffffffp-1
lgamma -0xffffffffffffffffp-1
lgamma -0x3ffffffffffffffffffffffffffp-1
lgamma -0x1ffffffffffffffffffffffffffffp-1
lgamma -0x100000000.8p0
lgamma -0x100000001.8p0
Fix lgamma (negative) inaccuracy (bug 2542, bug 2543, bug 2558). The existing implementations of lgamma functions (except for the ia64 versions) use the reflection formula for negative arguments. This suffers large inaccuracy from cancellation near zeros of lgamma (near where the gamma function is +/- 1). This patch fixes this inaccuracy. For arguments above -2, there are no zeros and no large cancellation, while for sufficiently large negative arguments the zeros are so close to integers that even for integers +/- 1ulp the log(gamma(1-x)) term dominates and cancellation is not significant. Thus, it is only necessary to take special care about cancellation for arguments around a limited number of zeros. Accordingly, this patch uses precomputed tables of relevant zeros, expressed as the sum of two floating-point values. The log of the ratio of two sines can be computed accurately using log1p in cases where log would lose accuracy. The log of the ratio of two gamma(1-x) values can be computed using Stirling's approximation (the difference between two values of that approximation to lgamma being computable without computing the two values and then subtracting), with appropriate adjustments (which don't reduce accuracy too much) in cases where 1-x is too small to use Stirling's approximation directly. In the interval from -3 to -2, using the ratios of sines and of gamma(1-x) can still produce too much cancellation between those two parts of the computation (and that interval is also the worst interval for computing the ratio between gamma(1-x) values, which computation becomes more accurate, while being less critical for the final result, for larger 1-x). Because this can result in errors slightly above those accepted in glibc, this interval is instead dealt with by polynomial approximations. Separate polynomial approximations to (|gamma(x)|-1)(x-n)/(x-x0) are used for each interval of length 1/8 from -3 to -2, where n (-3 or -2) is the nearest integer to the 1/8-interval and x0 is the zero of lgamma in the relevant half-integer interval (-3 to -2.5 or -2.5 to -2). Together, the two approaches are intended to give sufficient accuracy for all negative arguments in the problem range. Outside that range, the previous implementation continues to be used. Tested for x86_64, x86, mips64 and powerpc. The mips64 and powerpc testing shows up pre-existing problems for ldbl-128 and ldbl-128ibm with large negative arguments giving spurious "invalid" exceptions (exposed by newly added tests for cases this patch doesn't affect the logic for); I'll address those problems separately. [BZ #2542] [BZ #2543] [BZ #2558] * sysdeps/ieee754/dbl-64/e_lgamma_r.c (__ieee754_lgamma_r): Call __lgamma_neg for arguments from -28.0 to -2.0. * sysdeps/ieee754/flt-32/e_lgammaf_r.c (__ieee754_lgammaf_r): Call __lgamma_negf for arguments from -15.0 to -2.0. * sysdeps/ieee754/ldbl-128/e_lgammal_r.c (__ieee754_lgammal_r): Call __lgamma_negl for arguments from -48.0 or -50.0 to -2.0. * sysdeps/ieee754/ldbl-96/e_lgammal_r.c (__ieee754_lgammal_r): Call __lgamma_negl for arguments from -33.0 to -2.0. * sysdeps/ieee754/dbl-64/lgamma_neg.c: New file. * sysdeps/ieee754/dbl-64/lgamma_product.c: Likewise. * sysdeps/ieee754/flt-32/lgamma_negf.c: Likewise. * sysdeps/ieee754/flt-32/lgamma_productf.c: Likewise. * sysdeps/ieee754/ldbl-128/lgamma_negl.c: Likewise. * sysdeps/ieee754/ldbl-128/lgamma_productl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/lgamma_negl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/lgamma_productl.c: Likewise. * sysdeps/ieee754/ldbl-96/lgamma_negl.c: Likewise. * sysdeps/ieee754/ldbl-96/lgamma_product.c: Likewise. * sysdeps/ieee754/ldbl-96/lgamma_productl.c: Likewise. * sysdeps/generic/math_private.h (__lgamma_negf): New prototype. (__lgamma_neg): Likewise. (__lgamma_negl): Likewise. (__lgamma_product): Likewise. (__lgamma_productl): Likewise. * math/Makefile (libm-calls): Add lgamma_neg and lgamma_product. * math/auto-libm-test-in: Add more tests of lgamma. * math/auto-libm-test-out: Regenerated. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2015-09-11 06:27:58 +08:00
lgamma -0.25
lgamma -0.5
lgamma -0.75
lgamma -1.25
lgamma -1.5
lgamma -1.75
lgamma -0x2.08p0
lgamma -0x2.1p0
lgamma -0x2.18p0
lgamma -0x2.2p0
lgamma -0x2.28p0
lgamma -0x2.3p0
lgamma -0x2.38p0
lgamma -0x2.4p0
lgamma -0x2.48p0
lgamma -0x2.5p0
lgamma -0x2.58p0
lgamma -0x2.6p0
lgamma -0x2.68p0
lgamma -0x2.7p0
lgamma -0x2.78p0
lgamma -0x2.8p0
lgamma -0x2.88p0
lgamma -0x2.9p0
lgamma -0x2.98p0
lgamma -0x2.ap0
lgamma -0x2.a8p0
lgamma -0x2.bp0
lgamma -0x2.b8p0
lgamma -0x2.cp0
lgamma -0x2.c8p0
lgamma -0x2.dp0
lgamma -0x2.d8p0
lgamma -0x2.ep0
lgamma -0x2.e8p0
lgamma -0x2.fp0
lgamma -0x2.f8p0
lgamma -0x3.08p0
lgamma -0x3.1p0
lgamma -0x3.18p0
lgamma -0x3.2p0
lgamma -0x3.28p0
lgamma -0x3.3p0
lgamma -0x3.38p0
lgamma -0x3.4p0
lgamma -0x3.48p0
lgamma -0x3.5p0
lgamma -0x3.58p0
lgamma -0x3.6p0
lgamma -0x3.68p0
lgamma -0x3.7p0
lgamma -0x3.78p0
lgamma -0x3.8p0
lgamma -0x3.88p0
lgamma -0x3.9p0
lgamma -0x3.98p0
lgamma -0x3.ap0
lgamma -0x3.a8p0
lgamma -0x3.bp0
lgamma -0x3.b8p0
lgamma -0x3.cp0
lgamma -0x3.c8p0
lgamma -0x3.dp0
lgamma -0x3.d8p0
lgamma -0x3.ep0
lgamma -0x3.e8p0
lgamma -0x3.fp0
lgamma -0x3.f8p0
lgamma -4.25
lgamma -4.5
lgamma -4.75
lgamma -5.25
lgamma -5.5
lgamma -5.75
lgamma -6.25
lgamma -6.5
lgamma -6.75
lgamma -7.25
lgamma -7.5
lgamma -7.75
lgamma -8.25
lgamma -8.5
lgamma -8.75
lgamma -9.25
lgamma -9.5
lgamma -9.75
lgamma -10.25
lgamma -10.5
lgamma -10.75
lgamma -11.25
lgamma -11.5
lgamma -11.75
lgamma -12.25
lgamma -12.5
lgamma -12.75
lgamma -13.25
lgamma -13.5
lgamma -13.75
lgamma -14.25
lgamma -14.5
lgamma -14.75
lgamma -15.25
lgamma -15.5
lgamma -15.75
lgamma -16.25
lgamma -16.5
lgamma -16.75
lgamma -17.25
lgamma -17.5
lgamma -17.75
lgamma -18.25
lgamma -18.5
lgamma -18.75
lgamma -19.25
lgamma -19.5
lgamma -19.75
lgamma -20.25
lgamma -20.5
lgamma -20.75
lgamma -21.25
lgamma -21.5
lgamma -21.75
lgamma -22.25
lgamma -22.5
lgamma -22.75
lgamma -23.25
lgamma -23.5
lgamma -23.75
lgamma -24.25
lgamma -24.5
lgamma -24.75
lgamma -25.25
lgamma -25.5
lgamma -25.75
lgamma -26.25
lgamma -26.5
lgamma -26.75
lgamma -27.25
lgamma -27.5
lgamma -27.75
lgamma -28.25
lgamma -28.5
lgamma -28.75
lgamma -29.25
lgamma -29.5
lgamma -29.75
lgamma -30.25
lgamma -30.5
lgamma -30.75
lgamma -31.25
lgamma -31.5
lgamma -31.75
lgamma -32.25
lgamma -32.5
lgamma -32.75
lgamma -33.25
lgamma -33.5
lgamma -33.75
lgamma -34.25
lgamma -34.5
lgamma -34.75
lgamma -35.25
lgamma -35.5
lgamma -35.75
lgamma -36.25
lgamma -36.5
lgamma -36.75
lgamma -37.25
lgamma -37.5
lgamma -37.75
lgamma -38.25
lgamma -38.5
lgamma -38.75
lgamma -39.25
lgamma -39.5
lgamma -39.75
lgamma -40.25
lgamma -40.5
lgamma -40.75
lgamma -41.25
lgamma -41.5
lgamma -41.75
lgamma -42.25
lgamma -42.5
lgamma -42.75
lgamma -43.25
lgamma -43.5
lgamma -43.75
lgamma -44.25
lgamma -44.5
lgamma -44.75
lgamma -45.25
lgamma -45.5
lgamma -45.75
lgamma -46.25
lgamma -46.5
lgamma -46.75
lgamma -47.25
lgamma -47.5
lgamma -47.75
lgamma -48.25
lgamma -48.5
lgamma -48.75
lgamma -49.25
lgamma -49.5
lgamma -49.75
lgamma -50.25
lgamma -50.5
lgamma -50.75
lgamma -51.25
lgamma -51.5
lgamma -51.75
lgamma -52.25
lgamma -52.5
lgamma -52.75
lgamma -53.25
lgamma -53.5
lgamma -53.75
lgamma -54.25
lgamma -54.5
lgamma -54.75
lgamma -55.25
lgamma -55.5
lgamma -55.75
lgamma -56.25
lgamma -56.5
lgamma -56.75
lgamma -57.25
lgamma -57.5
lgamma -57.75
lgamma -58.25
lgamma -58.5
lgamma -58.75
lgamma -59.25
lgamma -59.5
lgamma -59.75
lgamma -60.25
lgamma -60.5
lgamma -60.75
# Integers +/- 1ulp for ldbl-128 (gen-auto-libm-tests will round these
# to produce integers +/- 1ulp for other formats).
lgamma -0xf.fffffffffffffffffffffffffff8p-4
lgamma -0x1.0000000000000000000000000001p+0
lgamma -0x1.ffffffffffffffffffffffffffffp+0
lgamma -0x2.0000000000000000000000000002p+0
lgamma -0x2.fffffffffffffffffffffffffffep+0
lgamma -0x3.0000000000000000000000000002p+0
lgamma -0x3.fffffffffffffffffffffffffffep+0
lgamma -0x4.0000000000000000000000000004p+0
lgamma -0x4.fffffffffffffffffffffffffffcp+0
lgamma -0x5.0000000000000000000000000004p+0
lgamma -0x5.fffffffffffffffffffffffffffcp+0
lgamma -0x6.0000000000000000000000000004p+0
lgamma -0x6.fffffffffffffffffffffffffffcp+0
lgamma -0x7.0000000000000000000000000004p+0
lgamma -0x7.fffffffffffffffffffffffffffcp+0
lgamma -0x8.0000000000000000000000000008p+0
lgamma -0x8.fffffffffffffffffffffffffff8p+0
lgamma -0x9.0000000000000000000000000008p+0
lgamma -0x9.fffffffffffffffffffffffffff8p+0
lgamma -0xa.0000000000000000000000000008p+0
lgamma -0xa.fffffffffffffffffffffffffff8p+0
lgamma -0xb.0000000000000000000000000008p+0
lgamma -0xb.fffffffffffffffffffffffffff8p+0
lgamma -0xc.0000000000000000000000000008p+0
lgamma -0xc.fffffffffffffffffffffffffff8p+0
lgamma -0xd.0000000000000000000000000008p+0
lgamma -0xd.fffffffffffffffffffffffffff8p+0
lgamma -0xe.0000000000000000000000000008p+0
lgamma -0xe.fffffffffffffffffffffffffff8p+0
lgamma -0xf.0000000000000000000000000008p+0
lgamma -0xf.fffffffffffffffffffffffffff8p+0
lgamma -0x1.0000000000000000000000000001p+4
lgamma -0x1.0fffffffffffffffffffffffffffp+4
lgamma -0x1.1000000000000000000000000001p+4
lgamma -0x1.1fffffffffffffffffffffffffffp+4
lgamma -0x1.2000000000000000000000000001p+4
lgamma -0x1.2fffffffffffffffffffffffffffp+4
lgamma -0x1.3000000000000000000000000001p+4
lgamma -0x1.3fffffffffffffffffffffffffffp+4
lgamma -0x1.4000000000000000000000000001p+4
lgamma -0x1.4fffffffffffffffffffffffffffp+4
lgamma -0x1.5000000000000000000000000001p+4
lgamma -0x1.5fffffffffffffffffffffffffffp+4
lgamma -0x1.6000000000000000000000000001p+4
lgamma -0x1.6fffffffffffffffffffffffffffp+4
lgamma -0x1.7000000000000000000000000001p+4
lgamma -0x1.7fffffffffffffffffffffffffffp+4
lgamma -0x1.8000000000000000000000000001p+4
lgamma -0x1.8fffffffffffffffffffffffffffp+4
lgamma -0x1.9000000000000000000000000001p+4
lgamma -0x1.9fffffffffffffffffffffffffffp+4
lgamma -0x1.a000000000000000000000000001p+4
lgamma -0x1.afffffffffffffffffffffffffffp+4
lgamma -0x1.b000000000000000000000000001p+4
lgamma -0x1.bfffffffffffffffffffffffffffp+4
lgamma -0x1.c000000000000000000000000001p+4
lgamma -0x1.cfffffffffffffffffffffffffffp+4
lgamma -0x1.d000000000000000000000000001p+4
lgamma -0x1.dfffffffffffffffffffffffffffp+4
lgamma -0x1.e000000000000000000000000001p+4
lgamma -0x1.efffffffffffffffffffffffffffp+4
lgamma -0x1.f000000000000000000000000001p+4
lgamma -0x1.ffffffffffffffffffffffffffffp+4
lgamma -0x2.0000000000000000000000000002p+4
lgamma -0x2.0ffffffffffffffffffffffffffep+4
lgamma -0x2.1000000000000000000000000002p+4
lgamma -0x2.1ffffffffffffffffffffffffffep+4
lgamma -0x2.2000000000000000000000000002p+4
lgamma -0x2.2ffffffffffffffffffffffffffep+4
lgamma -0x2.3000000000000000000000000002p+4
lgamma -0x2.3ffffffffffffffffffffffffffep+4
lgamma -0x2.4000000000000000000000000002p+4
lgamma -0x2.4ffffffffffffffffffffffffffep+4
lgamma -0x2.5000000000000000000000000002p+4
lgamma -0x2.5ffffffffffffffffffffffffffep+4
lgamma -0x2.6000000000000000000000000002p+4
lgamma -0x2.6ffffffffffffffffffffffffffep+4
lgamma -0x2.7000000000000000000000000002p+4
lgamma -0x2.7ffffffffffffffffffffffffffep+4
lgamma -0x2.8000000000000000000000000002p+4
lgamma -0x2.8ffffffffffffffffffffffffffep+4
lgamma -0x2.9000000000000000000000000002p+4
lgamma -0x2.9ffffffffffffffffffffffffffep+4
lgamma -0x2.a000000000000000000000000002p+4
lgamma -0x2.affffffffffffffffffffffffffep+4
lgamma -0x2.b000000000000000000000000002p+4
lgamma -0x2.bffffffffffffffffffffffffffep+4
lgamma -0x2.c000000000000000000000000002p+4
lgamma -0x2.cffffffffffffffffffffffffffep+4
lgamma -0x2.d000000000000000000000000002p+4
lgamma -0x2.dffffffffffffffffffffffffffep+4
lgamma -0x2.e000000000000000000000000002p+4
lgamma -0x2.effffffffffffffffffffffffffep+4
lgamma -0x2.f000000000000000000000000002p+4
lgamma -0x2.fffffffffffffffffffffffffffep+4
lgamma -0x3.0000000000000000000000000002p+4
lgamma -0x3.0ffffffffffffffffffffffffffep+4
lgamma -0x3.1000000000000000000000000002p+4
lgamma -0x3.1ffffffffffffffffffffffffffep+4
lgamma -0x3.2000000000000000000000000002p+4
lgamma -0x3.2ffffffffffffffffffffffffffep+4
lgamma -0x3.3000000000000000000000000002p+4
lgamma -0x3.3ffffffffffffffffffffffffffep+4
lgamma -0x3.4000000000000000000000000002p+4
lgamma -0x3.4ffffffffffffffffffffffffffep+4
lgamma -0x3.5000000000000000000000000002p+4
lgamma -0x3.5ffffffffffffffffffffffffffep+4
lgamma -0x3.6000000000000000000000000002p+4
lgamma -0x3.6ffffffffffffffffffffffffffep+4
lgamma -0x3.7000000000000000000000000002p+4
lgamma -0x3.7ffffffffffffffffffffffffffep+4
lgamma -0x3.8000000000000000000000000002p+4
lgamma -0x3.8ffffffffffffffffffffffffffep+4
lgamma -0x3.9000000000000000000000000002p+4
lgamma -0x3.9ffffffffffffffffffffffffffep+4
lgamma -0x3.a000000000000000000000000002p+4
lgamma -0x3.affffffffffffffffffffffffffep+4
lgamma -0x3.b000000000000000000000000002p+4
lgamma -0x3.bffffffffffffffffffffffffffep+4
lgamma -0x3.c000000000000000000000000002p+4
# Zeroes of lgamma, until the point where they just duplicate integers
# +/- 1ulp.
lgamma -0x2.74ff92c01f0d82abec9f315f1a0712c334804d9cp+0
lgamma -0x2.bf6821437b20197995a4b4641eaebf4b00b482ap+0
lgamma -0x3.24c1b793cb35efb8be699ad3d9ba65454cb7fac8p+0
lgamma -0x3.f48e2a8f85fca170d4561291236cc320a4887d1cp+0
lgamma -0x4.0a139e16656030c39f0b0de18112ac17bfd6be9p+0
lgamma -0x4.fdd5de9bbabf3510d0aa4076988501d7d7812528p+0
lgamma -0x5.021a95fc2db6432a4c56e595394decc6af0430d8p+0
lgamma -0x5.ffa4bd647d0357dd4ed62cbd31edf8e3f8e5deb8p+0
lgamma -0x6.005ac9625f233b607c2d96d16385cb86ac56934p+0
lgamma -0x6.fff2fddae1bbff3d626b65c23fd21f40300a3ba8p+0
lgamma -0x7.000cff7b7f87adf4482dcdb98782ab2661ca58bp+0
lgamma -0x7.fffe5fe05673c3ca9e82b522b0ca9d2e8837cd2p+0
lgamma -0x8.0001a01459fc9f60cb3cec1cec8576677ca538ep+0
lgamma -0x8.ffffd1c425e80ffc864e95749259e7e20210e8p+0
lgamma -0x9.00002e3bb47d86d6d843fedc351deb7ad09ec5fp+0
lgamma -0x9.fffffb606bdfdcd062ae77a50547c69d2eb6f34p+0
lgamma -0xa.0000049f93bb9927b45d95e15441e03086db914p+0
lgamma -0xa.ffffff9466e9f1b36dacd2adbd18d05a4e45806p+0
lgamma -0xb.0000006b9915315d965a6ffea40e4bea39000ddp+0
lgamma -0xb.fffffff7089387387de41acc3d3c978bd839c8cp+0
lgamma -0xc.00000008f76c7731567c0f0250f387920df5676p+0
lgamma -0xc.ffffffff4f6dcf617f97a5ffc757d548d2890cdp+0
lgamma -0xd.00000000b092309c06683dd1b903e3700857a16p+0
lgamma -0xd.fffffffff36345ab9e184a3e09d1176dc48e47fp+0
lgamma -0xe.000000000c9cba545e94e75ec5718f753e2501ep+0
lgamma -0xe.ffffffffff28c060c6604ef30371f89d37357cap+0
lgamma -0xf.0000000000d73f9f399bd0e420f85e9ee31b0b9p+0
lgamma -0xf.fffffffffff28c060c6621f512e72e4d113626ap+0
lgamma -0x1.000000000000d73f9f399da1424bf93b91f177dp+4
lgamma -0x1.0ffffffffffff3569c47e7a93e1c46a08a2e008ap+4
lgamma -0x1.1000000000000ca963b8185688876ca5a3a64ec2p+4
lgamma -0x1.1fffffffffffff4bec3ce234132d08b2b726187cp+4
lgamma -0x1.20000000000000b413c31dcbeca4c3b2ffacbb4ap+4
lgamma -0x1.2ffffffffffffff685b25cbf5f545ced932e3848p+4
lgamma -0x1.30000000000000097a4da340a0ab81b7b1f1f002p+4
lgamma -0x1.3fffffffffffffff86af516ff7f76bd67e720d58p+4
lgamma -0x1.40000000000000007950ae9008089413ccc8a354p+4
lgamma -0x1.4ffffffffffffffffa391c4248c2a39cfdd49d4ap+4
lgamma -0x1.500000000000000005c6e3bdb73d5c62f55ed532p+4
lgamma -0x1.5fffffffffffffffffbcc71a49201eb5aeb96c74p+4
lgamma -0x1.6000000000000000004338e5b6dfe14a513fb4dp+4
lgamma -0x1.6ffffffffffffffffffd13c97d9d38fcc4d08d7p+4
lgamma -0x1.70000000000000000002ec368262c7033b2f6f32p+4
lgamma -0x1.7fffffffffffffffffffe0d30fe68d0a88335b4cp+4
lgamma -0x1.800000000000000000001f2cf01972f577cca4b4p+4
lgamma -0x1.8ffffffffffffffffffffec0c3322e9a0572b1bcp+4
lgamma -0x1.90000000000000000000013f3ccdd165fa8d4e44p+4
lgamma -0x1.9ffffffffffffffffffffff3b8bd01cad8d32e38p+4
lgamma -0x1.a0000000000000000000000c4742fe35272cd1c8p+4
lgamma -0x1.afffffffffffffffffffffff8b9538f48cc5737ep+4
lgamma -0x1.b00000000000000000000000746ac70b733a8c82p+4
lgamma -0x1.bffffffffffffffffffffffffbd79d7672bde8b2p+4
lgamma -0x1.c00000000000000000000000042862898d42174ep+4
lgamma -0x1.cfffffffffffffffffffffffffdb4c0ce9794ea6p+4
lgamma -0x1.d000000000000000000000000024b3f31686b15ap+4
lgamma -0x1.dffffffffffffffffffffffffffec6cd3afb82ap+4
lgamma -0x1.e0000000000000000000000000013932c5047d6p+4
lgamma 0x8.8d2d5p+0
lgamma 0x1.6a324ap+52
lgamma 0x9.62f59p+0
lgamma 0xa.d55d6b4d78e28p+0
lgamma 0x8.d6315p+0
lgamma 0xb.2e679p+0
lgamma 0xb.01191p+0
lgamma 0xb.26fdap+0
lgamma 0xb.4ad0ap+0
lgamma 0xe.7a678p+20
Fix lgamma (negative) inaccuracy (bug 2542, bug 2543, bug 2558). The existing implementations of lgamma functions (except for the ia64 versions) use the reflection formula for negative arguments. This suffers large inaccuracy from cancellation near zeros of lgamma (near where the gamma function is +/- 1). This patch fixes this inaccuracy. For arguments above -2, there are no zeros and no large cancellation, while for sufficiently large negative arguments the zeros are so close to integers that even for integers +/- 1ulp the log(gamma(1-x)) term dominates and cancellation is not significant. Thus, it is only necessary to take special care about cancellation for arguments around a limited number of zeros. Accordingly, this patch uses precomputed tables of relevant zeros, expressed as the sum of two floating-point values. The log of the ratio of two sines can be computed accurately using log1p in cases where log would lose accuracy. The log of the ratio of two gamma(1-x) values can be computed using Stirling's approximation (the difference between two values of that approximation to lgamma being computable without computing the two values and then subtracting), with appropriate adjustments (which don't reduce accuracy too much) in cases where 1-x is too small to use Stirling's approximation directly. In the interval from -3 to -2, using the ratios of sines and of gamma(1-x) can still produce too much cancellation between those two parts of the computation (and that interval is also the worst interval for computing the ratio between gamma(1-x) values, which computation becomes more accurate, while being less critical for the final result, for larger 1-x). Because this can result in errors slightly above those accepted in glibc, this interval is instead dealt with by polynomial approximations. Separate polynomial approximations to (|gamma(x)|-1)(x-n)/(x-x0) are used for each interval of length 1/8 from -3 to -2, where n (-3 or -2) is the nearest integer to the 1/8-interval and x0 is the zero of lgamma in the relevant half-integer interval (-3 to -2.5 or -2.5 to -2). Together, the two approaches are intended to give sufficient accuracy for all negative arguments in the problem range. Outside that range, the previous implementation continues to be used. Tested for x86_64, x86, mips64 and powerpc. The mips64 and powerpc testing shows up pre-existing problems for ldbl-128 and ldbl-128ibm with large negative arguments giving spurious "invalid" exceptions (exposed by newly added tests for cases this patch doesn't affect the logic for); I'll address those problems separately. [BZ #2542] [BZ #2543] [BZ #2558] * sysdeps/ieee754/dbl-64/e_lgamma_r.c (__ieee754_lgamma_r): Call __lgamma_neg for arguments from -28.0 to -2.0. * sysdeps/ieee754/flt-32/e_lgammaf_r.c (__ieee754_lgammaf_r): Call __lgamma_negf for arguments from -15.0 to -2.0. * sysdeps/ieee754/ldbl-128/e_lgammal_r.c (__ieee754_lgammal_r): Call __lgamma_negl for arguments from -48.0 or -50.0 to -2.0. * sysdeps/ieee754/ldbl-96/e_lgammal_r.c (__ieee754_lgammal_r): Call __lgamma_negl for arguments from -33.0 to -2.0. * sysdeps/ieee754/dbl-64/lgamma_neg.c: New file. * sysdeps/ieee754/dbl-64/lgamma_product.c: Likewise. * sysdeps/ieee754/flt-32/lgamma_negf.c: Likewise. * sysdeps/ieee754/flt-32/lgamma_productf.c: Likewise. * sysdeps/ieee754/ldbl-128/lgamma_negl.c: Likewise. * sysdeps/ieee754/ldbl-128/lgamma_productl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/lgamma_negl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/lgamma_productl.c: Likewise. * sysdeps/ieee754/ldbl-96/lgamma_negl.c: Likewise. * sysdeps/ieee754/ldbl-96/lgamma_product.c: Likewise. * sysdeps/ieee754/ldbl-96/lgamma_productl.c: Likewise. * sysdeps/generic/math_private.h (__lgamma_negf): New prototype. (__lgamma_neg): Likewise. (__lgamma_negl): Likewise. (__lgamma_product): Likewise. (__lgamma_productl): Likewise. * math/Makefile (libm-calls): Add lgamma_neg and lgamma_product. * math/auto-libm-test-in: Add more tests of lgamma. * math/auto-libm-test-out: Regenerated. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2015-09-11 06:27:58 +08:00
lgamma -0x2.dea4ccp-4
lgamma -0x2.dd306p-4
lgamma -0x1.bdc8bp+0
lgamma -0x4.0a82e8p-4
lgamma -0x1.bca67ap+0
lgamma -0x3.46446bb6a23aap+0
lgamma -0x3.f3d2c40911814p+0
log 1
log e
log 1/e
log 2
log 10
log 0.75
log min
log min_subnorm
log 0xb.0d5dfp-4
log 0x1.6c3f6p+0
log 0xa.ae688p-4
log 0x1.017f8ap+44
log 0x1.0b5c1ep+36
log 0x2.1b17c2887e938p+928
log 0x1.929d9cp+0
log 0x1.770072p+0
log10 1
log10 0.1
log10 10.0
log10 100.0
log10 10000.0
log10 e
log10 0.75
log10 min
log10 min_subnorm
log10 0x9.ad6e3p-4
log10 0x1.7163aep+0
log10 0xa.9d0d4p-4
log10 0x1.251ec6p+0
log10 0x1.022e82p+0
log10 0x9.b3727e3feb538p-4
log10 0xf.bf1b2p-4
log10 0x1.6b5f7ap+96
log1p 0
log1p -0
log1p e-1
log1p -0.25
log1p -0.875
log1p min
log1p min_subnorm
log1p -min
log1p -min_subnorm
log1p 0x1p10
log1p 0x1p20
log1p 0x1p30
log1p 0x1p50
log1p 0x1p60
log1p 0x1p100
log1p 0x1p1000
log1p max
log1p 0x7.2a4368p-4
log1p 0x6.d3a118p-4
log1p 0x5.03f228p+0
log1p 0x7.264963888ac9p-4
log1p 0x8.786bdp-4
log1p 0x7.89dc17790eeb4p-4
log1p 0x9.81ccf8887c24a7bp-4
log1p 0xa.5028608bd65f38dp-4
log1p 0x5.bf78873e20a2d468p-4
log1p 0x7.aa5198p-4
log1p 0x2.564fap+0
log1p 0x7.fc242a2235222ef8p-4
log1p -0x4.f37d3c9ce0b14bdd86eb157df5d4p-4
log1p 0x7.2eca50c4d93196362b4f37f6e8dcp-4
log1p -0x6.3fef3067427e43dfcde9e48f74bcp-4
log1p 0x6.af53d00fd2845d4772260ef5adc4p-4
log2 1
log2 e
log2 2.0
log2 16.0
log2 256.0
log2 0.75
Add more tests of log2. In testing for x86_64 on an AMD processor, I observed libm test failures of the form: testing long double (without inline functions) Failure: Test: log2_downward (0x2.b7e151628aed4p+0) Result: is: 1.44269504088896356633e+00 0xb.8aa3b295c17f67600000p-3 should be: 1.44269504088896356622e+00 0xb.8aa3b295c17f67500000p-3 difference: 1.08420217248550443400e-19 0x8.00000000000000000000p-66 ulp : 1.0000 max.ulp : 0.0000 Maximal error of `log2_downward' is : 1 ulp accepted: 0 ulp These issues arise because the maximum ulps when regenerating on one processor are not the same as on another processor, so regeneration on several processors may be needed when updating libm-test-ulps to avoid failures for some users testing glibc - but such regeneration on multiple processors is inconvenient. Causes can be: on x86 and, for x86_64, for long double, variation in results of x87 instructions for transcendental operations between processors; on x86, variation in compiler excess precision between compiler versions and configurations; on any processor where the compiler may contract expressions using fused multiply-add, variation in what contraction occurs. Although it's hard to be sure libm-test-ulps covers all ulps that may be seen in any configuration for the given architecture, in practice it helps simply to add wider test coverage to make it more likely that, when testing on one processor, the ulps seen are the biggest that can be seen for that function on that processor, and hopefully they are also the biggest that can be seen for that function in other configurations for that architecture. Thus, this patch adds some tests of log2 that increase the ulps I see on x86_64 on an Intel processor, so that hopefully future from-scratch regenerations on that processor will produce ulps big enough not to have errors from testing on AMD processors. These tests were found by randomly generating inputs and seeing what produced ulps larger than those currently in libm-test-ulps. Of course such increases also improve the accuracy of the empirical table of known ulps generated from libm-test-ulps files that goes in the manual. Tested for x86_64 and x86 and ulps updated accordingly. * math/auto-libm-test-in: Add more tests of log2. * math/auto-libm-test-out: Regenerated. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2015-03-25 07:06:28 +08:00
log2 0x1.28d3b4p+0
log2 0xe.d99dap-4
log2 0x1.63d202d04392cp+0
log2 0xf.d9ce0b1a50e08p-4
log2 0x1.07465bdc7e41b52ep+0
log2 0xf.4dfb4p-48
log2 0x1.0a588ep+0
log2 0xb.e77c6p-4
log2 0x1.4fe37ep+0
log2 0x3.9b0754p+8
log2 0xb.e132ap-4
log2 0xb.5bf82dc51f02035p-4
log2 0xb.7704dc9beb05p-4
log2 0xb.56f63c18e93eecdp-4
log2 min
log2 min_subnorm
pow 0 0
pow 0 -0
pow -0 0
pow -0 -0
pow 10 0
pow 10 -0
pow -10 0
pow -10 -0
pow 1 1
pow 1 -1
pow 1 1.25
pow 1 -1.25
pow 1 0x1p62
pow 1 0x1p63
pow 1 0x1p64
pow 1 0x1p72
pow 1 min_subnorm
pow 1 -min_subnorm
# pow (x, +-0) == 1.
pow 32.75 0
pow 32.75 -0
pow -32.75 0
pow -32.75 -0
pow 0x1p72 0
pow 0x1p72 -0
pow 0x1p-72 0
pow 0x1p-72 -0
pow 0x1p72 0x1p72
pow 10 -0x1p72
pow max max
pow 10 -max
pow 0 1
pow 0 11
pow -0 1
pow -0 11
pow 0 2
pow 0 11.1
pow -0 2
pow -0 11.1
# pow (+0, y) == +0 for y an odd integer > 0.
pow 0.0 27
pow 0.0 0xffffff
pow 0.0 0x1.fffffffffffffp+52
pow 0.0 0x1.fffffffffffffffep+63
pow 0.0 0x1.ffffffffffffffffffffffffff8p+105
pow 0.0 0x1.ffffffffffffffffffffffffffffp+112
# pow (-0, y) == -0 for y an odd integer > 0.
pow -0 27
pow -0 0xffffff
pow -0 0x1fffffe
pow -0 0x1.fffffffffffffp+52
pow -0 0x1.fffffffffffffp+53
pow -0 0x1.fffffffffffffffep+63
pow -0 0x1.fffffffffffffffep+64
pow -0 0x1.ffffffffffffffffffffffffff8p+105
pow -0 0x1.ffffffffffffffffffffffffff8p+106
pow -0 0x1.ffffffffffffffffffffffffffffp+112
pow -0 0x1.ffffffffffffffffffffffffffffp+113
# pow (+0, y) == +0 for y > 0 and not an odd integer.
pow 0.0 4
pow 0.0 0x1p24
pow 0.0 0x1p127
pow 0.0 max
pow 0.0 min_subnorm
# pow (-0, y) == +0 for y > 0 and not an odd integer.
pow -0 4
pow -0 0x1p24
pow -0 0x1p127
pow -0 max
pow -0 min_subnorm
pow 16 0.25
pow 0x1p64 0.125
pow 2 4
pow 256 8
pow 0.75 1.25
pow -7.49321e+133 -9.80818e+16
pow -1.0 -0xffffff
pow -1.0 -0x1fffffe
pow -1.0 -0x1.fffffffffffffp+52
pow -1.0 -0x1.fffffffffffffp+53
pow -1.0 -0x1.fffffffffffffffep+63
pow -1.0 -0x1.fffffffffffffffep+64
pow -1.0 -0x1.ffffffffffffffffffffffffff8p+105
pow -1.0 -0x1.ffffffffffffffffffffffffff8p+106
pow -1.0 -0x1.ffffffffffffffffffffffffffffp+112
pow -1.0 -0x1.ffffffffffffffffffffffffffffp+113
pow -1.0 -max
pow -1.0 0xffffff
pow -1.0 0x1fffffe
pow -1.0 0x1.fffffffffffffp+52
pow -1.0 0x1.fffffffffffffp+53
pow -1.0 0x1.fffffffffffffffep+63
pow -1.0 0x1.fffffffffffffffep+64
pow -1.0 0x1.ffffffffffffffffffffffffff8p+105
pow -1.0 0x1.ffffffffffffffffffffffffff8p+106
pow -1.0 0x1.ffffffffffffffffffffffffffffp+112
pow -1.0 0x1.ffffffffffffffffffffffffffffp+113
pow -1.0 max
pow -2.0 126
pow -2.0 127
pow -2.0 -126
pow -2.0 -127
pow -2.0 -0xffffff
pow -2.0 -0x1fffffe
pow -2.0 -0x1.fffffffffffffp+52
pow -2.0 -0x1.fffffffffffffp+53
pow -2.0 -0x1.fffffffffffffffep+63
pow -2.0 -0x1.fffffffffffffffep+64
pow -2.0 -0x1.ffffffffffffffffffffffffff8p+105
pow -2.0 -0x1.ffffffffffffffffffffffffff8p+106
pow -2.0 -0x1.ffffffffffffffffffffffffffffp+112
pow -2.0 -0x1.ffffffffffffffffffffffffffffp+113
pow -2.0 -max
pow -2.0 0xffffff
pow -2.0 0x1fffffe
pow -2.0 0x1.fffffffffffffp+52
pow -2.0 0x1.fffffffffffffp+53
pow -2.0 0x1.fffffffffffffffep+63
pow -2.0 0x1.fffffffffffffffep+64
pow -2.0 0x1.ffffffffffffffffffffffffff8p+105
pow -2.0 0x1.ffffffffffffffffffffffffff8p+106
pow -2.0 0x1.ffffffffffffffffffffffffffffp+112
pow -2.0 0x1.ffffffffffffffffffffffffffffp+113
pow -2.0 max
pow -max -2
pow -max -3
pow -max 2
pow -max 3
pow -max -0xffffff
pow -max -0x1fffffe
pow -max -0x1.fffffffffffffp+52
pow -max -0x1.fffffffffffffp+53
pow -max -0x1.fffffffffffffffep+63
pow -max -0x1.fffffffffffffffep+64
pow -max -0x1.ffffffffffffffffffffffffff8p+105
pow -max -0x1.ffffffffffffffffffffffffff8p+106
pow -max -0x1.ffffffffffffffffffffffffffffp+112
pow -max -0x1.ffffffffffffffffffffffffffffp+113
pow -max -max
pow -max 0xffffff
pow -max 0x1fffffe
pow -max 0x1.fffffffffffffp+52
pow -max 0x1.fffffffffffffp+53
pow -max 0x1.fffffffffffffffep+63
pow -max 0x1.fffffffffffffffep+64
pow -max 0x1.ffffffffffffffffffffffffff8p+105
pow -max 0x1.ffffffffffffffffffffffffff8p+106
pow -max 0x1.ffffffffffffffffffffffffffffp+112
pow -max 0x1.ffffffffffffffffffffffffffffp+113
pow -max max
Fix pow overflow in non-default rounding modes (bug 16315). This patch fixes bug 16315, bad pow handling of overflow/underflow in non-default rounding modes. Tests of pow are duly converted to ALL_RM_TEST to run all tests in all rounding modes. There are two main issues here. First, various implementations compute a negative result by negating a positive result, but this yields inappropriate overflow / underflow values for directed rounding, so either overflow / underflow results need recomputing in the correct sign, or the relevant overflowing / underflowing operation needs to be made to have a result of the correct sign. Second, the dbl-64 implementation sets FE_TONEAREST internally; in the overflow / underflow case, the result needs recomputing in the original rounding mode. Tested x86_64 and x86 and ulps updated accordingly. [BZ #16315] * sysdeps/i386/fpu/e_pow.S (__ieee754_pow): Ensure possibly overflowing or underflowing operations take place with sign of result. * sysdeps/i386/fpu/e_powf.S (__ieee754_powf): Likewise. * sysdeps/i386/fpu/e_powl.S (__ieee754_powl): Likewise. * sysdeps/ieee754/dbl-64/e_pow.c: Include <math.h>. (__ieee754_pow): Recompute overflowing and underflowing results in original rounding mode. * sysdeps/x86/fpu/powl_helper.c: Include <stdbool.h>. (__powl_helper): Allow negative argument X and scale negated value as needed. Avoid passing value outside [-1, 1] to f2xm1. * sysdeps/x86_64/fpu/e_powl.S (__ieee754_powl): Ensure possibly overflowing or underflowing operations take place with sign of result. * sysdeps/x86_64/fpu/multiarch/e_pow.c [HAVE_FMA4_SUPPORT]: Include <math.h>. * math/auto-libm-test-in: Add more tests of pow. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (pow_test): Use ALL_RM_TEST. (pow_tonearest_test_data): Remove. (pow_test_tonearest): Likewise. (pow_towardzero_test_data): Likewise. (pow_test_towardzero): Likewise. (pow_downward_test_data): Likewise. (pow_test_downward): Likewise. (pow_upward_test_data): Likewise. (pow_test_upward): Likewise. (main): Don't call removed functions. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2014-06-24 04:12:33 +08:00
pow -0x1p65 2
pow -0x1p65 3
pow -0x1p65 4
pow -0x1p65 5
pow -0x1p43 3
pow -0x1p43 4
pow -0x1p43 5
pow -0x1p33 4
pow -0x1p33 5
pow -0x1p26 5
pow -0x1p-65 -2
pow -0x1p-65 -3
pow -0x1p-65 -4
pow -0x1p-65 -5
pow -0x1p-43 -3
pow -0x1p-43 -4
pow -0x1p-43 -5
pow -0x1p-33 -4
pow -0x1p-33 -5
pow -0x1p-26 -5
pow -0x1p513 2
pow -0x1p513 3
pow -0x1p513 4
pow -0x1p513 5
pow -0x1p342 3
pow -0x1p342 4
pow -0x1p342 5
pow -0x1p257 4
pow -0x1p257 5
pow -0x1p205 5
pow -0x1p-513 -2
pow -0x1p-513 -3
pow -0x1p-513 -4
pow -0x1p-513 -5
pow -0x1p-342 -3
pow -0x1p-342 -4
pow -0x1p-342 -5
pow -0x1p-257 -4
pow -0x1p-257 -5
pow -0x1p-205 -5
pow -0x1p8192 2
pow -0x1p8192 3
pow -0x1p8192 4
pow -0x1p8192 5
pow -0x1p5462 3
pow -0x1p5462 4
pow -0x1p5462 5
pow -0x1p4097 4
pow -0x1p4097 5
pow -0x1p3277 5
pow -0x1p64 257
pow -0x1p-8192 -2
pow -0x1p-8192 -3
pow -0x1p-8192 -4
pow -0x1p-8192 -5
pow -0x1p-5462 -3
pow -0x1p-5462 -4
pow -0x1p-5462 -5
pow -0x1p-4097 -4
pow -0x1p-4097 -5
pow -0x1p-3277 -5
pow -0x1p-64 -257
pow -0.5 126
pow -0.5 127
pow -0.5 -126
pow -0.5 -127
pow -0.5 -0xffffff
pow -0.5 -0x1fffffe
pow -0.5 -0x1.fffffffffffffp+52
pow -0.5 -0x1.fffffffffffffp+53
pow -0.5 -0x1.fffffffffffffffep+63
pow -0.5 -0x1.fffffffffffffffep+64
pow -0.5 -0x1.ffffffffffffffffffffffffff8p+105
pow -0.5 -0x1.ffffffffffffffffffffffffff8p+106
pow -0.5 -0x1.ffffffffffffffffffffffffffffp+112
pow -0.5 -0x1.ffffffffffffffffffffffffffffp+113
pow -0.5 -max
pow -0.5 0xffffff
pow -0.5 0x1fffffe
pow -0.5 0x1.fffffffffffffp+52
pow -0.5 0x1.fffffffffffffp+53
pow -0.5 0x1.fffffffffffffffep+63
pow -0.5 0x1.fffffffffffffffep+64
pow -0.5 0x1.ffffffffffffffffffffffffff8p+105
pow -0.5 0x1.ffffffffffffffffffffffffff8p+106
pow -0.5 0x1.ffffffffffffffffffffffffffffp+112
pow -0.5 0x1.ffffffffffffffffffffffffffffp+113
pow -0.5 max
pow -min -2
pow -min -3
pow -min 1
pow -min 2
pow -min 3
pow -min -0xffffff
pow -min -0x1fffffe
pow -min -0x1.fffffffffffffp+52
pow -min -0x1.fffffffffffffp+53
pow -min -0x1.fffffffffffffffep+63
pow -min -0x1.fffffffffffffffep+64
pow -min -0x1.ffffffffffffffffffffffffff8p+105
pow -min -0x1.ffffffffffffffffffffffffff8p+106
pow -min -0x1.ffffffffffffffffffffffffffffp+112
pow -min -0x1.ffffffffffffffffffffffffffffp+113
pow -min -max
pow -min 0xffffff
pow -min 0x1fffffe
pow -min 0x1.fffffffffffffp+52
pow -min 0x1.fffffffffffffp+53
pow -min 0x1.fffffffffffffffep+63
pow -min 0x1.fffffffffffffffep+64
pow -min 0x1.ffffffffffffffffffffffffff8p+105
pow -min 0x1.ffffffffffffffffffffffffff8p+106
pow -min 0x1.ffffffffffffffffffffffffffffp+112
pow -min 0x1.ffffffffffffffffffffffffffffp+113
pow -min max
pow 0x0.ffffffp0 10
pow 0x0.ffffffp0 100
pow 0x0.ffffffp0 1000
pow 0x0.ffffffp0 0x1p24
pow 0x0.ffffffp0 0x1p30
pow 0x0.ffffffp0 0x1.234566p30
pow 0x0.ffffffp0 -10
pow 0x0.ffffffp0 -100
pow 0x0.ffffffp0 -1000
pow 0x0.ffffffp0 -0x1p24
pow 0x0.ffffffp0 -0x1p30
pow 0x0.ffffffp0 -0x1.234566p30
pow 0x1.000002p0 0x1p24
pow 0x1.000002p0 0x1.234566p29
pow 0x1.000002p0 -0x1.234566p29
pow 0x0.fffffffffffff8p0 0x1.23456789abcdfp62
pow 0x0.fffffffffffff8p0 -0x1.23456789abcdfp62
pow 0x1.0000000000001p0 0x1.23456789abcdfp61
pow 0x1.0000000000001p0 -0x1.23456789abcdfp61
pow 0x0.ffffffffffffffffp0 0x1.23456789abcdef0ep77
pow 0x0.ffffffffffffffffp0 -0x1.23456789abcdef0ep77
pow 0x1.0000000000000002p0 0x1.23456789abcdef0ep76
pow 0x1.0000000000000002p0 -0x1.23456789abcdef0ep76
pow 0x0.ffffffffffffffffffffffffffff8p0 0x1.23456789abcdef0123456789abcdp126
pow 0x0.ffffffffffffffffffffffffffff8p0 -0x1.23456789abcdef0123456789abcdp126
pow 0x1.0000000000000000000000000001p0 0x1.23456789abcdef0123456789abcdp125
pow 0x1.0000000000000000000000000001p0 -0x1.23456789abcdef0123456789abcdp125
pow -0x0.ffffffp0 10
pow -0x0.ffffffp0 100
pow -0x0.ffffffp0 1000
pow -0x0.ffffffp0 0x1p24
pow -0x0.ffffffp0 0x1p30
pow -0x0.ffffffp0 0x1.234566p30
pow -0x0.ffffffp0 -10
pow -0x0.ffffffp0 -100
pow -0x0.ffffffp0 -1000
pow -0x0.ffffffp0 -0x1p24
pow -0x0.ffffffp0 -0x1p30
pow -0x0.ffffffp0 -0x1.234566p30
pow -0x1.000002p0 0x1p24
pow -0x1.000002p0 0x1.234566p29
pow -0x1.000002p0 -0x1.234566p29
pow -0x0.fffffffffffff8p0 0x1.23456789abcdfp62
pow -0x0.fffffffffffff8p0 -0x1.23456789abcdfp62
pow -0x1.0000000000001p0 0x1.23456789abcdfp61
pow -0x1.0000000000001p0 -0x1.23456789abcdfp61
pow -0x0.ffffffffffffffffp0 0x1.23456789abcdef0ep77
pow -0x0.ffffffffffffffffp0 -0x1.23456789abcdef0ep77
pow -0x1.0000000000000002p0 0x1.23456789abcdef0ep76
pow -0x1.0000000000000002p0 -0x1.23456789abcdef0ep76
pow -0x0.ffffffffffffffffffffffffffff8p0 0x1.23456789abcdef0123456789abcdp126
pow -0x0.ffffffffffffffffffffffffffff8p0 -0x1.23456789abcdef0123456789abcdp126
pow -0x1.0000000000000000000000000001p0 0x1.23456789abcdef0123456789abcdp125
pow -0x1.0000000000000000000000000001p0 -0x1.23456789abcdef0123456789abcdp125
pow 0x1.000002p0 0x1p30
pow -0x1.000002p0 0x1p30
pow 0x1.000002p0 max
pow -0x1.000002p0 max
pow 0x1.00000ep0 0x1p30
pow -0x1.00000ep0 0x1p30
pow 0x1.00000ep0 max
pow -0x1.00000ep0 max
pow 1e4932 0.75
pow 1e4928 0.75
pow 1e4924 0.75
pow 1e4920 0.75
pow 10.0 4932.0
pow 10.0 4931.0
pow 10.0 4930.0
pow 10.0 4929.0
pow 10.0 -4931.0
pow 10.0 -4930.0
pow 10.0 -4929.0
pow 1e27 182.0
pow 1e27 -182.0
pow min_subnorm min_subnorm
pow min_subnorm -min_subnorm
pow max min_subnorm
pow max -min_subnorm
pow 0.99 min_subnorm
pow 0.99 -min_subnorm
pow 1.01 min_subnorm
pow 1.01 -min_subnorm
pow 2.0 -100000.0
pow 1.0625 1.125
pow 1.5 1.03125
pow 0x1.7d1a0a6f2p+681 1.5
pow 0x1.ce78f2p+0 -0x2.7f1f78p+4
pow 0xf.fffffp+124 -0x5.b5b648p+0
pow 0x1.430d4cp+0 0x5.0e462p+4
pow 0x9.8b82ap-4 -0x1.99907ap+12
sin 0
sin -0
sin pi/6
sin -pi/6
sin pi/2
sin -pi/2
sin 0.75
sin 0x1p65
sin -0x1p65
sin 0x1.7f4134p+103
sin 0.80190127184058835
sin 2.522464e-1
sin 1e22
sin 0x1p1023
sin 0x1p16383
sin 0x1p+120
sin 0x1p+127
sin 0x1.fffff8p+127
sin 0x1.fffffep+127
sin 0x1p+50
sin 0x1p+28
sin 0.93340582292648832662962377071381
sin 2.3328432680770916363144351635128
sin 3.7439477503636453548097051680088
sin 3.9225160069792437411706487182528
sin 4.0711651639931289992091478779912
sin 4.7858438478542097982426639646292
sin 5.9840767662578002727968851104379
sin 1
sin 2
sin 3
sin 4
sin 5
sin 6
sin 7
sin 8
sin 9
sin 10
sin 0x1.2001469775ce6p32
sin -0x3.3de320f6be87ep+1020
sin 0xe.9f1e5bc3bb88p+112
sin 0x4.7857dp+68
sin 0x6.287cc8749212e72p+0
sin -0x1.02e34cp+0
sin 0xf.f0274p+4
sin 0x3.042d88p+0
Fix sin, sincos missing underflows (bug 16526, bug 16538). Similar to various other bugs in this area, some sin and sincos implementations do not raise the underflow exception for subnormal arguments, when the result is tiny and inexact. This patch forces the exception in a similar way to previous fixes. Tested for x86_64, x86, mips64 and powerpc. [BZ #16526] [BZ #16538] * sysdeps/ieee754/dbl-64/s_sin.c: Include <float.h>. (__sin): Force underflow exception for arguments with small absolute value. * sysdeps/ieee754/flt-32/k_sinf.c: Include <float.h>. (__kernel_sinf): Force underflow exception for arguments with small absolute value. * sysdeps/ieee754/ldbl-128/k_sincosl.c: Include <float.h>. (__kernel_sincosl): Force underflow exception for arguments with small absolute value. * sysdeps/ieee754/ldbl-128/k_sinl.c: Include <float.h>. (__kernel_sinl): Force underflow exception for arguments with small absolute value. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: Include <float.h>. (__kernel_sincosl): Force underflow exception for arguments with small absolute value. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: Include <float.h>. (__kernel_sinl): Force underflow exception for arguments with small absolute value. * sysdeps/ieee754/ldbl-96/k_sinl.c: Include <float.h>. (__kernel_sinl): Force underflow exception for arguments with small absolute value. * sysdeps/powerpc/fpu/k_sinf.c: Include <float.h>. (__kernel_sinf): Force underflow exception for arguments with small absolute value. * math/auto-libm-test-in: Add more tests of sin and sincos. * math/auto-libm-test-out: Regenerated.
2015-06-24 06:24:20 +08:00
sin min
sin -min
sin min_subnorm
sin -min_subnorm
sincos 0
sincos -0
sincos pi/2
sincos pi/6
sincos pi/3
sincos 0.75
sincos 0x1p65
sincos -0x1p65
sincos 0.80190127184058835
sincos 1e22
sincos 0x1p1023
sincos 0x1p16383
sincos 0x1p+120
sincos 0x1p+127
sincos 0x1.fffff8p+127
sincos 0x1.fffffep+127
sincos 0x1p+50
sincos 0x1p+28
sincos -0x3.3de320f6be87ep+1020
sincos 0xe.9f1e5bc3bb88p+112
sincos 0x4.7857dp+68
sincos 0x6.287cc8749212e72p+0
sincos -0x1.02e34cp+0
sincos 0xf.f0274p+4
sincos 0x3.042d88p+0
Fix sin, sincos missing underflows (bug 16526, bug 16538). Similar to various other bugs in this area, some sin and sincos implementations do not raise the underflow exception for subnormal arguments, when the result is tiny and inexact. This patch forces the exception in a similar way to previous fixes. Tested for x86_64, x86, mips64 and powerpc. [BZ #16526] [BZ #16538] * sysdeps/ieee754/dbl-64/s_sin.c: Include <float.h>. (__sin): Force underflow exception for arguments with small absolute value. * sysdeps/ieee754/flt-32/k_sinf.c: Include <float.h>. (__kernel_sinf): Force underflow exception for arguments with small absolute value. * sysdeps/ieee754/ldbl-128/k_sincosl.c: Include <float.h>. (__kernel_sincosl): Force underflow exception for arguments with small absolute value. * sysdeps/ieee754/ldbl-128/k_sinl.c: Include <float.h>. (__kernel_sinl): Force underflow exception for arguments with small absolute value. * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: Include <float.h>. (__kernel_sincosl): Force underflow exception for arguments with small absolute value. * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: Include <float.h>. (__kernel_sinl): Force underflow exception for arguments with small absolute value. * sysdeps/ieee754/ldbl-96/k_sinl.c: Include <float.h>. (__kernel_sinl): Force underflow exception for arguments with small absolute value. * sysdeps/powerpc/fpu/k_sinf.c: Include <float.h>. (__kernel_sinf): Force underflow exception for arguments with small absolute value. * math/auto-libm-test-in: Add more tests of sin and sincos. * math/auto-libm-test-out: Regenerated.
2015-06-24 06:24:20 +08:00
sincos min
sincos -min
sincos min_subnorm
sincos -min_subnorm
sinh 0
sinh -0
sinh 0.75
Fix x86/x86_64 expm1 inaccuracy near 0 in directed rounding modes (bug 16293). Bug 16293 is inaccuracy of x86/x86_64 versions of expm1, near 0 in directed rounding modes, that arises from frndint rounding the exponent to 1 or -1 instead of 0, resulting in large cancellation error. This inaccuracy in turn affects other functions such as sinh that use expm1. This patch fixes the problem by setting round-to-nearest mode temporarily around the affected calls to frndint. I don't think this is needed for other uses of frndint, such as in exp itself, as only for expm1 is the cancellation error significant. Tested x86_64 and x86 and ulps updated accordingly. * sysdeps/i386/fpu/e_expl.S (IEEE754_EXPL) [USE_AS_EXPM1L]: Set round-to-nearest mode when using frndint. * sysdeps/i386/fpu/s_expm1.S (__expm1): Likewise. * sysdeps/i386/fpu/s_expm1f.S (__expm1f): Likewise. * sysdeps/x86_64/fpu/e_expl.S (IEEE754_EXPL) [USE_AS_EXPM1L]: Likewise. * math/auto-libm-test-in: Add more tests of expm1. Do not expect sinh test to fail. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (TEST_COND_x86_64): Remove macro. (TEST_COND_x86): Likewise. (expm1_tonearest_test_data): New array. (expm1_test_tonearest): New function. (expm1_towardzero_test_data): New array. (expm1_test_towardzero): New function. (expm1_downward_test_data): New array. (expm1_test_downward): New function. (expm1_upward_test_data): New array. (expm1_test_upward): New function. (main): Run the new test functions. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2013-12-19 21:36:10 +08:00
sinh 0x8p-32
sinh 0x1p-5
sinh -0x1p-5
sinh 0x1p-10
sinh -0x1p-10
sinh 0x1p-20
sinh -0x1p-20
sinh 0x1p-30
sinh -0x1p-30
sinh 0x1p-40
sinh -0x1p-40
sinh 0x1p-50
sinh -0x1p-50
sinh 0x1p-60
sinh -0x1p-60
sinh 0x1p-70
sinh -0x1p-70
sinh 0x1p-100
sinh -0x1p-100
sinh 0x1p-1000
sinh -0x1p-1000
sinh 0x1p-10000
sinh -0x1p-10000
sinh 22
sinh 23
sinh 24
sinh -0x7.55d7f8p-4
sinh -0x3.f392f8p-4
sinh 0x1.c56446p+0
sinh 0x6.cac622d51eebcp-4
sinh -0x5.c4cb02389c094p+0
sinh -0x1.646850f515ef2p+0
sinh -0x7.a8c5f68c81fae5dp-4
sinh 0x3.4a037p-4
sinh -0x3.eba6dbcbeceb2p-4
sinh -0x2.55f63p+0
sinh -0x3.ca68c96337692p-4
sinh -0x3.92da05a85024b314p-4
sinh -0x3.3e6292ed442d450cp-4
sinh 0x7.6e259d2436fc4p-4
sinh 0x3.d6e088p-4
sinh -0x7.688eap-4
sinh -0xd.dce79p-4
sinh 0x8.a3127p+4
sinh 0x1.c0709p-12
sinh 0xb.7f67c3586c24p-4
sinh -0x1.3dda8ap+0
sinh -0x5.ee9218p-4
sinh -0x1.bcfc98p+0
sinh -0x6.9bbb6df7c5d08p-4
sinh min
sinh -min
sinh min_subnorm
sinh -min_subnorm
sqrt 0
sqrt -0
sqrt 2209
sqrt 4
sqrt 2
sqrt 0.25
sqrt 6642.25
sqrt 15190.5625
sqrt 0.75
2013-11-30 00:31:16 +08:00
sqrt 0x1.fffffffffffffp+1023
sqrt 0x1.ffffffffffffbp+1023
sqrt 0x1.ffffffffffff7p+1023
sqrt 0x1.ffffffffffff3p+1023
sqrt 0x1.fffffffffffefp+1023
sqrt 0x1.fffffffffffebp+1023
sqrt 0x1.fffffffffffe7p+1023
sqrt 0x1.fffffffffffe3p+1023
sqrt 0x1.fffffffffffdfp+1023
sqrt 0x1.fffffffffffdbp+1023
sqrt 0x1.fffffffffffd7p+1023
sqrt 0x1.0000000000003p-1022
sqrt 0x1.0000000000007p-1022
sqrt 0x1.000000000000bp-1022
sqrt 0x1.000000000000fp-1022
sqrt 0x1.0000000000013p-1022
sqrt 0x1.0000000000017p-1022
sqrt 0x1.000000000001bp-1022
sqrt 0x1.000000000001fp-1022
sqrt 0x1.0000000000023p-1022
sqrt 0x1.0000000000027p-1022
sqrt 0x1.000000000002bp-1022
sqrt 0x1.000000000002fp-1022
sqrt 0x1.0000000000033p-1022
sqrt 0x1.0000000000037p-1022
sqrt 0x1.7167bc36eaa3bp+6
sqrt 0x1.7570994273ad7p+6
sqrt 0x1.7dae969442fe6p+6
sqrt 0x1.7f8444fcf67e5p+6
sqrt 0x1.8364650e63a54p+6
sqrt 0x1.85bedd274edd8p+6
sqrt 0x1.8609cf496ab77p+6
sqrt 0x1.873849c70a375p+6
sqrt 0x1.8919c962cbaaep+6
sqrt 0x1.8de4493e22dc6p+6
sqrt 0x1.924829a17a288p+6
sqrt 0x1.92702cd992f12p+6
sqrt 0x1.92b763a8311fdp+6
sqrt 0x1.947da013c7293p+6
sqrt 0x1.9536091c494d2p+6
sqrt 0x1.61b04c6p-1019
sqrt 0x1.93789f1p-1018
sqrt 0x1.a1989b4p-1018
sqrt 0x1.f93bc9p-1018
sqrt 0x1.2f675e3p-1017
sqrt 0x1.a158508p-1017
sqrt 0x1.cd31f078p-1017
sqrt 0x1.33b43b08p-1016
sqrt 0x1.6e66a858p-1016
sqrt 0x1.8661cbf8p-1016
sqrt 0x1.bbb221b4p-1016
sqrt 0x1.c4942f3cp-1016
sqrt 0x1.dbb258c8p-1016
sqrt 0x1.57103ea4p-1015
sqrt 0x1.9b294f88p-1015
sqrt 0x1.0000000000001p+0
sqrt 0x1.fffffffffffffp-1
tan 0
tan -0
tan pi/4
tan 0.75
tan 0x1p65
tan -0x1p65
tan 0x1p-27
tan -0x1p-27
tan 0xc.9p-4
tan 0xc.908p-4
tan 0xc.90cp-4
tan 0xc.90ep-4
tan 0xc.90fp-4
tan 0xc.90f8p-4
tan 0xc.90fcp-4
tan 0xc.90fdp-4
tan 0xc.90fd8p-4
tan 0xc.90fdap-4
tan 0xc.ap-4
tan 0xc.98p-4
tan 0xc.94p-4
tan 0xc.92p-4
tan 0xc.91p-4
tan 0xc.90fep-4
tan 0xc.90fdcp-4
tan 0xc.90fdbp-4
tan -0xc.9p-4
tan -0xc.908p-4
tan -0xc.90cp-4
tan -0xc.90ep-4
tan -0xc.90fp-4
tan -0xc.90f8p-4
tan -0xc.90fcp-4
tan -0xc.90fdp-4
tan -0xc.90fd8p-4
tan -0xc.90fdap-4
tan -0xc.ap-4
tan -0xc.98p-4
tan -0xc.94p-4
tan -0xc.92p-4
tan -0xc.91p-4
tan -0xc.90fep-4
tan -0xc.90fdcp-4
tan -0xc.90fdbp-4
tan 1e22
tan 0x1p1023
tan 0x1p16383
tan 1
tan 2
tan 3
tan 4
tan 5
tan 6
tan 7
tan 8
tan 9
tan 10
tan -0x1.062a48p+0
tan -0x1.4f69cp+0
tan 0x1.6ca7e8p+0
tan -0x1.b569cp+0
tan -0x2.12bafcp+0
tan 0x2.091d68p+0
tan -0x5.302ab9b18593264p+0
tan 0x1.1ad374p+0
tan -0x1.0d55b8p+0
tan min
tan -min
tan min_subnorm
tan -min_subnorm
tanh 0
tanh -0
tanh 0.75
tanh -0.75
tanh 1.0
tanh -1.0
tanh 2
tanh -2
tanh 3
tanh -3
tanh 4
tanh -4
tanh 5
tanh -5
tanh 6
tanh -6
tanh 7
tanh -7
tanh 8
tanh -8
tanh 9
tanh -9
tanh 10
tanh -10
tanh 15
tanh -15
tanh 20
tanh -20
tanh 22
tanh -22
tanh 25
tanh -25
tanh 30
tanh -30
tanh 35
tanh -35
tanh 40
tanh -40
tanh 45
tanh -45
tanh 50
tanh -50
tanh 0x1p-57
tanh 0xe.6c659p-4
tanh 0x8.c259ep-4
tanh 0x6.5821dp-4
tanh 0x8.7c9e5p-4
tanh -0x3.b60d7cp-4
tanh 0x7.b9985p-4
tanh 0x7.a18e8p-4
tanh -0x2.6082fp-4
tanh 0xe.05031p-16
tanh 0x3.c80eaa7adaa3p-4
tanh 0x2.00f9857616524p-4
tanh -0xe.9e035p+0
tanh -0x3.c0d8b54c5a488p-4
tanh -0x3.2f59p-4
tanh 0x2.e6f54cp-4
tanh 0x3.397f2f50241d031p-4
tanh 0x8.4024a11b6610672b2982b852e8p-4
tanh min
tanh -min
tanh min_subnorm
tanh -min_subnorm
tgamma 0.5
tgamma -0.5
tgamma 1
tgamma 2
tgamma 3
tgamma 4
tgamma 5
tgamma 6
tgamma 7
tgamma 8
tgamma 9
tgamma 10
tgamma 0.7
tgamma 1.2
tgamma 1.5
tgamma 2.5
tgamma 3.5
tgamma 4.5
tgamma 5.5
tgamma 6.5
tgamma 7.5
tgamma 8.5
tgamma 9.5
tgamma -1.5
tgamma -2.5
tgamma -3.5
tgamma -4.5
tgamma -5.5
tgamma -6.5
tgamma -7.5
tgamma -8.5
tgamma -9.5
tgamma 0x1p-24
tgamma -0x1p-24
tgamma 0x1p-53
tgamma -0x1p-53
tgamma 0x1p-64
tgamma -0x1p-64
tgamma 0x1p-106
tgamma -0x1p-106
tgamma 0x1p-113
tgamma -0x1p-113
tgamma 0x1p-127
tgamma -0x1p-127
Improve tgamma accuracy (bug 18613). In non-default rounding modes, tgamma can be slightly less accurate than permitted by glibc's accuracy goals. Part of the problem is error accumulation, addressed in this patch by setting round-to-nearest for internal computations. However, there was also a bug in the code dealing with computing pow (x + n, x + n) where x + n is not exactly representable, providing another source of error even in round-to-nearest mode; it was necessary to address both bugs to get errors for all testcases within glibc's accuracy goals. Given this second fix, accuracy in round-to-nearest mode is also improved (hence regeneration of ulps for tgamma should be from scratch - truncate libm-test-ulps or at least remove existing tgamma entries - so that the expected ulps can be reduced). Some additional complications also arose. Certain tgamma tests should strictly, according to IEEE semantics, overflow or not depending on the rounding mode; this is beyond the scope of glibc's accuracy goals for any function without exactly-determined results, but gen-auto-libm-tests doesn't handle being lax there as it does for underflow. (libm-test.inc also doesn't handle being lax about whether the result in cases very close to the overflow threshold is infinity or a finite value close to overflow, but that doesn't cause problems in this case though I've seen it cause problems with random test generation for some functions.) Thus, spurious-overflow markings, with a comment, are added to auto-libm-test-in (no bug in Bugzilla because the issue is with the testsuite, not a user-visible bug in glibc). And on x86, after the patch I saw ERANGE issues as previously reported by Carlos (see my commentary in <https://sourceware.org/ml/libc-alpha/2015-01/msg00485.html>), which needed addressing by ensuring excess range and precision were eliminated at various points if FLT_EVAL_METHOD != 0. I also noticed and fixed a cosmetic issue where 1.0f was used in long double functions and should have been 1.0L. This completes the move of all functions to testing in all rounding modes with ALL_RM_TEST, so gen-libm-have-vector-test.sh is updated to remove the workaround for some functions not using ALL_RM_TEST. Tested for x86_64, x86, mips64 and powerpc. [BZ #18613] * sysdeps/ieee754/dbl-64/e_gamma_r.c (gamma_positive): Take log of X_ADJ not X when adjusting exponent. (__ieee754_gamma_r): Do intermediate computations in round-to-nearest then adjust overflowing and underflowing results as needed. * sysdeps/ieee754/flt-32/e_gammaf_r.c (gammaf_positive): Take log of X_ADJ not X when adjusting exponent. (__ieee754_gammaf_r): Do intermediate computations in round-to-nearest then adjust overflowing and underflowing results as needed. * sysdeps/ieee754/ldbl-128/e_gammal_r.c (gammal_positive): Take log of X_ADJ not X when adjusting exponent. (__ieee754_gammal_r): Do intermediate computations in round-to-nearest then adjust overflowing and underflowing results as needed. Use 1.0L not 1.0f as numerator of division. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c (gammal_positive): Take log of X_ADJ not X when adjusting exponent. (__ieee754_gammal_r): Do intermediate computations in round-to-nearest then adjust overflowing and underflowing results as needed. Use 1.0L not 1.0f as numerator of division. * sysdeps/ieee754/ldbl-96/e_gammal_r.c (gammal_positive): Take log of X_ADJ not X when adjusting exponent. (__ieee754_gammal_r): Do intermediate computations in round-to-nearest then adjust overflowing and underflowing results as needed. Use 1.0L not 1.0f as numerator of division. * math/libm-test.inc (tgamma_test_data): Remove one test. Moved to auto-libm-test-in. (tgamma_test): Use ALL_RM_TEST. * math/auto-libm-test-in: Add one test of tgamma. Mark some other tests of tgamma with spurious-overflow. * math/auto-libm-test-out: Regenerated. * math/gen-libm-have-vector-test.sh: Do not check for START. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2015-06-30 07:29:35 +08:00
# IEEE semantics mean overflow very close to the threshold depends on
# the rounding mode; gen-auto-libm-tests does not reflect that glibc
# does not try to achieve this.
tgamma 0x1p-128 spurious-overflow:flt-32
tgamma -0x1p-128
tgamma 0x1p-149
tgamma -0x1p-149
tgamma 0x1p-1023
tgamma -0x1p-1023
Improve tgamma accuracy (bug 18613). In non-default rounding modes, tgamma can be slightly less accurate than permitted by glibc's accuracy goals. Part of the problem is error accumulation, addressed in this patch by setting round-to-nearest for internal computations. However, there was also a bug in the code dealing with computing pow (x + n, x + n) where x + n is not exactly representable, providing another source of error even in round-to-nearest mode; it was necessary to address both bugs to get errors for all testcases within glibc's accuracy goals. Given this second fix, accuracy in round-to-nearest mode is also improved (hence regeneration of ulps for tgamma should be from scratch - truncate libm-test-ulps or at least remove existing tgamma entries - so that the expected ulps can be reduced). Some additional complications also arose. Certain tgamma tests should strictly, according to IEEE semantics, overflow or not depending on the rounding mode; this is beyond the scope of glibc's accuracy goals for any function without exactly-determined results, but gen-auto-libm-tests doesn't handle being lax there as it does for underflow. (libm-test.inc also doesn't handle being lax about whether the result in cases very close to the overflow threshold is infinity or a finite value close to overflow, but that doesn't cause problems in this case though I've seen it cause problems with random test generation for some functions.) Thus, spurious-overflow markings, with a comment, are added to auto-libm-test-in (no bug in Bugzilla because the issue is with the testsuite, not a user-visible bug in glibc). And on x86, after the patch I saw ERANGE issues as previously reported by Carlos (see my commentary in <https://sourceware.org/ml/libc-alpha/2015-01/msg00485.html>), which needed addressing by ensuring excess range and precision were eliminated at various points if FLT_EVAL_METHOD != 0. I also noticed and fixed a cosmetic issue where 1.0f was used in long double functions and should have been 1.0L. This completes the move of all functions to testing in all rounding modes with ALL_RM_TEST, so gen-libm-have-vector-test.sh is updated to remove the workaround for some functions not using ALL_RM_TEST. Tested for x86_64, x86, mips64 and powerpc. [BZ #18613] * sysdeps/ieee754/dbl-64/e_gamma_r.c (gamma_positive): Take log of X_ADJ not X when adjusting exponent. (__ieee754_gamma_r): Do intermediate computations in round-to-nearest then adjust overflowing and underflowing results as needed. * sysdeps/ieee754/flt-32/e_gammaf_r.c (gammaf_positive): Take log of X_ADJ not X when adjusting exponent. (__ieee754_gammaf_r): Do intermediate computations in round-to-nearest then adjust overflowing and underflowing results as needed. * sysdeps/ieee754/ldbl-128/e_gammal_r.c (gammal_positive): Take log of X_ADJ not X when adjusting exponent. (__ieee754_gammal_r): Do intermediate computations in round-to-nearest then adjust overflowing and underflowing results as needed. Use 1.0L not 1.0f as numerator of division. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c (gammal_positive): Take log of X_ADJ not X when adjusting exponent. (__ieee754_gammal_r): Do intermediate computations in round-to-nearest then adjust overflowing and underflowing results as needed. Use 1.0L not 1.0f as numerator of division. * sysdeps/ieee754/ldbl-96/e_gammal_r.c (gammal_positive): Take log of X_ADJ not X when adjusting exponent. (__ieee754_gammal_r): Do intermediate computations in round-to-nearest then adjust overflowing and underflowing results as needed. Use 1.0L not 1.0f as numerator of division. * math/libm-test.inc (tgamma_test_data): Remove one test. Moved to auto-libm-test-in. (tgamma_test): Use ALL_RM_TEST. * math/auto-libm-test-in: Add one test of tgamma. Mark some other tests of tgamma with spurious-overflow. * math/auto-libm-test-out: Regenerated. * math/gen-libm-have-vector-test.sh: Do not check for START. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2015-06-30 07:29:35 +08:00
tgamma 0x1p-1024 spurious-overflow:dbl-64 spurious-overflow:ldbl-128ibm
tgamma -0x1p-1024
tgamma 0x1p-1074
tgamma -0x1p-1074
tgamma 0x1p-16383
tgamma -0x1p-16383
Improve tgamma accuracy (bug 18613). In non-default rounding modes, tgamma can be slightly less accurate than permitted by glibc's accuracy goals. Part of the problem is error accumulation, addressed in this patch by setting round-to-nearest for internal computations. However, there was also a bug in the code dealing with computing pow (x + n, x + n) where x + n is not exactly representable, providing another source of error even in round-to-nearest mode; it was necessary to address both bugs to get errors for all testcases within glibc's accuracy goals. Given this second fix, accuracy in round-to-nearest mode is also improved (hence regeneration of ulps for tgamma should be from scratch - truncate libm-test-ulps or at least remove existing tgamma entries - so that the expected ulps can be reduced). Some additional complications also arose. Certain tgamma tests should strictly, according to IEEE semantics, overflow or not depending on the rounding mode; this is beyond the scope of glibc's accuracy goals for any function without exactly-determined results, but gen-auto-libm-tests doesn't handle being lax there as it does for underflow. (libm-test.inc also doesn't handle being lax about whether the result in cases very close to the overflow threshold is infinity or a finite value close to overflow, but that doesn't cause problems in this case though I've seen it cause problems with random test generation for some functions.) Thus, spurious-overflow markings, with a comment, are added to auto-libm-test-in (no bug in Bugzilla because the issue is with the testsuite, not a user-visible bug in glibc). And on x86, after the patch I saw ERANGE issues as previously reported by Carlos (see my commentary in <https://sourceware.org/ml/libc-alpha/2015-01/msg00485.html>), which needed addressing by ensuring excess range and precision were eliminated at various points if FLT_EVAL_METHOD != 0. I also noticed and fixed a cosmetic issue where 1.0f was used in long double functions and should have been 1.0L. This completes the move of all functions to testing in all rounding modes with ALL_RM_TEST, so gen-libm-have-vector-test.sh is updated to remove the workaround for some functions not using ALL_RM_TEST. Tested for x86_64, x86, mips64 and powerpc. [BZ #18613] * sysdeps/ieee754/dbl-64/e_gamma_r.c (gamma_positive): Take log of X_ADJ not X when adjusting exponent. (__ieee754_gamma_r): Do intermediate computations in round-to-nearest then adjust overflowing and underflowing results as needed. * sysdeps/ieee754/flt-32/e_gammaf_r.c (gammaf_positive): Take log of X_ADJ not X when adjusting exponent. (__ieee754_gammaf_r): Do intermediate computations in round-to-nearest then adjust overflowing and underflowing results as needed. * sysdeps/ieee754/ldbl-128/e_gammal_r.c (gammal_positive): Take log of X_ADJ not X when adjusting exponent. (__ieee754_gammal_r): Do intermediate computations in round-to-nearest then adjust overflowing and underflowing results as needed. Use 1.0L not 1.0f as numerator of division. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c (gammal_positive): Take log of X_ADJ not X when adjusting exponent. (__ieee754_gammal_r): Do intermediate computations in round-to-nearest then adjust overflowing and underflowing results as needed. Use 1.0L not 1.0f as numerator of division. * sysdeps/ieee754/ldbl-96/e_gammal_r.c (gammal_positive): Take log of X_ADJ not X when adjusting exponent. (__ieee754_gammal_r): Do intermediate computations in round-to-nearest then adjust overflowing and underflowing results as needed. Use 1.0L not 1.0f as numerator of division. * math/libm-test.inc (tgamma_test_data): Remove one test. Moved to auto-libm-test-in. (tgamma_test): Use ALL_RM_TEST. * math/auto-libm-test-in: Add one test of tgamma. Mark some other tests of tgamma with spurious-overflow. * math/auto-libm-test-out: Regenerated. * math/gen-libm-have-vector-test.sh: Do not check for START. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2015-06-30 07:29:35 +08:00
tgamma 0x1p-16384 spurious-overflow:ldbl-96-intel spurious-overflow:ldbl-96-m68k spurious-overflow:ldbl-128
tgamma -0x1p-16384
tgamma 0x1p-16445
tgamma -0x1p-16445
tgamma 0x1p-16494
tgamma -0x1p-16494
tgamma 0x8.00001p0
tgamma 0x7.fffff8p0
tgamma 0x7.000008p0
tgamma 0x6.fffff8p0
tgamma 0x6.000008p0
tgamma 0x5.fffff8p0
tgamma 0x5.000008p0
tgamma 0x4.fffff8p0
tgamma 0x4.000008p0
tgamma 0x3.fffffcp0
tgamma 0x3.000004p0
tgamma 0x2.fffffcp0
tgamma 0x2.000004p0
tgamma 0x1.fffffep0
tgamma 0x1.000002p0
tgamma 0x0.ffffffp0
tgamma -0x0.ffffffp0
tgamma -0x1.000002p0
tgamma -0x1.fffffep0
tgamma -0x2.000004p0
tgamma -0x2.fffffcp0
tgamma -0x3.000004p0
tgamma -0x3.fffffcp0
tgamma -0x4.000008p0
tgamma -0x4.fffff8p0
tgamma -0x5.000008p0
tgamma -0x5.fffff8p0
tgamma -0x6.000008p0
tgamma -0x6.fffff8p0
tgamma -0x7.000008p0
tgamma -0x7.fffff8p0
tgamma -0x8.00001p0
tgamma -0x9.fffffp0
tgamma -0xa.00001p0
tgamma -0x13.ffffep0
tgamma -0x14.00002p0
tgamma -0x1d.ffffep0
tgamma -0x1e.00002p0
tgamma -0x27.ffffcp0
tgamma -0x28.00004p0
tgamma -0x28.ffffcp0
tgamma -0x29.00004p0
tgamma -0x29.ffffcp0
tgamma -0x2a.00004p0
tgamma 0x8.0000000000008p0
tgamma 0x7.ffffffffffffcp0
tgamma 0x7.0000000000004p0
tgamma 0x6.ffffffffffffcp0
tgamma 0x6.0000000000004p0
tgamma 0x5.ffffffffffffcp0
tgamma 0x5.0000000000004p0
tgamma 0x4.ffffffffffffcp0
tgamma 0x4.0000000000004p0
tgamma 0x3.ffffffffffffep0
tgamma 0x3.0000000000002p0
tgamma 0x2.ffffffffffffep0
tgamma 0x2.0000000000002p0
tgamma 0x1.fffffffffffffp0
tgamma 0x1.0000000000001p0
tgamma 0x0.fffffffffffff8p0
tgamma -0x0.fffffffffffff8p0
tgamma -0x1.0000000000001p0
tgamma -0x1.fffffffffffffp0
tgamma -0x2.0000000000002p0
tgamma -0x2.ffffffffffffep0
tgamma -0x3.0000000000002p0
tgamma -0x3.ffffffffffffep0
tgamma -0x4.0000000000004p0
tgamma -0x4.ffffffffffffcp0
tgamma -0x5.0000000000004p0
tgamma -0x5.ffffffffffffcp0
tgamma -0x6.0000000000004p0
tgamma -0x6.ffffffffffffcp0
tgamma -0x7.0000000000004p0
tgamma -0x7.ffffffffffffcp0
tgamma -0x8.0000000000008p0
tgamma -0x9.ffffffffffff8p0
tgamma -0xa.0000000000008p0
tgamma -0x13.ffffffffffffp0
tgamma -0x14.000000000001p0
tgamma -0x1d.ffffffffffffp0
tgamma -0x1e.000000000001p0
tgamma -0x27.fffffffffffep0
tgamma -0x28.000000000002p0
tgamma -0x28.fffffffffffep0
tgamma -0x29.000000000002p0
tgamma -0x29.fffffffffffep0
tgamma -0x2a.000000000002p0
tgamma -0x31.fffffffffffep0
tgamma -0x32.000000000002p0
tgamma -0x63.fffffffffffcp0
tgamma -0x64.000000000004p0
tgamma -0x95.fffffffffff8p0
tgamma -0x96.000000000008p0
tgamma -0xb4.fffffffffff8p0
tgamma -0xb5.000000000008p0
tgamma -0xb5.fffffffffff8p0
tgamma -0xb6.000000000008p0
tgamma -0xb6.fffffffffff8p0
tgamma -0xb7.000000000008p0
tgamma -0xb7.fffffffffff8p0
tgamma -0xb8.000000000008p0
tgamma 0x8.00000000000000000000000004p0
tgamma 0x7.fffffffffffffffffffffffffep0
tgamma 0x7.00000000000000000000000002p0
tgamma 0x6.fffffffffffffffffffffffffep0
tgamma 0x6.00000000000000000000000002p0
tgamma 0x5.fffffffffffffffffffffffffep0
tgamma 0x5.00000000000000000000000002p0
tgamma 0x4.fffffffffffffffffffffffffep0
tgamma 0x4.00000000000000000000000002p0
tgamma 0x3.ffffffffffffffffffffffffffp0
tgamma 0x3.00000000000000000000000001p0
tgamma 0x2.ffffffffffffffffffffffffffp0
tgamma 0x2.00000000000000000000000001p0
tgamma 0x1.ffffffffffffffffffffffffff8p0
tgamma 0x1.000000000000000000000000008p0
tgamma 0x0.ffffffffffffffffffffffffffcp0
tgamma -0x0.ffffffffffffffffffffffffffcp0
tgamma -0x1.000000000000000000000000008p0
tgamma -0x1.ffffffffffffffffffffffffff8p0
tgamma -0x2.00000000000000000000000001p0
tgamma -0x2.ffffffffffffffffffffffffffp0
tgamma -0x3.00000000000000000000000001p0
tgamma -0x3.ffffffffffffffffffffffffffp0
tgamma -0x4.00000000000000000000000002p0
tgamma -0x4.fffffffffffffffffffffffffep0
tgamma -0x5.00000000000000000000000002p0
tgamma -0x5.fffffffffffffffffffffffffep0
tgamma -0x6.00000000000000000000000002p0
tgamma -0x6.fffffffffffffffffffffffffep0
tgamma -0x7.00000000000000000000000002p0
tgamma -0x7.fffffffffffffffffffffffffep0
tgamma -0x8.00000000000000000000000004p0
tgamma -0x9.fffffffffffffffffffffffffcp0
tgamma -0xa.00000000000000000000000004p0
tgamma -0x13.fffffffffffffffffffffffff8p0
tgamma -0x14.00000000000000000000000008p0
tgamma -0x1d.fffffffffffffffffffffffff8p0
tgamma -0x1e.00000000000000000000000008p0
tgamma -0x27.fffffffffffffffffffffffffp0
tgamma -0x28.0000000000000000000000001p0
tgamma -0x28.fffffffffffffffffffffffffp0
tgamma -0x29.0000000000000000000000001p0
tgamma -0x29.fffffffffffffffffffffffffp0
tgamma -0x2a.0000000000000000000000001p0
tgamma -0x31.fffffffffffffffffffffffffp0
tgamma -0x32.0000000000000000000000001p0
tgamma -0x63.ffffffffffffffffffffffffep0
tgamma -0x64.0000000000000000000000002p0
tgamma -0x95.ffffffffffffffffffffffffcp0
tgamma -0x96.0000000000000000000000004p0
tgamma -0xb4.ffffffffffffffffffffffffcp0
tgamma -0xb5.0000000000000000000000004p0
tgamma -0xb5.ffffffffffffffffffffffffcp0
tgamma -0xb6.0000000000000000000000004p0
tgamma -0xb6.ffffffffffffffffffffffffcp0
tgamma -0xb7.0000000000000000000000004p0
tgamma -0xb7.ffffffffffffffffffffffffcp0
tgamma -0xb8.0000000000000000000000004p0
tgamma -0xbb.ffffffffffffffffffffffffcp0
tgamma -0xbc.0000000000000000000000004p0
tgamma -0xbc.ffffffffffffffffffffffffcp0
tgamma -0xbd.0000000000000000000000004p0
tgamma -0xbd.ffffffffffffffffffffffffcp0
tgamma -0xbe.0000000000000000000000004p0
tgamma -0xbe.ffffffffffffffffffffffffcp0
tgamma -0xbf.0000000000000000000000004p0
tgamma 0x8.000000000000001p0
tgamma 0x7.fffffffffffffff8p0
tgamma 0x7.0000000000000008p0
tgamma 0x6.fffffffffffffff8p0
tgamma 0x6.0000000000000008p0
tgamma 0x5.fffffffffffffff8p0
tgamma 0x5.0000000000000008p0
tgamma 0x4.fffffffffffffff8p0
tgamma 0x4.0000000000000008p0
tgamma 0x3.fffffffffffffffcp0
tgamma 0x3.0000000000000004p0
tgamma 0x2.fffffffffffffffcp0
tgamma 0x2.0000000000000004p0
tgamma 0x1.fffffffffffffffep0
tgamma 0x1.0000000000000002p0
tgamma 0x0.ffffffffffffffffp0
tgamma -0x0.ffffffffffffffffp0
tgamma -0x1.0000000000000002p0
tgamma -0x1.fffffffffffffffep0
tgamma -0x2.0000000000000004p0
tgamma -0x2.fffffffffffffffcp0
tgamma -0x3.0000000000000004p0
tgamma -0x3.fffffffffffffffcp0
tgamma -0x4.0000000000000008p0
tgamma -0x4.fffffffffffffff8p0
tgamma -0x5.0000000000000008p0
tgamma -0x5.fffffffffffffff8p0
tgamma -0x6.0000000000000008p0
tgamma -0x6.fffffffffffffff8p0
tgamma -0x7.0000000000000008p0
tgamma -0x7.fffffffffffffff8p0
tgamma -0x8.000000000000001p0
tgamma -0x9.fffffffffffffffp0
tgamma -0xa.000000000000001p0
tgamma -0x13.ffffffffffffffep0
tgamma -0x14.000000000000002p0
tgamma -0x1d.ffffffffffffffep0
tgamma -0x1e.000000000000002p0
tgamma -0x27.ffffffffffffffcp0
tgamma -0x28.000000000000004p0
tgamma -0x28.ffffffffffffffcp0
tgamma -0x29.000000000000004p0
tgamma -0x29.ffffffffffffffcp0
tgamma -0x2a.000000000000004p0
tgamma -0x31.ffffffffffffffcp0
tgamma -0x32.000000000000004p0
tgamma -0x63.ffffffffffffff8p0
tgamma -0x64.000000000000008p0
tgamma -0x95.ffffffffffffffp0
tgamma -0x96.00000000000001p0
tgamma -0xb4.ffffffffffffffp0
tgamma -0xb5.00000000000001p0
tgamma -0xb5.ffffffffffffffp0
tgamma -0xb6.00000000000001p0
tgamma -0xb6.ffffffffffffffp0
tgamma -0xb7.00000000000001p0
tgamma -0xb7.ffffffffffffffp0
tgamma -0xb8.00000000000001p0
tgamma -0xbb.ffffffffffffffp0
tgamma -0xbc.00000000000001p0
tgamma -0xbc.ffffffffffffffp0
tgamma -0xbd.00000000000001p0
tgamma -0xbd.ffffffffffffffp0
tgamma -0xbe.00000000000001p0
tgamma -0xbe.ffffffffffffffp0
tgamma -0xbf.00000000000001p0
tgamma -0xf9.ffffffffffffffp0
tgamma -0xfa.00000000000001p0
tgamma -0x1f3.fffffffffffffep0
tgamma -0x1f4.00000000000002p0
tgamma -0x2ed.fffffffffffffcp0
tgamma -0x2ee.00000000000004p0
tgamma -0x3e7.fffffffffffffcp0
tgamma -0x3e8.00000000000004p0
tgamma -0x4e1.fffffffffffff8p0
tgamma -0x4e2.00000000000008p0
tgamma -0x5db.fffffffffffff8p0
tgamma -0x5dc.00000000000008p0
tgamma -0x6d5.fffffffffffff8p0
tgamma -0x6d6.00000000000008p0
tgamma -0x6e2.fffffffffffff8p0
tgamma -0x6e3.00000000000008p0
tgamma -0x6e3.fffffffffffff8p0
tgamma -0x6e4.00000000000008p0
tgamma -0x6e4.fffffffffffff8p0
tgamma -0x6e5.00000000000008p0
tgamma -0x6e5.fffffffffffff8p0
tgamma -0x6e6.00000000000008p0
tgamma 0x8.0000000000000000000000000008p0
tgamma 0x7.fffffffffffffffffffffffffffcp0
tgamma 0x7.0000000000000000000000000004p0
tgamma 0x6.fffffffffffffffffffffffffffcp0
tgamma 0x6.0000000000000000000000000004p0
tgamma 0x5.fffffffffffffffffffffffffffcp0
tgamma 0x5.0000000000000000000000000004p0
tgamma 0x4.fffffffffffffffffffffffffffcp0
tgamma 0x4.0000000000000000000000000004p0
tgamma 0x3.fffffffffffffffffffffffffffep0
tgamma 0x3.0000000000000000000000000002p0
tgamma 0x2.fffffffffffffffffffffffffffep0
tgamma 0x2.0000000000000000000000000002p0
tgamma 0x1.ffffffffffffffffffffffffffffp0
tgamma 0x1.0000000000000000000000000001p0
tgamma 0x0.ffffffffffffffffffffffffffff8p0
tgamma -0x0.ffffffffffffffffffffffffffff8p0
tgamma -0x1.0000000000000000000000000001p0
tgamma -0x1.ffffffffffffffffffffffffffffp0
tgamma -0x2.0000000000000000000000000002p0
tgamma -0x2.fffffffffffffffffffffffffffep0
tgamma -0x3.0000000000000000000000000002p0
tgamma -0x3.fffffffffffffffffffffffffffep0
tgamma -0x4.0000000000000000000000000004p0
tgamma -0x4.fffffffffffffffffffffffffffcp0
tgamma -0x5.0000000000000000000000000004p0
tgamma -0x5.fffffffffffffffffffffffffffcp0
tgamma -0x6.0000000000000000000000000004p0
tgamma -0x6.fffffffffffffffffffffffffffcp0
tgamma -0x7.0000000000000000000000000004p0
tgamma -0x7.fffffffffffffffffffffffffffcp0
tgamma -0x8.0000000000000000000000000008p0
tgamma -0x9.fffffffffffffffffffffffffff8p0
tgamma -0xa.0000000000000000000000000008p0
tgamma -0x13.fffffffffffffffffffffffffffp0
tgamma -0x14.000000000000000000000000001p0
tgamma -0x1d.fffffffffffffffffffffffffffp0
tgamma -0x1e.000000000000000000000000001p0
tgamma -0x27.ffffffffffffffffffffffffffep0
tgamma -0x28.000000000000000000000000002p0
tgamma -0x28.ffffffffffffffffffffffffffep0
tgamma -0x29.000000000000000000000000002p0
tgamma -0x29.ffffffffffffffffffffffffffep0
tgamma -0x2a.000000000000000000000000002p0
tgamma -0x31.ffffffffffffffffffffffffffep0
tgamma -0x32.000000000000000000000000002p0
tgamma -0x63.ffffffffffffffffffffffffffcp0
tgamma -0x64.000000000000000000000000004p0
tgamma -0x95.ffffffffffffffffffffffffff8p0
tgamma -0x96.000000000000000000000000008p0
tgamma -0xb4.ffffffffffffffffffffffffff8p0
tgamma -0xb5.000000000000000000000000008p0
tgamma -0xb5.ffffffffffffffffffffffffff8p0
tgamma -0xb6.000000000000000000000000008p0
tgamma -0xb6.ffffffffffffffffffffffffff8p0
tgamma -0xb7.000000000000000000000000008p0
tgamma -0xb7.ffffffffffffffffffffffffff8p0
tgamma -0xb8.000000000000000000000000008p0
tgamma -0xbb.ffffffffffffffffffffffffff8p0
tgamma -0xbc.000000000000000000000000008p0
tgamma -0xbc.ffffffffffffffffffffffffff8p0
tgamma -0xbd.000000000000000000000000008p0
tgamma -0xbd.ffffffffffffffffffffffffff8p0
tgamma -0xbe.000000000000000000000000008p0
tgamma -0xbe.ffffffffffffffffffffffffff8p0
tgamma -0xbf.000000000000000000000000008p0
tgamma -0xf9.ffffffffffffffffffffffffff8p0
tgamma -0xfa.000000000000000000000000008p0
tgamma -0x1f3.ffffffffffffffffffffffffffp0
tgamma -0x1f4.00000000000000000000000001p0
tgamma -0x2ed.fffffffffffffffffffffffffep0
tgamma -0x2ee.00000000000000000000000002p0
tgamma -0x3e7.fffffffffffffffffffffffffep0
tgamma -0x3e8.00000000000000000000000002p0
tgamma -0x4e1.fffffffffffffffffffffffffcp0
tgamma -0x4e2.00000000000000000000000004p0
tgamma -0x5db.fffffffffffffffffffffffffcp0
tgamma -0x5dc.00000000000000000000000004p0
tgamma -0x6d5.fffffffffffffffffffffffffcp0
tgamma -0x6d6.00000000000000000000000004p0
tgamma -0x6e2.fffffffffffffffffffffffffcp0
tgamma -0x6e3.00000000000000000000000004p0
tgamma -0x6e3.fffffffffffffffffffffffffcp0
tgamma -0x6e4.00000000000000000000000004p0
tgamma -0x6e4.fffffffffffffffffffffffffcp0
tgamma -0x6e5.00000000000000000000000004p0
tgamma -0x6e5.fffffffffffffffffffffffffcp0
tgamma -0x6e6.00000000000000000000000004p0
tgamma -0x6eb.fffffffffffffffffffffffffcp0
tgamma -0x6ec.00000000000000000000000004p0
tgamma -0x6ec.fffffffffffffffffffffffffcp0
tgamma -0x6ed.00000000000000000000000004p0
tgamma -0x6ed.fffffffffffffffffffffffffcp0
tgamma -0x6ee.00000000000000000000000004p0
tgamma -0x6ee.fffffffffffffffffffffffffcp0
tgamma -0x6ef.00000000000000000000000004p0
tgamma -0x1.0a32a2p+5
tgamma -0x1.5800000080001p+7
tgamma 18.5
tgamma 19.5
tgamma 23.5
tgamma 29.5
tgamma 30.5
tgamma 31.5
tgamma 32.5
tgamma 33.5
tgamma 34.5
tgamma 0x2.30a43cp+4
tgamma 0x2.30a44p+4
tgamma 0xa.b9fd72b0fb238p+4
tgamma 0xa.b9fd72b0fb24p+4
tgamma 0xa.b9fd72b0fb23a9ddbf0d3804f4p+4
tgamma 0xa.b9fd72b0fb23a9ddbf0d3804f8p+4
tgamma 0x6.db8c603359a97108p+8
tgamma 0x6.db8c603359a9711p+8
tgamma 0x6.db8c603359a971081bc4a2e9dfdp+8
tgamma 0x6.db8c603359a971081bc4a2e9dfd4p+8
tgamma 1e3
tgamma -100000.5
Improve tgamma accuracy (bug 18613). In non-default rounding modes, tgamma can be slightly less accurate than permitted by glibc's accuracy goals. Part of the problem is error accumulation, addressed in this patch by setting round-to-nearest for internal computations. However, there was also a bug in the code dealing with computing pow (x + n, x + n) where x + n is not exactly representable, providing another source of error even in round-to-nearest mode; it was necessary to address both bugs to get errors for all testcases within glibc's accuracy goals. Given this second fix, accuracy in round-to-nearest mode is also improved (hence regeneration of ulps for tgamma should be from scratch - truncate libm-test-ulps or at least remove existing tgamma entries - so that the expected ulps can be reduced). Some additional complications also arose. Certain tgamma tests should strictly, according to IEEE semantics, overflow or not depending on the rounding mode; this is beyond the scope of glibc's accuracy goals for any function without exactly-determined results, but gen-auto-libm-tests doesn't handle being lax there as it does for underflow. (libm-test.inc also doesn't handle being lax about whether the result in cases very close to the overflow threshold is infinity or a finite value close to overflow, but that doesn't cause problems in this case though I've seen it cause problems with random test generation for some functions.) Thus, spurious-overflow markings, with a comment, are added to auto-libm-test-in (no bug in Bugzilla because the issue is with the testsuite, not a user-visible bug in glibc). And on x86, after the patch I saw ERANGE issues as previously reported by Carlos (see my commentary in <https://sourceware.org/ml/libc-alpha/2015-01/msg00485.html>), which needed addressing by ensuring excess range and precision were eliminated at various points if FLT_EVAL_METHOD != 0. I also noticed and fixed a cosmetic issue where 1.0f was used in long double functions and should have been 1.0L. This completes the move of all functions to testing in all rounding modes with ALL_RM_TEST, so gen-libm-have-vector-test.sh is updated to remove the workaround for some functions not using ALL_RM_TEST. Tested for x86_64, x86, mips64 and powerpc. [BZ #18613] * sysdeps/ieee754/dbl-64/e_gamma_r.c (gamma_positive): Take log of X_ADJ not X when adjusting exponent. (__ieee754_gamma_r): Do intermediate computations in round-to-nearest then adjust overflowing and underflowing results as needed. * sysdeps/ieee754/flt-32/e_gammaf_r.c (gammaf_positive): Take log of X_ADJ not X when adjusting exponent. (__ieee754_gammaf_r): Do intermediate computations in round-to-nearest then adjust overflowing and underflowing results as needed. * sysdeps/ieee754/ldbl-128/e_gammal_r.c (gammal_positive): Take log of X_ADJ not X when adjusting exponent. (__ieee754_gammal_r): Do intermediate computations in round-to-nearest then adjust overflowing and underflowing results as needed. Use 1.0L not 1.0f as numerator of division. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c (gammal_positive): Take log of X_ADJ not X when adjusting exponent. (__ieee754_gammal_r): Do intermediate computations in round-to-nearest then adjust overflowing and underflowing results as needed. Use 1.0L not 1.0f as numerator of division. * sysdeps/ieee754/ldbl-96/e_gammal_r.c (gammal_positive): Take log of X_ADJ not X when adjusting exponent. (__ieee754_gammal_r): Do intermediate computations in round-to-nearest then adjust overflowing and underflowing results as needed. Use 1.0L not 1.0f as numerator of division. * math/libm-test.inc (tgamma_test_data): Remove one test. Moved to auto-libm-test-in. (tgamma_test): Use ALL_RM_TEST. * math/auto-libm-test-in: Add one test of tgamma. Mark some other tests of tgamma with spurious-overflow. * math/auto-libm-test-out: Regenerated. * math/gen-libm-have-vector-test.sh: Do not check for START. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2015-06-30 07:29:35 +08:00
tgamma max
tgamma -0x22.30p0
tgamma -0x22.31p0
tgamma -0x22.32p0
tgamma -0x22.33p0
tgamma -0x22.34p0
tgamma -0x22.35p0
tgamma -0x22.36p0
tgamma -0x22.37p0
tgamma -0xa3.70p0
tgamma -0xa3.71p0
tgamma -0xa3.72p0
tgamma -0xa3.73p0
tgamma -0xa3.74p0
tgamma -0xa3.75p0
tgamma -0xa3.76p0
tgamma -0xa3.77p0
tgamma -0xab.0d0p0
tgamma -0xab.0d1p0
tgamma -0xab.0d2p0
tgamma -0xab.0d3p0
tgamma -0xab.0d4p0
tgamma -0xab.0d5p0
tgamma -0xab.0d6p0
tgamma -0xab.0d7p0
tgamma -0x6db.030p0
tgamma -0x6db.031p0
tgamma -0x6db.032p0
tgamma -0x6db.033p0
tgamma -0x6db.034p0
tgamma -0x6db.035p0
tgamma -0x6db.036p0
tgamma -0x6db.037p0
tgamma -0x6db.050p0
tgamma -0x6db.051p0
tgamma -0x6db.052p0
tgamma -0x6db.053p0
tgamma -0x6db.054p0
tgamma -0x6db.055p0
tgamma -0x6db.056p0
tgamma -0x6db.057p0
tgamma -0x3.06644cp+0
tgamma -0x6.fe4636e0c5064p+0
tgamma -0x7.a13d7a2945cd5718p+0
tgamma -0x1.4a5caap+4
tgamma -0x9.2d3a5p+0
tgamma -0xb.0f63ep+0
tgamma -0x5.f0e02p+8
tgamma -0xb.3123bp+0
tgamma -0x9.6d538p+0
tgamma -0xc.c2439p+0
tgamma -0xc.372f043322128p+0
tgamma -0xa.ccfcep+0
tgamma -0x9.418c8p+0
tgamma -0x6.ce9158p+0
tgamma -0xd.cbf53d0e7d06p+0
y0 0.125
y0 0.75
y0 1.0
y0 1.5
y0 2.0
y0 8.0
y0 10.0
y0 0x1.3ffp+74
y0 0x1.ff00000000002p+840
y0 0x1p1023
y0 0x1p16382
y0 0x1p16383
y0 0x1p-10
y0 0x1p-20
y0 0x1p-30
y0 0x1p-40
y0 0x1p-50
y0 0x1p-60
y0 0x1p-70
y0 0x1p-80
y0 0x1p-90
y0 0x1p-100
y0 0x1p-110
y0 min
y0 min_subnorm
y1 0.125
y1 0.75
y1 1.0
y1 1.5
y1 2.0
y1 8.0
y1 10.0
y1 0x1.27e204p+99
y1 0x1.001000001p+593
y1 0x1p1023
y1 0x1p16382
y1 0x1p16383
y1 0x1p-10
y1 0x1p-20
y1 0x1p-30
y1 0x1p-40
y1 0x1p-50
y1 0x1p-60
y1 0x1p-70
y1 0x1p-80
y1 0x1p-90
y1 0x1p-100
y1 0x1p-110
y1 min
y1 min_subnorm
# yn (0, x) == y0 (x).
yn 0 0.125
yn 0 0.75
yn 0 1.0
yn 0 1.5
yn 0 2.0
yn 0 8.0
yn 0 10.0
# yn (1, x) == y1 (x).
yn 1 0.125
yn 1 0.75
yn 1 1.0
yn 1 1.5
yn 1 2.0
yn 1 8.0
yn 1 10.0
# yn (-1, x) == -y1 (x).
yn -1 1.0
# yn (3, x).
yn 3 0.125
yn 3 0.75
yn 3 1.0
yn 3 2.0
yn 3 10.0
# yn (10, x).
yn 10 0.125
yn 10 0.75
yn 10 1.0
yn 10 2.0
yn 10 10.0
yn -10 1.0
yn 10 min
yn 2 0x1.ffff62p+99
yn 2 0x1p127
yn 2 0x1p1023
yn 2 0x1p16383
yn 0 min
yn 0 min_subnorm
yn 1 min
yn 1 min_subnorm
yn -1 min
yn -1 min_subnorm
yn 2 min
yn 2 min_subnorm
yn -2 min
yn -2 min_subnorm
yn 17 min
yn 17 min_subnorm
yn -17 min
yn -17 min_subnorm
yn 42 min
yn 42 min_subnorm
yn -42 min
yn -42 min_subnorm