glibc/math/auto-libm-test-in

8884 lines
235 KiB
Plaintext
Raw Normal View History

# libm test inputs for gen-auto-libm-tests.c.
# Copyright (C) 1997-2024 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
Prefer https to http for gnu.org and fsf.org URLs Also, change sources.redhat.com to sourceware.org. This patch was automatically generated by running the following shell script, which uses GNU sed, and which avoids modifying files imported from upstream: sed -ri ' s,(http|ftp)(://(.*\.)?(gnu|fsf|sourceware)\.org($|[^.]|\.[^a-z])),https\2,g s,(http|ftp)(://(.*\.)?)sources\.redhat\.com($|[^.]|\.[^a-z]),https\2sourceware.org\4,g ' \ $(find $(git ls-files) -prune -type f \ ! -name '*.po' \ ! -name 'ChangeLog*' \ ! -path COPYING ! -path COPYING.LIB \ ! -path manual/fdl-1.3.texi ! -path manual/lgpl-2.1.texi \ ! -path manual/texinfo.tex ! -path scripts/config.guess \ ! -path scripts/config.sub ! -path scripts/install-sh \ ! -path scripts/mkinstalldirs ! -path scripts/move-if-change \ ! -path INSTALL ! -path locale/programs/charmap-kw.h \ ! -path po/libc.pot ! -path sysdeps/gnu/errlist.c \ ! '(' -name configure \ -execdir test -f configure.ac -o -f configure.in ';' ')' \ ! '(' -name preconfigure \ -execdir test -f preconfigure.ac ';' ')' \ -print) and then by running 'make dist-prepare' to regenerate files built from the altered files, and then executing the following to cleanup: chmod a+x sysdeps/unix/sysv/linux/riscv/configure # Omit irrelevant whitespace and comment-only changes, # perhaps from a slightly-different Autoconf version. git checkout -f \ sysdeps/csky/configure \ sysdeps/hppa/configure \ sysdeps/riscv/configure \ sysdeps/unix/sysv/linux/csky/configure # Omit changes that caused a pre-commit check to fail like this: # remote: *** error: sysdeps/powerpc/powerpc64/ppc-mcount.S: trailing lines git checkout -f \ sysdeps/powerpc/powerpc64/ppc-mcount.S \ sysdeps/unix/sysv/linux/s390/s390-64/syscall.S # Omit change that caused a pre-commit check to fail like this: # remote: *** error: sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S: last line does not end in newline git checkout -f sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S
2019-09-07 05:40:42 +00:00
# <https://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
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
acos 0x0.fffffffffffff8p0
acos -0x0.fffffffffffff8p0
acos 0x0.ffffffffffffffffp0
acos -0x0.ffffffffffffffffp0
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
acos 0x0.ffffffffffffffffffffffffffcp0
acos -0x0.ffffffffffffffffffffffffffcp0
acos 0x0.ffffffffffffffffffffffffffff8p0
acos -0x0.ffffffffffffffffffffffffffff8p0
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
# the next value generates larger error bounds on x86_64 (binary64)
acos 0x1.fffff3634acd6p-1
# the next value generates larger error bounds on x86_64 (ldbl-96)
acos 0xf.fe00271d507ee5dp-4
acos min
acos -min
acos min_subnorm
acos -min_subnorm
acosh 1
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
acosh 0x1.000002p0
acosh 0x1.0000000000001p0
acosh 0x1.0000000000000002p0
acosh 0x1.000000000000000000000000008p0
acosh 0x1.0000000000000000000000000001p0
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
# the next value generates larger error bounds on x86_64 (ldbl-96)
acosh 0x1.1ecbdf374bce01cap+0
# the next value generates larger error bounds on x86_64 (binary128)
acosh 0x1.0f97586eba090200118df0902f99p+0
acosh max
Add narrowing add functions. This patch adds the narrowing add functions from TS 18661-1 to glibc's libm: fadd, faddl, daddl, f32addf64, f32addf32x, f32xaddf64 for all configurations; f32addf64x, f32addf128, f64addf64x, f64addf128, f32xaddf64x, f32xaddf128, f64xaddf128 for configurations with _Float64x and _Float128; __nldbl_daddl for ldbl-opt. As discussed for the build infrastructure patch, tgmath.h support is deliberately deferred, and FP_FAST_* macros are not applicable without optimized function implementations. Function implementations are added for all relevant pairs of formats (including certain cases of a format and itself where more than one type has that format). The main implementations use round-to-odd, or a trivial computation in the case where both formats are the same or where the wider format is IBM long double (in which case we don't attempt to be correctly rounding). The sysdeps/ieee754/soft-fp implementations use soft-fp, and are used automatically for configurations without exceptions and rounding modes by virtue of existing Implies files. As previously discussed, optimized versions for particular architectures are possible, but not included. i386 gets a special version of f32xaddf64 to avoid problems with double rounding (similar to the existing fdim version), since this function must round just once without an intermediate rounding to long double. (No such special version is needed for any other function, because the nontrivial functions use round-to-odd, which does the intermediate computation with the rounding mode set to round-to-zero, and double rounding is OK except in round-to-nearest mode, so is OK for that intermediate round-to-zero computation.) mul and div will need slightly different special versions for i386 (using round-to-odd on long double instead of precision control) because of the possibility of inexact intermediate results in the subnormal range for double. To reduce duplication among the different function implementations, math-narrow.h gets macros CHECK_NARROW_ADD, NARROW_ADD_ROUND_TO_ODD and NARROW_ADD_TRIVIAL. In the trivial cases and for any architecture-specific optimized implementations, the overhead of the errno setting might be significant, but I think that's best handled through compiler built-in functions rather than providing separate no-errno versions in glibc (and likewise there are no __*_finite entry points for these function provided, __*_finite effectively being no-errno versions at present in most cases). Tested for x86_64 and x86, with both GCC 6 and GCC 7. Tested for mips64 (all three ABIs, both hard and soft float) and powerpc with GCC 7. Tested with build-many-glibcs.py with both GCC 6 and GCC 7. * math/Makefile (libm-narrow-fns): Add add. (libm-test-funcs-narrow): Likewise. * math/Versions (GLIBC_2.28): Add narrowing add functions. * math/bits/mathcalls-narrow.h (add): Use __MATHCALL_NARROW . * math/gen-auto-libm-tests.c (test_functions): Add add. * math/math-narrow.h (CHECK_NARROW_ADD): New macro. (NARROW_ADD_ROUND_TO_ODD): Likewise. (NARROW_ADD_TRIVIAL): Likewise. * sysdeps/ieee754/float128/float128_private.h (__faddl): New macro. (__daddl): Likewise. * sysdeps/ieee754/ldbl-opt/Makefile (libnldbl-calls): Add fadd and dadd. (CFLAGS-nldbl-dadd.c): New variable. (CFLAGS-nldbl-fadd.c): Likewise. * sysdeps/ieee754/ldbl-opt/Versions (GLIBC_2.28): Add __nldbl_daddl. * sysdeps/ieee754/ldbl-opt/nldbl-compat.h (__nldbl_daddl): New prototype. * manual/arith.texi (Misc FP Arithmetic): Document fadd, faddl, daddl, fMaddfN, fMaddfNx, fMxaddfN and fMxaddfNx. * math/auto-libm-test-in: Add tests of add. * math/auto-libm-test-out-narrow-add: New generated file. * math/libm-test-narrow-add.inc: New file. * sysdeps/i386/fpu/s_f32xaddf64.c: Likewise. * sysdeps/ieee754/dbl-64/s_f32xaddf64.c: Likewise. * sysdeps/ieee754/dbl-64/s_fadd.c: Likewise. * sysdeps/ieee754/float128/s_f32addf128.c: Likewise. * sysdeps/ieee754/float128/s_f64addf128.c: Likewise. * sysdeps/ieee754/float128/s_f64xaddf128.c: Likewise. * sysdeps/ieee754/ldbl-128/s_daddl.c: Likewise. * sysdeps/ieee754/ldbl-128/s_f64xaddf128.c: Likewise. * sysdeps/ieee754/ldbl-128/s_faddl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_daddl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_faddl.c: Likewise. * sysdeps/ieee754/ldbl-96/s_daddl.c: Likewise. * sysdeps/ieee754/ldbl-96/s_faddl.c: Likewise. * sysdeps/ieee754/ldbl-opt/nldbl-dadd.c: Likewise. * sysdeps/ieee754/ldbl-opt/nldbl-fadd.c: Likewise. * sysdeps/ieee754/soft-fp/s_daddl.c: Likewise. * sysdeps/ieee754/soft-fp/s_fadd.c: Likewise. * sysdeps/ieee754/soft-fp/s_faddl.c: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * sysdeps/mach/hurd/i386/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/aarch64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/alpha/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/arm/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/hppa/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/i386/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/ia64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/microblaze/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/nios2/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/riscv/rv64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/sh/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilegx32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilegx64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise.
2018-02-10 02:08:43 +00:00
add 0 0
add 0 -0
add -0 0
add -0 -0
add max max
add max -max
add -max max
add -max -max
add min min missing-underflow:arg-ibm128
add min -min missing-underflow:arg-ibm128
add -min min missing-underflow:arg-ibm128
add -min -min missing-underflow:arg-ibm128
add min_subnorm min_subnorm missing-underflow:arg-ibm128
add min_subnorm -min_subnorm missing-underflow:arg-ibm128
add -min_subnorm min_subnorm missing-underflow:arg-ibm128
add -min_subnorm -min_subnorm missing-underflow:arg-ibm128
add 1 2
add 1 -2
add -1 2
add -1 -2
add 100.5 0.75
add 100.5 -0.75
add -100.5 0.75
add -100.5 -0.75
add 1 0x1p-23
add 1 0x1.7fp-23
add 1 0x1.8p-23
add 1 0x1.81p-23
add 1 0x1p-24
add 1 0x1.1p-24
add 1 0x0.fp-24
add 1 min
add 1 -min
add 1 min_subnorm
add 1 -min_subnorm
add -1 min
add -1 -min
add -1 min_subnorm
add -1 -min_subnorm
# Cases where larger argument is half way between two values of a
# floating-point format, so that double rounding would sometimes yield
# the wrong result.
add 0x1.000001p0 min
add 0x1.000001p0 -min
add 0x1.000001p0 min_subnorm
add 0x1.000001p0 -min_subnorm
add -0x1.000001p0 min
add -0x1.000001p0 -min
add -0x1.000001p0 min_subnorm
add -0x1.000001p0 -min_subnorm
add 0x1.00000000000008p0 min
add 0x1.00000000000008p0 -min
add 0x1.00000000000008p0 min_subnorm
add 0x1.00000000000008p0 -min_subnorm
add -0x1.00000000000008p0 min
add -0x1.00000000000008p0 -min
add -0x1.00000000000008p0 min_subnorm
add -0x1.00000000000008p0 -min_subnorm
add 0x1.0000000000000001p0 min
add 0x1.0000000000000001p0 -min
add 0x1.0000000000000001p0 min_subnorm
add 0x1.0000000000000001p0 -min_subnorm
add -0x1.0000000000000001p0 min
add -0x1.0000000000000001p0 -min
add -0x1.0000000000000001p0 min_subnorm
add -0x1.0000000000000001p0 -min_subnorm
# Two values representable in the same format with sum very close to
# half way between two representable values. In particular, verify
# that there is no intermediate rounding to 64 bits when adding two
# double values.
add 1 0x1.000002p-24
add 1 -0x1.000002p-24
add 1 0x0.ffffffp-24
add 1 -0x0.ffffffp-24
add 0x1.000002p0 0x1.000002p-24
add 0x1.000002p0 -0x1.000002p-24
add 0x1.000002p0 0x0.ffffffp-24
add 0x1.000002p0 -0x0.ffffffp-24
add 1 0x1.0000000000001p-53
add 1 -0x1.0000000000001p-53
add 1 0x0.fffffffffffff8p-53
add 1 -0x0.fffffffffffff8p-53
add 0x1.0000000000001p0 0x1.0000000000001p-53
add 0x1.0000000000001p0 -0x1.0000000000001p-53
add 0x1.0000000000001p0 0x0.fffffffffffff8p-53
add 0x1.0000000000001p0 -0x0.fffffffffffff8p-53
add 1 0x1.0000000000000002p-64
add 1 -0x1.0000000000000002p-64
add 1 0x0.ffffffffffffffffp-64
add 1 -0x0.ffffffffffffffffp-64
add 0x1.0000000000000002p0 0x1.0000000000000002p-64
add 0x1.0000000000000002p0 -0x1.0000000000000002p-64
add 0x1.0000000000000002p0 0x0.ffffffffffffffffp-64
add 0x1.0000000000000002p0 -0x0.ffffffffffffffffp-64
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
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
asin 0x0.fffffffffffff8p0
asin -0x0.fffffffffffff8p0
asin 0x0.ffffffffffffffffp0
asin -0x0.ffffffffffffffffp0
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
asin 0x0.ffffffffffffffffffffffffffcp0
asin -0x0.ffffffffffffffffffffffffffcp0
asin 0x0.ffffffffffffffffffffffffffff8p0
asin -0x0.ffffffffffffffffffffffffffff8p0
asin 0x1p-5
asin 0x1p-10
asin 0x1p-15
asin 0x1p-20
asin 0x1p-25
asin 0x1p-30
asin 0x1p-35
asin 0x1p-40
asin 0x1p-45
asin 0x1p-50
asin 0x1p-55
asin 0x1p-60
asin 0x1p-100
asin 0x1p-600
asin 0x1p-10000
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
# the next value generates larger error bounds on x86_64 (binary64)
asin 0x1.f6041ffe89d7dp-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-26 17:18:54 +00: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
# the next value generates larger error bounds on x86_64 (binary32)
asinh 0xf.96c69p-8
# the next value generates larger error bounds on x86_64 (binary64)
asinh 0x1.023cfeab10a13p-2
# the next value generates larger error bounds on x86_64 (binary128)
asinh -0x5.a95683e302a71be88a35649b24ep-4
asinh min
asinh -min
asinh min_subnorm
asinh -min_subnorm
asinh max
asinh -max
atan 0
atan -0
atan max
atan -max
atan 1
atan -1
atan 0.75
atan 0x1p-5
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
atan 0x1p-10
atan 0x1p-15
atan 0x1p-20
atan 0x1p-25
atan 0x1p-30
atan 0x1p-35
atan 0x1p-40
atan 0x1p-45
atan 0x1p-50
atan 0x1p-55
atan 0x1p-60
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-18 21:10:49 +00: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
# the next value generates larger error bounds on x86_64 (binary32)
atan 0x1.626772p-1
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-18 21:10:49 +00: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
# the next value generates larger error bounds on x86_64 (binary32)
atan2 -0x1.f9cf48p+49 0x1.f60598p+51
# the next value generates larger error bounds on x86_64 (binary64)
atan2 0x1.bcab29da0e947p-54 0x1.bc41f4d2294b8p-54
# the next value generates larger error bounds on x86_64 (binary64)
atan2 0x1.a11891ec004d4p-348 0x1.814830510be26p-348
# the next value generates larger error bounds on x86_64 (binary64)
atan2 0x1.b836ed678be29p-588 0x1.b7be6f5a03a8cp-588
# the next value generates larger error bounds on x86_64 (binary64)
atan2 0x1.a83f842ef3f73p-633 0x1.a799d8a6677ep-633
# the next value generates larger error bounds on x86_64 (binary128)
atan2 0x1.41df5aa214612c7e019fa6ade88p-13316 0x5.e53b26a270a29eb9f77ef8ef7af8p-13316
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
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
atan2 min min_subnorm
atan2 min -min_subnorm
atan2 -min min_subnorm
atan2 -min -min_subnorm
atan2 min_subnorm min
atan2 min_subnorm -min
atan2 -min_subnorm min
atan2 -min_subnorm -min
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-18 21:10:49 +00:00
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-18 21:10:49 +00:00
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 0x0.ffffffp0
atanh -0x0.ffffffp0
atanh 0x0.ffffffff8p0
atanh -0x0.ffffffff8p0
atanh 0x0.ffffffffffffp0
atanh -0x0.ffffffffffffp0
atanh 0x0.fffffffffffff8p0
atanh -0x0.fffffffffffff8p0
atanh 0x0.ffffffffffffffffp0
atanh -0x0.ffffffffffffffffp0
atanh 0x0.ffffffffffffffffffffffffffcp0
atanh -0x0.ffffffffffffffffffffffffffcp0
atanh 0x0.ffffffffffffffffffffffffffff8p0
atanh -0x0.ffffffffffffffffffffffffffff8p0
atanh -0x6.e6c77p-20
atanh 0x3.2ca824p-4
atanh -0x1.cc1d66p-4
atanh -0xf.cd3809ca8fd28p-4
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-15 22:07:57 +00:00
atanh 0x1p-500
atanh 0x1p-5000
# the next value generates larger error bounds in libmvec/avx512 on x86_64
# (binary32)
atanh 0x1.f80094p-8
# the next value generates larger error bounds on x86_64 (binary128)
atanh 0x2.c02a24f3472c7840afbd8cfb68bap-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-15 22:07:57 +00:00
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
cacos 0 0
cacos -0 0
cacos -0 -0
cacos 0 -0
cacos 0 -1.5
cacos -0 -1.5
cacos 0 -1.0
cacos -0 -1.0
cacos 0 -0.5
cacos -0 -0.5
cacos 0 0.5
cacos -0 0.5
cacos 0 1.0
cacos -0 1.0
cacos 0 1.5
cacos -0 1.5
cacos -1.5 0
cacos -1.5 -0
cacos -1.0 0
cacos -1.0 -0
cacos -0.5 0
cacos -0.5 -0
cacos 0.5 0
cacos 0.5 -0
cacos 1.0 0
cacos 1.0 -0
cacos 1.5 0
cacos 1.5 -0
cacos 0x1p50 1.0
cacos 0x1p50 -1.0
cacos -0x1p50 1.0
cacos -0x1p50 -1.0
cacos 1.0 0x1p50
cacos -1.0 0x1p50
cacos 1.0 -0x1p50
cacos -1.0 -0x1p50
cacos 0x1p500 1.0
cacos 0x1p500 -1.0
cacos -0x1p500 1.0
cacos -0x1p500 -1.0
cacos 1.0 0x1p500
cacos -1.0 0x1p500
cacos 1.0 -0x1p500
cacos -1.0 -0x1p500
cacos 0x1p5000 1.0
cacos 0x1p5000 -1.0
cacos -0x1p5000 1.0
cacos -0x1p5000 -1.0
cacos 1.0 0x1p5000
cacos -1.0 0x1p5000
cacos 1.0 -0x1p5000
cacos -1.0 -0x1p5000
cacos 0x1.fp127 0x1.fp127
cacos 0x1.fp1023 0x1.fp1023
cacos 0x1.fp16383 0x1.fp16383
cacos 0x1.fp-129 1.5
cacos 0x1.fp-129 -1.5
cacos -0x1.fp-129 1.5
cacos -0x1.fp-129 -1.5
cacos 1.5 0x1.fp-129
cacos -1.5 0x1.fp-129
cacos 1.5 -0x1.fp-129
cacos -1.5 -0x1.fp-129
cacos 0x1.fp-1025 1.5
cacos 0x1.fp-1025 -1.5
cacos -0x1.fp-1025 1.5
cacos -0x1.fp-1025 -1.5
cacos 1.5 0x1.fp-1025
cacos -1.5 0x1.fp-1025
cacos 1.5 -0x1.fp-1025
cacos -1.5 -0x1.fp-1025
cacos 0x1.fp-16385 1.5
cacos 0x1.fp-16385 -1.5
cacos -0x1.fp-16385 1.5
cacos -0x1.fp-16385 -1.5
cacos 1.5 0x1.fp-16385
cacos -1.5 0x1.fp-16385
cacos 1.5 -0x1.fp-16385
cacos -1.5 -0x1.fp-16385
cacos 0.5 1.0
cacos 0.5 -1.0
cacos -0.5 1.0
cacos -0.5 -1.0
cacos 1.0 0.5
cacos -1.0 0.5
cacos 1.0 -0.5
cacos -1.0 -0.5
cacos 0.25 1.0
cacos 0.25 -1.0
cacos -0.25 1.0
cacos -0.25 -1.0
cacos 1.0 0.25
cacos -1.0 0.25
cacos 1.0 -0.25
cacos -1.0 -0.25
cacos 0x1.fp-10 1.0
cacos 0x1.fp-10 -1.0
cacos -0x1.fp-10 1.0
cacos -0x1.fp-10 -1.0
cacos 1.0 0x1.fp-10
cacos -1.0 0x1.fp-10
cacos 1.0 -0x1.fp-10
cacos -1.0 -0x1.fp-10
cacos 0x1.fp-30 1.0
cacos 0x1.fp-30 -1.0
cacos -0x1.fp-30 1.0
cacos -0x1.fp-30 -1.0
cacos 1.0 0x1.fp-30
cacos -1.0 0x1.fp-30
cacos 1.0 -0x1.fp-30
cacos -1.0 -0x1.fp-30
cacos 0x1.fp-100 1.0
cacos 0x1.fp-100 -1.0
cacos -0x1.fp-100 1.0
cacos -0x1.fp-100 -1.0
cacos 1.0 0x1.fp-100
cacos -1.0 0x1.fp-100
cacos 1.0 -0x1.fp-100
cacos -1.0 -0x1.fp-100
cacos 0x1.fp-129 1.0
cacos 0x1.fp-129 -1.0
cacos -0x1.fp-129 1.0
cacos -0x1.fp-129 -1.0
cacos 1.0 0x1.fp-129
cacos -1.0 0x1.fp-129
cacos 1.0 -0x1.fp-129
cacos -1.0 -0x1.fp-129
cacos 0x1.fp-1000 1.0
cacos 0x1.fp-1000 -1.0
cacos -0x1.fp-1000 1.0
cacos -0x1.fp-1000 -1.0
cacos 1.0 0x1.fp-1000
cacos -1.0 0x1.fp-1000
cacos 1.0 -0x1.fp-1000
cacos -1.0 -0x1.fp-1000
cacos 0x1.fp-1025 1.0
cacos 0x1.fp-1025 -1.0
cacos -0x1.fp-1025 1.0
cacos -0x1.fp-1025 -1.0
cacos 1.0 0x1.fp-1025
cacos -1.0 0x1.fp-1025
cacos 1.0 -0x1.fp-1025
cacos -1.0 -0x1.fp-1025
cacos 0x1.fp-10000 1.0
cacos 0x1.fp-10000 -1.0
cacos -0x1.fp-10000 1.0
cacos -0x1.fp-10000 -1.0
cacos 1.0 0x1.fp-10000
cacos -1.0 0x1.fp-10000
cacos 1.0 -0x1.fp-10000
cacos -1.0 -0x1.fp-10000
cacos 0x1.fp-16385 1.0
cacos 0x1.fp-16385 -1.0
cacos -0x1.fp-16385 1.0
cacos -0x1.fp-16385 -1.0
cacos 1.0 0x1.fp-16385
cacos -1.0 0x1.fp-16385
cacos 1.0 -0x1.fp-16385
cacos -1.0 -0x1.fp-16385
cacos 0x1p-23 0x1.000002p0
cacos 0x1p-23 -0x1.000002p0
cacos -0x1p-23 0x1.000002p0
cacos -0x1p-23 -0x1.000002p0
cacos 0x1.000002p0 0x1p-23
cacos -0x1.000002p0 0x1p-23
cacos 0x1.000002p0 -0x1p-23
cacos -0x1.000002p0 -0x1p-23
cacos 0x1.fp-129 0x1.000002p0
cacos 0x1.fp-129 -0x1.000002p0
cacos -0x1.fp-129 0x1.000002p0
cacos -0x1.fp-129 -0x1.000002p0
cacos 0x1.000002p0 0x1.fp-129
cacos -0x1.000002p0 0x1.fp-129
cacos 0x1.000002p0 -0x1.fp-129
cacos -0x1.000002p0 -0x1.fp-129
cacos 0.0 0x1.000002p0
cacos 0.0 -0x1.000002p0
cacos -0.0 0x1.000002p0
cacos -0.0 -0x1.000002p0
cacos 0x1.000002p0 0.0
cacos -0x1.000002p0 0.0
cacos 0x1.000002p0 -0.0
cacos -0x1.000002p0 -0.0
cacos 0x1p-52 0x1.0000000000001p0
cacos 0x1p-52 -0x1.0000000000001p0
cacos -0x1p-52 0x1.0000000000001p0
cacos -0x1p-52 -0x1.0000000000001p0
cacos 0x1.0000000000001p0 0x1p-52
cacos -0x1.0000000000001p0 0x1p-52
cacos 0x1.0000000000001p0 -0x1p-52
cacos -0x1.0000000000001p0 -0x1p-52
cacos 0x1.fp-1025 0x1.0000000000001p0
cacos 0x1.fp-1025 -0x1.0000000000001p0
cacos -0x1.fp-1025 0x1.0000000000001p0
cacos -0x1.fp-1025 -0x1.0000000000001p0
cacos 0x1.0000000000001p0 0x1.fp-1025
cacos -0x1.0000000000001p0 0x1.fp-1025
cacos 0x1.0000000000001p0 -0x1.fp-1025
cacos -0x1.0000000000001p0 -0x1.fp-1025
cacos 0.0 0x1.0000000000001p0
cacos 0.0 -0x1.0000000000001p0
cacos -0.0 0x1.0000000000001p0
cacos -0.0 -0x1.0000000000001p0
cacos 0x1.0000000000001p0 0.0
cacos -0x1.0000000000001p0 0.0
cacos 0x1.0000000000001p0 -0.0
cacos -0x1.0000000000001p0 -0.0
cacos 0x1p-63 0x1.0000000000000002p0
cacos 0x1p-63 -0x1.0000000000000002p0
cacos -0x1p-63 0x1.0000000000000002p0
cacos -0x1p-63 -0x1.0000000000000002p0
cacos 0x1.0000000000000002p0 0x1p-63
cacos -0x1.0000000000000002p0 0x1p-63
cacos 0x1.0000000000000002p0 -0x1p-63
cacos -0x1.0000000000000002p0 -0x1p-63
cacos 0x1.fp-16385 0x1.0000000000000002p0
cacos 0x1.fp-16385 -0x1.0000000000000002p0
cacos -0x1.fp-16385 0x1.0000000000000002p0
cacos -0x1.fp-16385 -0x1.0000000000000002p0
cacos 0x1.0000000000000002p0 0x1.fp-16385
cacos -0x1.0000000000000002p0 0x1.fp-16385
cacos 0x1.0000000000000002p0 -0x1.fp-16385
cacos -0x1.0000000000000002p0 -0x1.fp-16385
cacos 0.0 0x1.0000000000000002p0
cacos 0.0 -0x1.0000000000000002p0
cacos -0.0 0x1.0000000000000002p0
cacos -0.0 -0x1.0000000000000002p0
cacos 0x1.0000000000000002p0 0.0
cacos -0x1.0000000000000002p0 0.0
cacos 0x1.0000000000000002p0 -0.0
cacos -0x1.0000000000000002p0 -0.0
cacos 0x1p-106 0x1.000000000000000000000000008p0
cacos 0x1p-106 -0x1.000000000000000000000000008p0
cacos -0x1p-106 0x1.000000000000000000000000008p0
cacos -0x1p-106 -0x1.000000000000000000000000008p0
cacos 0x1.000000000000000000000000008p0 0x1p-106
cacos -0x1.000000000000000000000000008p0 0x1p-106
cacos 0x1.000000000000000000000000008p0 -0x1p-106
cacos -0x1.000000000000000000000000008p0 -0x1p-106
cacos 0x1.fp-1025 0x1.000000000000000000000000008p0
cacos 0x1.fp-1025 -0x1.000000000000000000000000008p0
cacos -0x1.fp-1025 0x1.000000000000000000000000008p0
cacos -0x1.fp-1025 -0x1.000000000000000000000000008p0
cacos 0x1.000000000000000000000000008p0 0x1.fp-1025
cacos -0x1.000000000000000000000000008p0 0x1.fp-1025
cacos 0x1.000000000000000000000000008p0 -0x1.fp-1025
cacos -0x1.000000000000000000000000008p0 -0x1.fp-1025
cacos 0.0 0x1.000000000000000000000000008p0
cacos 0.0 -0x1.000000000000000000000000008p0
cacos -0.0 0x1.000000000000000000000000008p0
cacos -0.0 -0x1.000000000000000000000000008p0
cacos 0x1.000000000000000000000000008p0 0.0
cacos -0x1.000000000000000000000000008p0 0.0
cacos 0x1.000000000000000000000000008p0 -0.0
cacos -0x1.000000000000000000000000008p0 -0.0
cacos 0x1p-113 0x1.0000000000000000000000000001p0
cacos 0x1p-113 -0x1.0000000000000000000000000001p0
cacos -0x1p-113 0x1.0000000000000000000000000001p0
cacos -0x1p-113 -0x1.0000000000000000000000000001p0
cacos 0x1.0000000000000000000000000001p0 0x1p-113
cacos -0x1.0000000000000000000000000001p0 0x1p-113
cacos 0x1.0000000000000000000000000001p0 -0x1p-113
cacos -0x1.0000000000000000000000000001p0 -0x1p-113
cacos 0x1.fp-16385 0x1.0000000000000000000000000001p0
cacos 0x1.fp-16385 -0x1.0000000000000000000000000001p0
cacos -0x1.fp-16385 0x1.0000000000000000000000000001p0
cacos -0x1.fp-16385 -0x1.0000000000000000000000000001p0
cacos 0x1.0000000000000000000000000001p0 0x1.fp-16385
cacos -0x1.0000000000000000000000000001p0 0x1.fp-16385
cacos 0x1.0000000000000000000000000001p0 -0x1.fp-16385
cacos -0x1.0000000000000000000000000001p0 -0x1.fp-16385
cacos 0.0 0x1.0000000000000000000000000001p0
cacos 0.0 -0x1.0000000000000000000000000001p0
cacos -0.0 0x1.0000000000000000000000000001p0
cacos -0.0 -0x1.0000000000000000000000000001p0
cacos 0x1.0000000000000000000000000001p0 0.0
cacos -0x1.0000000000000000000000000001p0 0.0
cacos 0x1.0000000000000000000000000001p0 -0.0
cacos -0x1.0000000000000000000000000001p0 -0.0
cacos 0x1p-23 0x0.ffffffp0
cacos 0x1p-23 -0x0.ffffffp0
cacos -0x1p-23 0x0.ffffffp0
cacos -0x1p-23 -0x0.ffffffp0
cacos 0x0.ffffffp0 0x1p-23
cacos -0x0.ffffffp0 0x1p-23
cacos 0x0.ffffffp0 -0x1p-23
cacos -0x0.ffffffp0 -0x1p-23
cacos 0x1.fp-129 0x0.ffffffp0
cacos 0x1.fp-129 -0x0.ffffffp0
cacos -0x1.fp-129 0x0.ffffffp0
cacos -0x1.fp-129 -0x0.ffffffp0
cacos 0x0.ffffffp0 0x1.fp-129
cacos -0x0.ffffffp0 0x1.fp-129
cacos 0x0.ffffffp0 -0x1.fp-129
cacos -0x0.ffffffp0 -0x1.fp-129
cacos 0.0 0x0.ffffffp0
cacos 0.0 -0x0.ffffffp0
cacos -0.0 0x0.ffffffp0
cacos -0.0 -0x0.ffffffp0
cacos 0x0.ffffffp0 0.0
cacos -0x0.ffffffp0 0.0
cacos 0x0.ffffffp0 -0.0
cacos -0x0.ffffffp0 -0.0
cacos 0x1p-23 0.5
cacos 0x1p-23 -0.5
cacos -0x1p-23 0.5
cacos -0x1p-23 -0.5
cacos 0.5 0x1p-23
cacos -0.5 0x1p-23
cacos 0.5 -0x1p-23
cacos -0.5 -0x1p-23
cacos 0x1.fp-129 0.5
cacos 0x1.fp-129 -0.5
cacos -0x1.fp-129 0.5
cacos -0x1.fp-129 -0.5
cacos 0.5 0x1.fp-129
cacos -0.5 0x1.fp-129
cacos 0.5 -0x1.fp-129
cacos -0.5 -0x1.fp-129
cacos 0x1p-23 0x1p-23
cacos 0x1p-23 -0x1p-23
cacos -0x1p-23 0x1p-23
cacos -0x1p-23 -0x1p-23
cacos 0x1.fp-129 0x1p-23
cacos 0x1.fp-129 -0x1p-23
cacos -0x1.fp-129 0x1p-23
cacos -0x1.fp-129 -0x1p-23
cacos 0x1p-23 0x1.fp-129
cacos -0x1p-23 0x1.fp-129
cacos 0x1p-23 -0x1.fp-129
cacos -0x1p-23 -0x1.fp-129
cacos 0.0 0x1p-23
cacos 0.0 -0x1p-23
cacos -0.0 0x1p-23
cacos -0.0 -0x1p-23
cacos 0x1p-23 0.0
cacos -0x1p-23 0.0
cacos 0x1p-23 -0.0
cacos -0x1p-23 -0.0
cacos 0x1.fp-129 0x1.fp-129
cacos 0x1.fp-129 -0x1.fp-129
cacos -0x1.fp-129 0x1.fp-129
cacos -0x1.fp-129 -0x1.fp-129
cacos 0x1p-52 0x0.fffffffffffff8p0
cacos 0x1p-52 -0x0.fffffffffffff8p0
cacos -0x1p-52 0x0.fffffffffffff8p0
cacos -0x1p-52 -0x0.fffffffffffff8p0
cacos 0x0.fffffffffffff8p0 0x1p-52
cacos -0x0.fffffffffffff8p0 0x1p-52
cacos 0x0.fffffffffffff8p0 -0x1p-52
cacos -0x0.fffffffffffff8p0 -0x1p-52
cacos 0x1.fp-1025 0x0.fffffffffffff8p0
cacos 0x1.fp-1025 -0x0.fffffffffffff8p0
cacos -0x1.fp-1025 0x0.fffffffffffff8p0
cacos -0x1.fp-1025 -0x0.fffffffffffff8p0
cacos 0x0.fffffffffffff8p0 0x1.fp-1025
cacos -0x0.fffffffffffff8p0 0x1.fp-1025
cacos 0x0.fffffffffffff8p0 -0x1.fp-1025
cacos -0x0.fffffffffffff8p0 -0x1.fp-1025
cacos 0.0 0x0.fffffffffffff8p0
cacos 0.0 -0x0.fffffffffffff8p0
cacos -0.0 0x0.fffffffffffff8p0
cacos -0.0 -0x0.fffffffffffff8p0
cacos 0x0.fffffffffffff8p0 0.0
cacos -0x0.fffffffffffff8p0 0.0
cacos 0x0.fffffffffffff8p0 -0.0
cacos -0x0.fffffffffffff8p0 -0.0
cacos 0x1p-52 0.5
cacos 0x1p-52 -0.5
cacos -0x1p-52 0.5
cacos -0x1p-52 -0.5
cacos 0.5 0x1p-52
cacos -0.5 0x1p-52
cacos 0.5 -0x1p-52
cacos -0.5 -0x1p-52
cacos 0x1.fp-1025 0.5
cacos 0x1.fp-1025 -0.5
cacos -0x1.fp-1025 0.5
cacos -0x1.fp-1025 -0.5
cacos 0.5 0x1.fp-1025
cacos -0.5 0x1.fp-1025
cacos 0.5 -0x1.fp-1025
cacos -0.5 -0x1.fp-1025
cacos 0x1p-52 0x1p-52
cacos 0x1p-52 -0x1p-52
cacos -0x1p-52 0x1p-52
cacos -0x1p-52 -0x1p-52
cacos 0x1.fp-1025 0x1p-52
cacos 0x1.fp-1025 -0x1p-52
cacos -0x1.fp-1025 0x1p-52
cacos -0x1.fp-1025 -0x1p-52
cacos 0x1p-52 0x1.fp-1025
cacos -0x1p-52 0x1.fp-1025
cacos 0x1p-52 -0x1.fp-1025
cacos -0x1p-52 -0x1.fp-1025
cacos 0.0 0x1p-52
cacos 0.0 -0x1p-52
cacos -0.0 0x1p-52
cacos -0.0 -0x1p-52
cacos 0x1p-52 0.0
cacos -0x1p-52 0.0
cacos 0x1p-52 -0.0
cacos -0x1p-52 -0.0
cacos 0x1.fp-1025 0x1.fp-1025
cacos 0x1.fp-1025 -0x1.fp-1025
cacos -0x1.fp-1025 0x1.fp-1025
cacos -0x1.fp-1025 -0x1.fp-1025
cacos 0x1p-63 0x0.ffffffffffffffffp0
cacos 0x1p-63 -0x0.ffffffffffffffffp0
cacos -0x1p-63 0x0.ffffffffffffffffp0
cacos -0x1p-63 -0x0.ffffffffffffffffp0
cacos 0x0.ffffffffffffffffp0 0x1p-63
cacos -0x0.ffffffffffffffffp0 0x1p-63
cacos 0x0.ffffffffffffffffp0 -0x1p-63
cacos -0x0.ffffffffffffffffp0 -0x1p-63
cacos 0x1.fp-16385 0x0.ffffffffffffffffp0
cacos 0x1.fp-16385 -0x0.ffffffffffffffffp0
cacos -0x1.fp-16385 0x0.ffffffffffffffffp0
cacos -0x1.fp-16385 -0x0.ffffffffffffffffp0
cacos 0x0.ffffffffffffffffp0 0x1.fp-16385
cacos -0x0.ffffffffffffffffp0 0x1.fp-16385
cacos 0x0.ffffffffffffffffp0 -0x1.fp-16385
cacos -0x0.ffffffffffffffffp0 -0x1.fp-16385
cacos 0.0 0x0.ffffffffffffffffp0
cacos 0.0 -0x0.ffffffffffffffffp0
cacos -0.0 0x0.ffffffffffffffffp0
cacos -0.0 -0x0.ffffffffffffffffp0
cacos 0x0.ffffffffffffffffp0 0.0
cacos -0x0.ffffffffffffffffp0 0.0
cacos 0x0.ffffffffffffffffp0 -0.0
cacos -0x0.ffffffffffffffffp0 -0.0
cacos 0x1p-63 0.5
cacos 0x1p-63 -0.5
cacos -0x1p-63 0.5
cacos -0x1p-63 -0.5
cacos 0.5 0x1p-63
cacos -0.5 0x1p-63
cacos 0.5 -0x1p-63
cacos -0.5 -0x1p-63
cacos 0x1.fp-16385 0.5
cacos 0x1.fp-16385 -0.5
cacos -0x1.fp-16385 0.5
cacos -0x1.fp-16385 -0.5
cacos 0.5 0x1.fp-16385
cacos -0.5 0x1.fp-16385
cacos 0.5 -0x1.fp-16385
cacos -0.5 -0x1.fp-16385
cacos 0x1p-63 0x1p-63
cacos 0x1p-63 -0x1p-63
cacos -0x1p-63 0x1p-63
cacos -0x1p-63 -0x1p-63
cacos 0x1.fp-16385 0x1p-63
cacos 0x1.fp-16385 -0x1p-63
cacos -0x1.fp-16385 0x1p-63
cacos -0x1.fp-16385 -0x1p-63
cacos 0x1p-63 0x1.fp-16385
cacos -0x1p-63 0x1.fp-16385
cacos 0x1p-63 -0x1.fp-16385
cacos -0x1p-63 -0x1.fp-16385
cacos 0.0 0x1p-63
cacos 0.0 -0x1p-63
cacos -0.0 0x1p-63
cacos -0.0 -0x1p-63
cacos 0x1p-63 0.0
cacos -0x1p-63 0.0
cacos 0x1p-63 -0.0
cacos -0x1p-63 -0.0
cacos 0x1.fp-16385 0x1.fp-16385
cacos 0x1.fp-16385 -0x1.fp-16385
cacos -0x1.fp-16385 0x1.fp-16385
cacos -0x1.fp-16385 -0x1.fp-16385
cacos 0x1p-105 0x0.ffffffffffffffffffffffffffcp0
cacos 0x1p-105 -0x0.ffffffffffffffffffffffffffcp0
cacos -0x1p-105 0x0.ffffffffffffffffffffffffffcp0
cacos -0x1p-105 -0x0.ffffffffffffffffffffffffffcp0
cacos 0x0.ffffffffffffffffffffffffffcp0 0x1p-105
cacos -0x0.ffffffffffffffffffffffffffcp0 0x1p-105
cacos 0x0.ffffffffffffffffffffffffffcp0 -0x1p-105
cacos -0x0.ffffffffffffffffffffffffffcp0 -0x1p-105
cacos 0x1.fp-1025 0x0.ffffffffffffffffffffffffffcp0
cacos 0x1.fp-1025 -0x0.ffffffffffffffffffffffffffcp0
cacos -0x1.fp-1025 0x0.ffffffffffffffffffffffffffcp0
cacos -0x1.fp-1025 -0x0.ffffffffffffffffffffffffffcp0
cacos 0x0.ffffffffffffffffffffffffffcp0 0x1.fp-1025
cacos -0x0.ffffffffffffffffffffffffffcp0 0x1.fp-1025
cacos 0x0.ffffffffffffffffffffffffffcp0 -0x1.fp-1025
cacos -0x0.ffffffffffffffffffffffffffcp0 -0x1.fp-1025
cacos 0.0 0x0.ffffffffffffffffffffffffffcp0
cacos 0.0 -0x0.ffffffffffffffffffffffffffcp0
cacos -0.0 0x0.ffffffffffffffffffffffffffcp0
cacos -0.0 -0x0.ffffffffffffffffffffffffffcp0
cacos 0x0.ffffffffffffffffffffffffffcp0 0.0
cacos -0x0.ffffffffffffffffffffffffffcp0 0.0
cacos 0x0.ffffffffffffffffffffffffffcp0 -0.0
cacos -0x0.ffffffffffffffffffffffffffcp0 -0.0
cacos 0x1p-105 0.5
cacos 0x1p-105 -0.5
cacos -0x1p-105 0.5
cacos -0x1p-105 -0.5
cacos 0.5 0x1p-105
cacos -0.5 0x1p-105
cacos 0.5 -0x1p-105
cacos -0.5 -0x1p-105
cacos 0x1p-105 0x1p-105
cacos 0x1p-105 -0x1p-105
cacos -0x1p-105 0x1p-105
cacos -0x1p-105 -0x1p-105
cacos 0x1.fp-1025 0x1p-105
cacos 0x1.fp-1025 -0x1p-105
cacos -0x1.fp-1025 0x1p-105
cacos -0x1.fp-1025 -0x1p-105
cacos 0x1p-105 0x1.fp-1025
cacos -0x1p-105 0x1.fp-1025
cacos 0x1p-105 -0x1.fp-1025
cacos -0x1p-105 -0x1.fp-1025
cacos 0.0 0x1p-105
cacos 0.0 -0x1p-105
cacos -0.0 0x1p-105
cacos -0.0 -0x1p-105
cacos 0x1p-105 0.0
cacos -0x1p-105 0.0
cacos 0x1p-105 -0.0
cacos -0x1p-105 -0.0
cacos 0x1p-112 0x0.ffffffffffffffffffffffffffff8p0
cacos 0x1p-112 -0x0.ffffffffffffffffffffffffffff8p0
cacos -0x1p-112 0x0.ffffffffffffffffffffffffffff8p0
cacos -0x1p-112 -0x0.ffffffffffffffffffffffffffff8p0
cacos 0x0.ffffffffffffffffffffffffffff8p0 0x1p-112
cacos -0x0.ffffffffffffffffffffffffffff8p0 0x1p-112
cacos 0x0.ffffffffffffffffffffffffffff8p0 -0x1p-112
cacos -0x0.ffffffffffffffffffffffffffff8p0 -0x1p-112
cacos 0x1.fp-16385 0x0.ffffffffffffffffffffffffffff8p0
cacos 0x1.fp-16385 -0x0.ffffffffffffffffffffffffffff8p0
cacos -0x1.fp-16385 0x0.ffffffffffffffffffffffffffff8p0
cacos -0x1.fp-16385 -0x0.ffffffffffffffffffffffffffff8p0
cacos 0x0.ffffffffffffffffffffffffffff8p0 0x1.fp-16385
cacos -0x0.ffffffffffffffffffffffffffff8p0 0x1.fp-16385
cacos 0x0.ffffffffffffffffffffffffffff8p0 -0x1.fp-16385
cacos -0x0.ffffffffffffffffffffffffffff8p0 -0x1.fp-16385
cacos 0.0 0x0.ffffffffffffffffffffffffffff8p0
cacos 0.0 -0x0.ffffffffffffffffffffffffffff8p0
cacos -0.0 0x0.ffffffffffffffffffffffffffff8p0
cacos -0.0 -0x0.ffffffffffffffffffffffffffff8p0
cacos 0x0.ffffffffffffffffffffffffffff8p0 0.0
cacos -0x0.ffffffffffffffffffffffffffff8p0 0.0
cacos 0x0.ffffffffffffffffffffffffffff8p0 -0.0
cacos -0x0.ffffffffffffffffffffffffffff8p0 -0.0
cacos 0x1p-112 0.5
cacos 0x1p-112 -0.5
cacos -0x1p-112 0.5
cacos -0x1p-112 -0.5
cacos 0.5 0x1p-112
cacos -0.5 0x1p-112
cacos 0.5 -0x1p-112
cacos -0.5 -0x1p-112
cacos 0x1p-112 0x1p-112
cacos 0x1p-112 -0x1p-112
cacos -0x1p-112 0x1p-112
cacos -0x1p-112 -0x1p-112
cacos 0x1.fp-16385 0x1p-112
cacos 0x1.fp-16385 -0x1p-112
cacos -0x1.fp-16385 0x1p-112
cacos -0x1.fp-16385 -0x1p-112
cacos 0x1p-112 0x1.fp-16385
cacos -0x1p-112 0x1.fp-16385
cacos 0x1p-112 -0x1.fp-16385
cacos -0x1p-112 -0x1.fp-16385
cacos 0.0 0x1p-112
cacos 0.0 -0x1p-112
cacos -0.0 0x1p-112
cacos -0.0 -0x1p-112
cacos 0x1p-112 0.0
cacos -0x1p-112 0.0
cacos 0x1p-112 -0.0
cacos -0x1p-112 -0.0
cacos 0.75 1.25
cacos -2 -3
cacosh 0 0
cacosh -0 0
cacosh 0 -0
cacosh -0 -0
cacosh 0 -1.5
cacosh -0 -1.5
cacosh 0 -1.0
cacosh -0 -1.0
cacosh 0 -0.5
cacosh -0 -0.5
cacosh 0 0.5
cacosh -0 0.5
cacosh 0 1.0
cacosh -0 1.0
cacosh 0 1.5
cacosh -0 1.5
cacosh -1.5 0
cacosh -1.5 -0
cacosh -1.0 0
cacosh -1.0 -0
cacosh -0.5 0
cacosh -0.5 -0
cacosh 0.5 0
cacosh 0.5 -0
cacosh 1.0 0
cacosh 1.0 -0
cacosh 1.5 0
cacosh 1.5 -0
cacosh 0x1p50 1.0
cacosh 0x1p50 -1.0
cacosh -0x1p50 1.0
cacosh -0x1p50 -1.0
cacosh 1.0 0x1p50
cacosh -1.0 0x1p50
cacosh 1.0 -0x1p50
cacosh -1.0 -0x1p50
cacosh 0x1p500 1.0
cacosh 0x1p500 -1.0
cacosh -0x1p500 1.0
cacosh -0x1p500 -1.0
cacosh 1.0 0x1p500
cacosh -1.0 0x1p500
cacosh 1.0 -0x1p500
cacosh -1.0 -0x1p500
cacosh 0x1p5000 1.0
cacosh 0x1p5000 -1.0
cacosh -0x1p5000 1.0
cacosh -0x1p5000 -1.0
cacosh 1.0 0x1p5000
cacosh -1.0 0x1p5000
cacosh 1.0 -0x1p5000
cacosh -1.0 -0x1p5000
cacosh 0x1.fp127 0x1.fp127
cacosh 0x1.fp1023 0x1.fp1023
cacosh 0x1.fp16383 0x1.fp16383
cacosh 0x1.fp-129 1.5
cacosh 0x1.fp-129 -1.5
cacosh -0x1.fp-129 1.5
cacosh -0x1.fp-129 -1.5
cacosh 1.5 0x1.fp-129
cacosh -1.5 0x1.fp-129
cacosh 1.5 -0x1.fp-129
cacosh -1.5 -0x1.fp-129
cacosh 0x1.fp-1025 1.5
cacosh 0x1.fp-1025 -1.5
cacosh -0x1.fp-1025 1.5
cacosh -0x1.fp-1025 -1.5
cacosh 1.5 0x1.fp-1025
cacosh -1.5 0x1.fp-1025
cacosh 1.5 -0x1.fp-1025
cacosh -1.5 -0x1.fp-1025
cacosh 0x1.fp-16385 1.5
cacosh 0x1.fp-16385 -1.5
cacosh -0x1.fp-16385 1.5
cacosh -0x1.fp-16385 -1.5
cacosh 1.5 0x1.fp-16385
cacosh -1.5 0x1.fp-16385
cacosh 1.5 -0x1.fp-16385
cacosh -1.5 -0x1.fp-16385
cacosh 0.5 1.0
cacosh 0.5 -1.0
cacosh -0.5 1.0
cacosh -0.5 -1.0
cacosh 1.0 0.5
cacosh -1.0 0.5
cacosh 1.0 -0.5
cacosh -1.0 -0.5
cacosh 0.25 1.0
cacosh 0.25 -1.0
cacosh -0.25 1.0
cacosh -0.25 -1.0
cacosh 1.0 0.25
cacosh -1.0 0.25
cacosh 1.0 -0.25
cacosh -1.0 -0.25
cacosh 0x1.fp-10 1.0
cacosh 0x1.fp-10 -1.0
cacosh -0x1.fp-10 1.0
cacosh -0x1.fp-10 -1.0
cacosh 1.0 0x1.fp-10
cacosh -1.0 0x1.fp-10
cacosh 1.0 -0x1.fp-10
cacosh -1.0 -0x1.fp-10
cacosh 0x1.fp-30 1.0
cacosh 0x1.fp-30 -1.0
cacosh -0x1.fp-30 1.0
cacosh -0x1.fp-30 -1.0
cacosh 1.0 0x1.fp-30
cacosh -1.0 0x1.fp-30
cacosh 1.0 -0x1.fp-30
cacosh -1.0 -0x1.fp-30
cacosh 0x1.fp-100 1.0
cacosh 0x1.fp-100 -1.0
cacosh -0x1.fp-100 1.0
cacosh -0x1.fp-100 -1.0
cacosh 1.0 0x1.fp-100
cacosh -1.0 0x1.fp-100
cacosh 1.0 -0x1.fp-100
cacosh -1.0 -0x1.fp-100
cacosh 0x1.fp-129 1.0
cacosh 0x1.fp-129 -1.0
cacosh -0x1.fp-129 1.0
cacosh -0x1.fp-129 -1.0
cacosh 1.0 0x1.fp-129
cacosh -1.0 0x1.fp-129
cacosh 1.0 -0x1.fp-129
cacosh -1.0 -0x1.fp-129
cacosh 0x1.fp-1000 1.0
cacosh 0x1.fp-1000 -1.0
cacosh -0x1.fp-1000 1.0
cacosh -0x1.fp-1000 -1.0
cacosh 1.0 0x1.fp-1000
cacosh -1.0 0x1.fp-1000
cacosh 1.0 -0x1.fp-1000
cacosh -1.0 -0x1.fp-1000
cacosh 0x1.fp-1025 1.0
cacosh 0x1.fp-1025 -1.0
cacosh -0x1.fp-1025 1.0
cacosh -0x1.fp-1025 -1.0
cacosh 1.0 0x1.fp-1025
cacosh -1.0 0x1.fp-1025
cacosh 1.0 -0x1.fp-1025
cacosh -1.0 -0x1.fp-1025
cacosh 0x1.fp-10000 1.0
cacosh 0x1.fp-10000 -1.0
cacosh -0x1.fp-10000 1.0
cacosh -0x1.fp-10000 -1.0
cacosh 1.0 0x1.fp-10000
cacosh -1.0 0x1.fp-10000
cacosh 1.0 -0x1.fp-10000
cacosh -1.0 -0x1.fp-10000
cacosh 0x1.fp-16385 1.0
cacosh 0x1.fp-16385 -1.0
cacosh -0x1.fp-16385 1.0
cacosh -0x1.fp-16385 -1.0
cacosh 1.0 0x1.fp-16385
cacosh -1.0 0x1.fp-16385
cacosh 1.0 -0x1.fp-16385
cacosh -1.0 -0x1.fp-16385
cacosh 0x1p-23 0x1.000002p0
cacosh 0x1p-23 -0x1.000002p0
cacosh -0x1p-23 0x1.000002p0
cacosh -0x1p-23 -0x1.000002p0
cacosh 0x1.000002p0 0x1p-23
cacosh -0x1.000002p0 0x1p-23
cacosh 0x1.000002p0 -0x1p-23
cacosh -0x1.000002p0 -0x1p-23
cacosh 0x1.fp-129 0x1.000002p0
cacosh 0x1.fp-129 -0x1.000002p0
cacosh -0x1.fp-129 0x1.000002p0
cacosh -0x1.fp-129 -0x1.000002p0
cacosh 0x1.000002p0 0x1.fp-129
cacosh -0x1.000002p0 0x1.fp-129
cacosh 0x1.000002p0 -0x1.fp-129
cacosh -0x1.000002p0 -0x1.fp-129
cacosh 0.0 0x1.000002p0
cacosh 0.0 -0x1.000002p0
cacosh -0.0 0x1.000002p0
cacosh -0.0 -0x1.000002p0
cacosh 0x1.000002p0 0.0
cacosh -0x1.000002p0 0.0
cacosh 0x1.000002p0 -0.0
cacosh -0x1.000002p0 -0.0
cacosh 0x1p-52 0x1.0000000000001p0
cacosh 0x1p-52 -0x1.0000000000001p0
cacosh -0x1p-52 0x1.0000000000001p0
cacosh -0x1p-52 -0x1.0000000000001p0
cacosh 0x1.0000000000001p0 0x1p-52
cacosh -0x1.0000000000001p0 0x1p-52
cacosh 0x1.0000000000001p0 -0x1p-52
cacosh -0x1.0000000000001p0 -0x1p-52
cacosh 0x1.fp-1025 0x1.0000000000001p0
cacosh 0x1.fp-1025 -0x1.0000000000001p0
cacosh -0x1.fp-1025 0x1.0000000000001p0
cacosh -0x1.fp-1025 -0x1.0000000000001p0
cacosh 0x1.0000000000001p0 0x1.fp-1025
cacosh -0x1.0000000000001p0 0x1.fp-1025
cacosh 0x1.0000000000001p0 -0x1.fp-1025
cacosh -0x1.0000000000001p0 -0x1.fp-1025
cacosh 0.0 0x1.0000000000001p0
cacosh 0.0 -0x1.0000000000001p0
cacosh -0.0 0x1.0000000000001p0
cacosh -0.0 -0x1.0000000000001p0
cacosh 0x1.0000000000001p0 0.0
cacosh -0x1.0000000000001p0 0.0
cacosh 0x1.0000000000001p0 -0.0
cacosh -0x1.0000000000001p0 -0.0
cacosh 0x1p-63 0x1.0000000000000002p0
cacosh 0x1p-63 -0x1.0000000000000002p0
cacosh -0x1p-63 0x1.0000000000000002p0
cacosh -0x1p-63 -0x1.0000000000000002p0
cacosh 0x1.0000000000000002p0 0x1p-63
cacosh -0x1.0000000000000002p0 0x1p-63
cacosh 0x1.0000000000000002p0 -0x1p-63
cacosh -0x1.0000000000000002p0 -0x1p-63
cacosh 0x1.fp-16385 0x1.0000000000000002p0
cacosh 0x1.fp-16385 -0x1.0000000000000002p0
cacosh -0x1.fp-16385 0x1.0000000000000002p0
cacosh -0x1.fp-16385 -0x1.0000000000000002p0
cacosh 0x1.0000000000000002p0 0x1.fp-16385
cacosh -0x1.0000000000000002p0 0x1.fp-16385
cacosh 0x1.0000000000000002p0 -0x1.fp-16385
cacosh -0x1.0000000000000002p0 -0x1.fp-16385
cacosh 0.0 0x1.0000000000000002p0
cacosh 0.0 -0x1.0000000000000002p0
cacosh -0.0 0x1.0000000000000002p0
cacosh -0.0 -0x1.0000000000000002p0
cacosh 0x1.0000000000000002p0 0.0
cacosh -0x1.0000000000000002p0 0.0
cacosh 0x1.0000000000000002p0 -0.0
cacosh -0x1.0000000000000002p0 -0.0
cacosh 0x1p-106 0x1.000000000000000000000000008p0
cacosh 0x1p-106 -0x1.000000000000000000000000008p0
cacosh -0x1p-106 0x1.000000000000000000000000008p0
cacosh -0x1p-106 -0x1.000000000000000000000000008p0
cacosh 0x1.000000000000000000000000008p0 0x1p-106
cacosh -0x1.000000000000000000000000008p0 0x1p-106
cacosh 0x1.000000000000000000000000008p0 -0x1p-106
cacosh -0x1.000000000000000000000000008p0 -0x1p-106
cacosh 0x1.fp-1025 0x1.000000000000000000000000008p0
cacosh 0x1.fp-1025 -0x1.000000000000000000000000008p0
cacosh -0x1.fp-1025 0x1.000000000000000000000000008p0
cacosh -0x1.fp-1025 -0x1.000000000000000000000000008p0
cacosh 0x1.000000000000000000000000008p0 0x1.fp-1025
cacosh -0x1.000000000000000000000000008p0 0x1.fp-1025
cacosh 0x1.000000000000000000000000008p0 -0x1.fp-1025
cacosh -0x1.000000000000000000000000008p0 -0x1.fp-1025
cacosh 0.0 0x1.000000000000000000000000008p0
cacosh 0.0 -0x1.000000000000000000000000008p0
cacosh -0.0 0x1.000000000000000000000000008p0
cacosh -0.0 -0x1.000000000000000000000000008p0
cacosh 0x1.000000000000000000000000008p0 0.0
cacosh -0x1.000000000000000000000000008p0 0.0
cacosh 0x1.000000000000000000000000008p0 -0.0
cacosh -0x1.000000000000000000000000008p0 -0.0
cacosh 0x1p-113 0x1.0000000000000000000000000001p0
cacosh 0x1p-113 -0x1.0000000000000000000000000001p0
cacosh -0x1p-113 0x1.0000000000000000000000000001p0
cacosh -0x1p-113 -0x1.0000000000000000000000000001p0
cacosh 0x1.0000000000000000000000000001p0 0x1p-113
cacosh -0x1.0000000000000000000000000001p0 0x1p-113
cacosh 0x1.0000000000000000000000000001p0 -0x1p-113
cacosh -0x1.0000000000000000000000000001p0 -0x1p-113
cacosh 0x1.fp-16385 0x1.0000000000000000000000000001p0
cacosh 0x1.fp-16385 -0x1.0000000000000000000000000001p0
cacosh -0x1.fp-16385 0x1.0000000000000000000000000001p0
cacosh -0x1.fp-16385 -0x1.0000000000000000000000000001p0
cacosh 0x1.0000000000000000000000000001p0 0x1.fp-16385
cacosh -0x1.0000000000000000000000000001p0 0x1.fp-16385
cacosh 0x1.0000000000000000000000000001p0 -0x1.fp-16385
cacosh -0x1.0000000000000000000000000001p0 -0x1.fp-16385
cacosh 0.0 0x1.0000000000000000000000000001p0
cacosh 0.0 -0x1.0000000000000000000000000001p0
cacosh -0.0 0x1.0000000000000000000000000001p0
cacosh -0.0 -0x1.0000000000000000000000000001p0
cacosh 0x1.0000000000000000000000000001p0 0.0
cacosh -0x1.0000000000000000000000000001p0 0.0
cacosh 0x1.0000000000000000000000000001p0 -0.0
cacosh -0x1.0000000000000000000000000001p0 -0.0
cacosh 0x1p-23 0x0.ffffffp0
cacosh 0x1p-23 -0x0.ffffffp0
cacosh -0x1p-23 0x0.ffffffp0
cacosh -0x1p-23 -0x0.ffffffp0
cacosh 0x0.ffffffp0 0x1p-23
cacosh -0x0.ffffffp0 0x1p-23
cacosh 0x0.ffffffp0 -0x1p-23
cacosh -0x0.ffffffp0 -0x1p-23
cacosh 0x1.fp-129 0x0.ffffffp0
cacosh 0x1.fp-129 -0x0.ffffffp0
cacosh -0x1.fp-129 0x0.ffffffp0
cacosh -0x1.fp-129 -0x0.ffffffp0
cacosh 0x0.ffffffp0 0x1.fp-129
cacosh -0x0.ffffffp0 0x1.fp-129
cacosh 0x0.ffffffp0 -0x1.fp-129
cacosh -0x0.ffffffp0 -0x1.fp-129
cacosh 0.0 0x0.ffffffp0
cacosh 0.0 -0x0.ffffffp0
cacosh -0.0 0x0.ffffffp0
cacosh -0.0 -0x0.ffffffp0
cacosh 0x0.ffffffp0 0.0
cacosh -0x0.ffffffp0 0.0
cacosh 0x0.ffffffp0 -0.0
cacosh -0x0.ffffffp0 -0.0
cacosh 0x1p-23 0.5
cacosh 0x1p-23 -0.5
cacosh -0x1p-23 0.5
cacosh -0x1p-23 -0.5
cacosh 0.5 0x1p-23
cacosh -0.5 0x1p-23
cacosh 0.5 -0x1p-23
cacosh -0.5 -0x1p-23
cacosh 0x1.fp-129 0.5
cacosh 0x1.fp-129 -0.5
cacosh -0x1.fp-129 0.5
cacosh -0x1.fp-129 -0.5
cacosh 0.5 0x1.fp-129
cacosh -0.5 0x1.fp-129
cacosh 0.5 -0x1.fp-129
cacosh -0.5 -0x1.fp-129
cacosh 0x1p-23 0x1p-23
cacosh 0x1p-23 -0x1p-23
cacosh -0x1p-23 0x1p-23
cacosh -0x1p-23 -0x1p-23
cacosh 0x1.fp-129 0x1p-23
cacosh 0x1.fp-129 -0x1p-23
cacosh -0x1.fp-129 0x1p-23
cacosh -0x1.fp-129 -0x1p-23
cacosh 0x1p-23 0x1.fp-129
cacosh -0x1p-23 0x1.fp-129
cacosh 0x1p-23 -0x1.fp-129
cacosh -0x1p-23 -0x1.fp-129
cacosh 0.0 0x1p-23
cacosh 0.0 -0x1p-23
cacosh -0.0 0x1p-23
cacosh -0.0 -0x1p-23
cacosh 0x1p-23 0.0
cacosh -0x1p-23 0.0
cacosh 0x1p-23 -0.0
cacosh -0x1p-23 -0.0
cacosh 0x1.fp-129 0x1.fp-129
cacosh 0x1.fp-129 -0x1.fp-129
cacosh -0x1.fp-129 0x1.fp-129
cacosh -0x1.fp-129 -0x1.fp-129
cacosh 0x1p-52 0x0.fffffffffffff8p0
cacosh 0x1p-52 -0x0.fffffffffffff8p0
cacosh -0x1p-52 0x0.fffffffffffff8p0
cacosh -0x1p-52 -0x0.fffffffffffff8p0
cacosh 0x0.fffffffffffff8p0 0x1p-52
cacosh -0x0.fffffffffffff8p0 0x1p-52
cacosh 0x0.fffffffffffff8p0 -0x1p-52
cacosh -0x0.fffffffffffff8p0 -0x1p-52
cacosh 0x1.fp-1025 0x0.fffffffffffff8p0
cacosh 0x1.fp-1025 -0x0.fffffffffffff8p0
cacosh -0x1.fp-1025 0x0.fffffffffffff8p0
cacosh -0x1.fp-1025 -0x0.fffffffffffff8p0
cacosh 0x0.fffffffffffff8p0 0x1.fp-1025
cacosh -0x0.fffffffffffff8p0 0x1.fp-1025
cacosh 0x0.fffffffffffff8p0 -0x1.fp-1025
cacosh -0x0.fffffffffffff8p0 -0x1.fp-1025
cacosh 0.0 0x0.fffffffffffff8p0
cacosh 0.0 -0x0.fffffffffffff8p0
cacosh -0.0 0x0.fffffffffffff8p0
cacosh -0.0 -0x0.fffffffffffff8p0
cacosh 0x0.fffffffffffff8p0 0.0
cacosh -0x0.fffffffffffff8p0 0.0
cacosh 0x0.fffffffffffff8p0 -0.0
cacosh -0x0.fffffffffffff8p0 -0.0
cacosh 0x1p-52 0.5
cacosh 0x1p-52 -0.5
cacosh -0x1p-52 0.5
cacosh -0x1p-52 -0.5
cacosh 0.5 0x1p-52
cacosh -0.5 0x1p-52
cacosh 0.5 -0x1p-52
cacosh -0.5 -0x1p-52
cacosh 0x1.fp-1025 0.5
cacosh 0x1.fp-1025 -0.5
cacosh -0x1.fp-1025 0.5
cacosh -0x1.fp-1025 -0.5
cacosh 0.5 0x1.fp-1025
cacosh -0.5 0x1.fp-1025
cacosh 0.5 -0x1.fp-1025
cacosh -0.5 -0x1.fp-1025
cacosh 0x1p-52 0x1p-52
cacosh 0x1p-52 -0x1p-52
cacosh -0x1p-52 0x1p-52
cacosh -0x1p-52 -0x1p-52
cacosh 0x1.fp-1025 0x1p-52
cacosh 0x1.fp-1025 -0x1p-52
cacosh -0x1.fp-1025 0x1p-52
cacosh -0x1.fp-1025 -0x1p-52
cacosh 0x1p-52 0x1.fp-1025
cacosh -0x1p-52 0x1.fp-1025
cacosh 0x1p-52 -0x1.fp-1025
cacosh -0x1p-52 -0x1.fp-1025
cacosh 0.0 0x1p-52
cacosh 0.0 -0x1p-52
cacosh -0.0 0x1p-52
cacosh -0.0 -0x1p-52
cacosh 0x1p-52 0.0
cacosh -0x1p-52 0.0
cacosh 0x1p-52 -0.0
cacosh -0x1p-52 -0.0
cacosh 0x1.fp-1025 0x1.fp-1025
cacosh 0x1.fp-1025 -0x1.fp-1025
cacosh -0x1.fp-1025 0x1.fp-1025
cacosh -0x1.fp-1025 -0x1.fp-1025
cacosh 0x1p-63 0x0.ffffffffffffffffp0
cacosh 0x1p-63 -0x0.ffffffffffffffffp0
cacosh -0x1p-63 0x0.ffffffffffffffffp0
cacosh -0x1p-63 -0x0.ffffffffffffffffp0
cacosh 0x0.ffffffffffffffffp0 0x1p-63
cacosh -0x0.ffffffffffffffffp0 0x1p-63
cacosh 0x0.ffffffffffffffffp0 -0x1p-63
cacosh -0x0.ffffffffffffffffp0 -0x1p-63
cacosh 0x1.fp-16385 0x0.ffffffffffffffffp0
cacosh 0x1.fp-16385 -0x0.ffffffffffffffffp0
cacosh -0x1.fp-16385 0x0.ffffffffffffffffp0
cacosh -0x1.fp-16385 -0x0.ffffffffffffffffp0
cacosh 0x0.ffffffffffffffffp0 0x1.fp-16385
cacosh -0x0.ffffffffffffffffp0 0x1.fp-16385
cacosh 0x0.ffffffffffffffffp0 -0x1.fp-16385
cacosh -0x0.ffffffffffffffffp0 -0x1.fp-16385
cacosh 0.0 0x0.ffffffffffffffffp0
cacosh 0.0 -0x0.ffffffffffffffffp0
cacosh -0.0 0x0.ffffffffffffffffp0
cacosh -0.0 -0x0.ffffffffffffffffp0
cacosh 0x0.ffffffffffffffffp0 0.0
cacosh -0x0.ffffffffffffffffp0 0.0
cacosh 0x0.ffffffffffffffffp0 -0.0
cacosh -0x0.ffffffffffffffffp0 -0.0
cacosh 0x1p-63 0.5
cacosh 0x1p-63 -0.5
cacosh -0x1p-63 0.5
cacosh -0x1p-63 -0.5
cacosh 0.5 0x1p-63
cacosh -0.5 0x1p-63
cacosh 0.5 -0x1p-63
cacosh -0.5 -0x1p-63
cacosh 0x1.fp-16385 0.5
cacosh 0x1.fp-16385 -0.5
cacosh -0x1.fp-16385 0.5
cacosh -0x1.fp-16385 -0.5
cacosh 0.5 0x1.fp-16385
cacosh -0.5 0x1.fp-16385
cacosh 0.5 -0x1.fp-16385
cacosh -0.5 -0x1.fp-16385
cacosh 0x1p-63 0x1p-63
cacosh 0x1p-63 -0x1p-63
cacosh -0x1p-63 0x1p-63
cacosh -0x1p-63 -0x1p-63
cacosh 0x1.fp-16385 0x1p-63
cacosh 0x1.fp-16385 -0x1p-63
cacosh -0x1.fp-16385 0x1p-63
cacosh -0x1.fp-16385 -0x1p-63
cacosh 0x1p-63 0x1.fp-16385
cacosh -0x1p-63 0x1.fp-16385
cacosh 0x1p-63 -0x1.fp-16385
cacosh -0x1p-63 -0x1.fp-16385
cacosh 0.0 0x1p-63
cacosh 0.0 -0x1p-63
cacosh -0.0 0x1p-63
cacosh -0.0 -0x1p-63
cacosh 0x1p-63 0.0
cacosh -0x1p-63 0.0
cacosh 0x1p-63 -0.0
cacosh -0x1p-63 -0.0
cacosh 0x1.fp-16385 0x1.fp-16385
cacosh 0x1.fp-16385 -0x1.fp-16385
cacosh -0x1.fp-16385 0x1.fp-16385
cacosh -0x1.fp-16385 -0x1.fp-16385
cacosh 0x1p-105 0x0.ffffffffffffffffffffffffffcp0
cacosh 0x1p-105 -0x0.ffffffffffffffffffffffffffcp0
cacosh -0x1p-105 0x0.ffffffffffffffffffffffffffcp0
cacosh -0x1p-105 -0x0.ffffffffffffffffffffffffffcp0
cacosh 0x0.ffffffffffffffffffffffffffcp0 0x1p-105
cacosh -0x0.ffffffffffffffffffffffffffcp0 0x1p-105
cacosh 0x0.ffffffffffffffffffffffffffcp0 -0x1p-105
cacosh -0x0.ffffffffffffffffffffffffffcp0 -0x1p-105
cacosh 0x1.fp-1025 0x0.ffffffffffffffffffffffffffcp0
cacosh 0x1.fp-1025 -0x0.ffffffffffffffffffffffffffcp0
cacosh -0x1.fp-1025 0x0.ffffffffffffffffffffffffffcp0
cacosh -0x1.fp-1025 -0x0.ffffffffffffffffffffffffffcp0
cacosh 0x0.ffffffffffffffffffffffffffcp0 0x1.fp-1025
cacosh -0x0.ffffffffffffffffffffffffffcp0 0x1.fp-1025
cacosh 0x0.ffffffffffffffffffffffffffcp0 -0x1.fp-1025
cacosh -0x0.ffffffffffffffffffffffffffcp0 -0x1.fp-1025
cacosh 0.0 0x0.ffffffffffffffffffffffffffcp0
cacosh 0.0 -0x0.ffffffffffffffffffffffffffcp0
cacosh -0.0 0x0.ffffffffffffffffffffffffffcp0
cacosh -0.0 -0x0.ffffffffffffffffffffffffffcp0
cacosh 0x0.ffffffffffffffffffffffffffcp0 0.0
cacosh -0x0.ffffffffffffffffffffffffffcp0 0.0
cacosh 0x0.ffffffffffffffffffffffffffcp0 -0.0
cacosh -0x0.ffffffffffffffffffffffffffcp0 -0.0
cacosh 0x1p-105 0.5
cacosh 0x1p-105 -0.5
cacosh -0x1p-105 0.5
cacosh -0x1p-105 -0.5
cacosh 0.5 0x1p-105
cacosh -0.5 0x1p-105
cacosh 0.5 -0x1p-105
cacosh -0.5 -0x1p-105
cacosh 0x1p-105 0x1p-105
cacosh 0x1p-105 -0x1p-105
cacosh -0x1p-105 0x1p-105
cacosh -0x1p-105 -0x1p-105
cacosh 0x1.fp-1025 0x1p-105
cacosh 0x1.fp-1025 -0x1p-105
cacosh -0x1.fp-1025 0x1p-105
cacosh -0x1.fp-1025 -0x1p-105
cacosh 0x1p-105 0x1.fp-1025
cacosh -0x1p-105 0x1.fp-1025
cacosh 0x1p-105 -0x1.fp-1025
cacosh -0x1p-105 -0x1.fp-1025
cacosh 0.0 0x1p-105
cacosh 0.0 -0x1p-105
cacosh -0.0 0x1p-105
cacosh -0.0 -0x1p-105
cacosh 0x1p-105 0.0
cacosh -0x1p-105 0.0
cacosh 0x1p-105 -0.0
cacosh -0x1p-105 -0.0
cacosh 0x1p-112 0x0.ffffffffffffffffffffffffffff8p0
cacosh 0x1p-112 -0x0.ffffffffffffffffffffffffffff8p0
cacosh -0x1p-112 0x0.ffffffffffffffffffffffffffff8p0
cacosh -0x1p-112 -0x0.ffffffffffffffffffffffffffff8p0
cacosh 0x0.ffffffffffffffffffffffffffff8p0 0x1p-112
cacosh -0x0.ffffffffffffffffffffffffffff8p0 0x1p-112
cacosh 0x0.ffffffffffffffffffffffffffff8p0 -0x1p-112
cacosh -0x0.ffffffffffffffffffffffffffff8p0 -0x1p-112
cacosh 0x1.fp-16385 0x0.ffffffffffffffffffffffffffff8p0
cacosh 0x1.fp-16385 -0x0.ffffffffffffffffffffffffffff8p0
cacosh -0x1.fp-16385 0x0.ffffffffffffffffffffffffffff8p0
cacosh -0x1.fp-16385 -0x0.ffffffffffffffffffffffffffff8p0
cacosh 0x0.ffffffffffffffffffffffffffff8p0 0x1.fp-16385
cacosh -0x0.ffffffffffffffffffffffffffff8p0 0x1.fp-16385
cacosh 0x0.ffffffffffffffffffffffffffff8p0 -0x1.fp-16385
cacosh -0x0.ffffffffffffffffffffffffffff8p0 -0x1.fp-16385
cacosh 0.0 0x0.ffffffffffffffffffffffffffff8p0
cacosh 0.0 -0x0.ffffffffffffffffffffffffffff8p0
cacosh -0.0 0x0.ffffffffffffffffffffffffffff8p0
cacosh -0.0 -0x0.ffffffffffffffffffffffffffff8p0
cacosh 0x0.ffffffffffffffffffffffffffff8p0 0.0
cacosh -0x0.ffffffffffffffffffffffffffff8p0 0.0
cacosh 0x0.ffffffffffffffffffffffffffff8p0 -0.0
cacosh -0x0.ffffffffffffffffffffffffffff8p0 -0.0
cacosh 0x1p-112 0.5
cacosh 0x1p-112 -0.5
cacosh -0x1p-112 0.5
cacosh -0x1p-112 -0.5
cacosh 0.5 0x1p-112
cacosh -0.5 0x1p-112
cacosh 0.5 -0x1p-112
cacosh -0.5 -0x1p-112
cacosh 0x1p-112 0x1p-112
cacosh 0x1p-112 -0x1p-112
cacosh -0x1p-112 0x1p-112
cacosh -0x1p-112 -0x1p-112
cacosh 0x1.fp-16385 0x1p-112
cacosh 0x1.fp-16385 -0x1p-112
cacosh -0x1.fp-16385 0x1p-112
cacosh -0x1.fp-16385 -0x1p-112
cacosh 0x1p-112 0x1.fp-16385
cacosh -0x1p-112 0x1.fp-16385
cacosh 0x1p-112 -0x1.fp-16385
cacosh -0x1p-112 -0x1.fp-16385
cacosh 0.0 0x1p-112
cacosh 0.0 -0x1p-112
cacosh -0.0 0x1p-112
cacosh -0.0 -0x1p-112
cacosh 0x1p-112 0.0
cacosh -0x1p-112 0.0
cacosh 0x1p-112 -0.0
cacosh -0x1p-112 -0.0
cacosh 0.75 1.25
cacosh -2 -3
# 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
casin 0 0
casin -0 0
casin 0 -0
casin -0 -0
casin 0 -1.5
casin -0 -1.5
casin 0 -1.0
casin -0 -1.0
casin 0 -0.5
casin -0 -0.5
casin 0 0.5
casin -0 0.5
casin 0 1.0
casin -0 1.0
casin 0 1.5
casin -0 1.5
casin -1.5 0
casin -1.5 -0
casin -1.0 0
casin -1.0 -0
casin -0.5 0
casin -0.5 -0
casin 0.5 0
casin 0.5 -0
casin 1.0 0
casin 1.0 -0
casin 1.5 0
casin 1.5 -0
casin 0x1p50 1.0
casin 0x1p50 -1.0
casin -0x1p50 1.0
casin -0x1p50 -1.0
casin 1.0 0x1p50
casin -1.0 0x1p50
casin 1.0 -0x1p50
casin -1.0 -0x1p50
casin 0x1p500 1.0
casin 0x1p500 -1.0
casin -0x1p500 1.0
casin -0x1p500 -1.0
casin 1.0 0x1p500
casin -1.0 0x1p500
casin 1.0 -0x1p500
casin -1.0 -0x1p500
casin 0x1p5000 1.0
casin 0x1p5000 -1.0
casin -0x1p5000 1.0
casin -0x1p5000 -1.0
casin 1.0 0x1p5000
casin -1.0 0x1p5000
casin 1.0 -0x1p5000
casin -1.0 -0x1p5000
casin 0x1.fp127 0x1.fp127
casin 0x1.fp1023 0x1.fp1023
casin 0x1.fp16383 0x1.fp16383
casin 0x1.fp-129 1.5
casin 0x1.fp-129 -1.5
casin -0x1.fp-129 1.5
casin -0x1.fp-129 -1.5
casin 1.5 0x1.fp-129
casin -1.5 0x1.fp-129
casin 1.5 -0x1.fp-129
casin -1.5 -0x1.fp-129
casin 0x1.fp-1025 1.5
casin 0x1.fp-1025 -1.5
casin -0x1.fp-1025 1.5
casin -0x1.fp-1025 -1.5
casin 1.5 0x1.fp-1025
casin -1.5 0x1.fp-1025
casin 1.5 -0x1.fp-1025
casin -1.5 -0x1.fp-1025
casin 0x1.fp-16385 1.5
casin 0x1.fp-16385 -1.5
casin -0x1.fp-16385 1.5
casin -0x1.fp-16385 -1.5
casin 1.5 0x1.fp-16385
casin -1.5 0x1.fp-16385
casin 1.5 -0x1.fp-16385
casin -1.5 -0x1.fp-16385
casin 0.5 1.0
casin 0.5 -1.0
casin -0.5 1.0
casin -0.5 -1.0
casin 1.0 0.5
casin -1.0 0.5
casin 1.0 -0.5
casin -1.0 -0.5
casin 0.25 1.0
casin 0.25 -1.0
casin -0.25 1.0
casin -0.25 -1.0
casin 1.0 0.25
casin -1.0 0.25
casin 1.0 -0.25
casin -1.0 -0.25
casin 0x1.fp-10 1.0
casin 0x1.fp-10 -1.0
casin -0x1.fp-10 1.0
casin -0x1.fp-10 -1.0
casin 1.0 0x1.fp-10
casin -1.0 0x1.fp-10
casin 1.0 -0x1.fp-10
casin -1.0 -0x1.fp-10
casin 0x1.fp-30 1.0
casin 0x1.fp-30 -1.0
casin -0x1.fp-30 1.0
casin -0x1.fp-30 -1.0
casin 1.0 0x1.fp-30
casin -1.0 0x1.fp-30
casin 1.0 -0x1.fp-30
casin -1.0 -0x1.fp-30
casin 0x1.fp-100 1.0
casin 0x1.fp-100 -1.0
casin -0x1.fp-100 1.0
casin -0x1.fp-100 -1.0
casin 1.0 0x1.fp-100
casin -1.0 0x1.fp-100
casin 1.0 -0x1.fp-100
casin -1.0 -0x1.fp-100
casin 0x1.fp-129 1.0
casin 0x1.fp-129 -1.0
casin -0x1.fp-129 1.0
casin -0x1.fp-129 -1.0
casin 1.0 0x1.fp-129
casin -1.0 0x1.fp-129
casin 1.0 -0x1.fp-129
casin -1.0 -0x1.fp-129
casin 0x1.fp-1000 1.0
casin 0x1.fp-1000 -1.0
casin -0x1.fp-1000 1.0
casin -0x1.fp-1000 -1.0
casin 1.0 0x1.fp-1000
casin -1.0 0x1.fp-1000
casin 1.0 -0x1.fp-1000
casin -1.0 -0x1.fp-1000
casin 0x1.fp-1025 1.0
casin 0x1.fp-1025 -1.0
casin -0x1.fp-1025 1.0
casin -0x1.fp-1025 -1.0
casin 1.0 0x1.fp-1025
casin -1.0 0x1.fp-1025
casin 1.0 -0x1.fp-1025
casin -1.0 -0x1.fp-1025
casin 0x1.fp-10000 1.0
casin 0x1.fp-10000 -1.0
casin -0x1.fp-10000 1.0
casin -0x1.fp-10000 -1.0
casin 1.0 0x1.fp-10000
casin -1.0 0x1.fp-10000
casin 1.0 -0x1.fp-10000
casin -1.0 -0x1.fp-10000
casin 0x1.fp-16385 1.0
casin 0x1.fp-16385 -1.0
casin -0x1.fp-16385 1.0
casin -0x1.fp-16385 -1.0
casin 1.0 0x1.fp-16385
casin -1.0 0x1.fp-16385
casin 1.0 -0x1.fp-16385
casin -1.0 -0x1.fp-16385
casin 0x1p-23 0x1.000002p0
casin 0x1p-23 -0x1.000002p0
casin -0x1p-23 0x1.000002p0
casin -0x1p-23 -0x1.000002p0
casin 0x1.000002p0 0x1p-23
casin -0x1.000002p0 0x1p-23
casin 0x1.000002p0 -0x1p-23
casin -0x1.000002p0 -0x1p-23
casin 0x1.fp-129 0x1.000002p0
casin 0x1.fp-129 -0x1.000002p0
casin -0x1.fp-129 0x1.000002p0
casin -0x1.fp-129 -0x1.000002p0
casin 0x1.000002p0 0x1.fp-129
casin -0x1.000002p0 0x1.fp-129
casin 0x1.000002p0 -0x1.fp-129
casin -0x1.000002p0 -0x1.fp-129
casin 0.0 0x1.000002p0
casin 0.0 -0x1.000002p0
casin -0.0 0x1.000002p0
casin -0.0 -0x1.000002p0
casin 0x1.000002p0 0.0
casin -0x1.000002p0 0.0
casin 0x1.000002p0 -0.0
casin -0x1.000002p0 -0.0
casin 0x1p-52 0x1.0000000000001p0
casin 0x1p-52 -0x1.0000000000001p0
casin -0x1p-52 0x1.0000000000001p0
casin -0x1p-52 -0x1.0000000000001p0
casin 0x1.0000000000001p0 0x1p-52
casin -0x1.0000000000001p0 0x1p-52
casin 0x1.0000000000001p0 -0x1p-52
casin -0x1.0000000000001p0 -0x1p-52
casin 0x1.fp-1025 0x1.0000000000001p0
casin 0x1.fp-1025 -0x1.0000000000001p0
casin -0x1.fp-1025 0x1.0000000000001p0
casin -0x1.fp-1025 -0x1.0000000000001p0
casin 0x1.0000000000001p0 0x1.fp-1025
casin -0x1.0000000000001p0 0x1.fp-1025
casin 0x1.0000000000001p0 -0x1.fp-1025
casin -0x1.0000000000001p0 -0x1.fp-1025
casin 0.0 0x1.0000000000001p0
casin 0.0 -0x1.0000000000001p0
casin -0.0 0x1.0000000000001p0
casin -0.0 -0x1.0000000000001p0
casin 0x1.0000000000001p0 0.0
casin -0x1.0000000000001p0 0.0
casin 0x1.0000000000001p0 -0.0
casin -0x1.0000000000001p0 -0.0
casin 0x1p-63 0x1.0000000000000002p0
casin 0x1p-63 -0x1.0000000000000002p0
casin -0x1p-63 0x1.0000000000000002p0
casin -0x1p-63 -0x1.0000000000000002p0
casin 0x1.0000000000000002p0 0x1p-63
casin -0x1.0000000000000002p0 0x1p-63
casin 0x1.0000000000000002p0 -0x1p-63
casin -0x1.0000000000000002p0 -0x1p-63
casin 0x1.fp-16385 0x1.0000000000000002p0
casin 0x1.fp-16385 -0x1.0000000000000002p0
casin -0x1.fp-16385 0x1.0000000000000002p0
casin -0x1.fp-16385 -0x1.0000000000000002p0
casin 0x1.0000000000000002p0 0x1.fp-16385
casin -0x1.0000000000000002p0 0x1.fp-16385
casin 0x1.0000000000000002p0 -0x1.fp-16385
casin -0x1.0000000000000002p0 -0x1.fp-16385
casin 0.0 0x1.0000000000000002p0
casin 0.0 -0x1.0000000000000002p0
casin -0.0 0x1.0000000000000002p0
casin -0.0 -0x1.0000000000000002p0
casin 0x1.0000000000000002p0 0.0
casin -0x1.0000000000000002p0 0.0
casin 0x1.0000000000000002p0 -0.0
casin -0x1.0000000000000002p0 -0.0
casin 0x1p-106 0x1.000000000000000000000000008p0
casin 0x1p-106 -0x1.000000000000000000000000008p0
casin -0x1p-106 0x1.000000000000000000000000008p0
casin -0x1p-106 -0x1.000000000000000000000000008p0
casin 0x1.000000000000000000000000008p0 0x1p-106
casin -0x1.000000000000000000000000008p0 0x1p-106
casin 0x1.000000000000000000000000008p0 -0x1p-106
casin -0x1.000000000000000000000000008p0 -0x1p-106
casin 0x1.fp-1025 0x1.000000000000000000000000008p0
casin 0x1.fp-1025 -0x1.000000000000000000000000008p0
casin -0x1.fp-1025 0x1.000000000000000000000000008p0
casin -0x1.fp-1025 -0x1.000000000000000000000000008p0
casin 0x1.000000000000000000000000008p0 0x1.fp-1025
casin -0x1.000000000000000000000000008p0 0x1.fp-1025
casin 0x1.000000000000000000000000008p0 -0x1.fp-1025
casin -0x1.000000000000000000000000008p0 -0x1.fp-1025
casin 0.0 0x1.000000000000000000000000008p0
casin 0.0 -0x1.000000000000000000000000008p0
casin -0.0 0x1.000000000000000000000000008p0
casin -0.0 -0x1.000000000000000000000000008p0
casin 0x1.000000000000000000000000008p0 0.0
casin -0x1.000000000000000000000000008p0 0.0
casin 0x1.000000000000000000000000008p0 -0.0
casin -0x1.000000000000000000000000008p0 -0.0
casin 0x1p-113 0x1.0000000000000000000000000001p0
casin 0x1p-113 -0x1.0000000000000000000000000001p0
casin -0x1p-113 0x1.0000000000000000000000000001p0
casin -0x1p-113 -0x1.0000000000000000000000000001p0
casin 0x1.0000000000000000000000000001p0 0x1p-113
casin -0x1.0000000000000000000000000001p0 0x1p-113
casin 0x1.0000000000000000000000000001p0 -0x1p-113
casin -0x1.0000000000000000000000000001p0 -0x1p-113
casin 0x1.fp-16385 0x1.0000000000000000000000000001p0
casin 0x1.fp-16385 -0x1.0000000000000000000000000001p0
casin -0x1.fp-16385 0x1.0000000000000000000000000001p0
casin -0x1.fp-16385 -0x1.0000000000000000000000000001p0
casin 0x1.0000000000000000000000000001p0 0x1.fp-16385
casin -0x1.0000000000000000000000000001p0 0x1.fp-16385
casin 0x1.0000000000000000000000000001p0 -0x1.fp-16385
casin -0x1.0000000000000000000000000001p0 -0x1.fp-16385
casin 0.0 0x1.0000000000000000000000000001p0
casin 0.0 -0x1.0000000000000000000000000001p0
casin -0.0 0x1.0000000000000000000000000001p0
casin -0.0 -0x1.0000000000000000000000000001p0
casin 0x1.0000000000000000000000000001p0 0.0
casin -0x1.0000000000000000000000000001p0 0.0
casin 0x1.0000000000000000000000000001p0 -0.0
casin -0x1.0000000000000000000000000001p0 -0.0
casin 0x1p-23 0x0.ffffffp0
casin 0x1p-23 -0x0.ffffffp0
casin -0x1p-23 0x0.ffffffp0
casin -0x1p-23 -0x0.ffffffp0
casin 0x0.ffffffp0 0x1p-23
casin -0x0.ffffffp0 0x1p-23
casin 0x0.ffffffp0 -0x1p-23
casin -0x0.ffffffp0 -0x1p-23
casin 0x1.fp-129 0x0.ffffffp0
casin 0x1.fp-129 -0x0.ffffffp0
casin -0x1.fp-129 0x0.ffffffp0
casin -0x1.fp-129 -0x0.ffffffp0
casin 0x0.ffffffp0 0x1.fp-129
casin -0x0.ffffffp0 0x1.fp-129
casin 0x0.ffffffp0 -0x1.fp-129
casin -0x0.ffffffp0 -0x1.fp-129
casin 0.0 0x0.ffffffp0
casin 0.0 -0x0.ffffffp0
casin -0.0 0x0.ffffffp0
casin -0.0 -0x0.ffffffp0
casin 0x0.ffffffp0 0.0
casin -0x0.ffffffp0 0.0
casin 0x0.ffffffp0 -0.0
casin -0x0.ffffffp0 -0.0
casin 0x1p-23 0.5
casin 0x1p-23 -0.5
casin -0x1p-23 0.5
casin -0x1p-23 -0.5
casin 0.5 0x1p-23
casin -0.5 0x1p-23
casin 0.5 -0x1p-23
casin -0.5 -0x1p-23
casin 0x1.fp-129 0.5
casin 0x1.fp-129 -0.5
casin -0x1.fp-129 0.5
casin -0x1.fp-129 -0.5
casin 0.5 0x1.fp-129
casin -0.5 0x1.fp-129
casin 0.5 -0x1.fp-129
casin -0.5 -0x1.fp-129
casin 0x1p-23 0x1p-23
casin 0x1p-23 -0x1p-23
casin -0x1p-23 0x1p-23
casin -0x1p-23 -0x1p-23
casin 0x1.fp-129 0x1p-23
casin 0x1.fp-129 -0x1p-23
casin -0x1.fp-129 0x1p-23
casin -0x1.fp-129 -0x1p-23
casin 0x1p-23 0x1.fp-129
casin -0x1p-23 0x1.fp-129
casin 0x1p-23 -0x1.fp-129
casin -0x1p-23 -0x1.fp-129
casin 0.0 0x1p-23
casin 0.0 -0x1p-23
casin -0.0 0x1p-23
casin -0.0 -0x1p-23
casin 0x1p-23 0.0
casin -0x1p-23 0.0
casin 0x1p-23 -0.0
casin -0x1p-23 -0.0
casin 0x1.fp-129 0x1.fp-129
casin 0x1.fp-129 -0x1.fp-129
casin -0x1.fp-129 0x1.fp-129
casin -0x1.fp-129 -0x1.fp-129
casin 0x1p-52 0x0.fffffffffffff8p0
casin 0x1p-52 -0x0.fffffffffffff8p0
casin -0x1p-52 0x0.fffffffffffff8p0
casin -0x1p-52 -0x0.fffffffffffff8p0
casin 0x0.fffffffffffff8p0 0x1p-52
casin -0x0.fffffffffffff8p0 0x1p-52
casin 0x0.fffffffffffff8p0 -0x1p-52
casin -0x0.fffffffffffff8p0 -0x1p-52
casin 0x1.fp-1025 0x0.fffffffffffff8p0
casin 0x1.fp-1025 -0x0.fffffffffffff8p0
casin -0x1.fp-1025 0x0.fffffffffffff8p0
casin -0x1.fp-1025 -0x0.fffffffffffff8p0
casin 0x0.fffffffffffff8p0 0x1.fp-1025
casin -0x0.fffffffffffff8p0 0x1.fp-1025
casin 0x0.fffffffffffff8p0 -0x1.fp-1025
casin -0x0.fffffffffffff8p0 -0x1.fp-1025
casin 0.0 0x0.fffffffffffff8p0
casin 0.0 -0x0.fffffffffffff8p0
casin -0.0 0x0.fffffffffffff8p0
casin -0.0 -0x0.fffffffffffff8p0
casin 0x0.fffffffffffff8p0 0.0
casin -0x0.fffffffffffff8p0 0.0
casin 0x0.fffffffffffff8p0 -0.0
casin -0x0.fffffffffffff8p0 -0.0
casin 0x1p-52 0.5
casin 0x1p-52 -0.5
casin -0x1p-52 0.5
casin -0x1p-52 -0.5
casin 0.5 0x1p-52
casin -0.5 0x1p-52
casin 0.5 -0x1p-52
casin -0.5 -0x1p-52
casin 0x1.fp-1025 0.5
casin 0x1.fp-1025 -0.5
casin -0x1.fp-1025 0.5
casin -0x1.fp-1025 -0.5
casin 0.5 0x1.fp-1025
casin -0.5 0x1.fp-1025
casin 0.5 -0x1.fp-1025
casin -0.5 -0x1.fp-1025
casin 0x1p-52 0x1p-52
casin 0x1p-52 -0x1p-52
casin -0x1p-52 0x1p-52
casin -0x1p-52 -0x1p-52
casin 0x1.fp-1025 0x1p-52
casin 0x1.fp-1025 -0x1p-52
casin -0x1.fp-1025 0x1p-52
casin -0x1.fp-1025 -0x1p-52
casin 0x1p-52 0x1.fp-1025
casin -0x1p-52 0x1.fp-1025
casin 0x1p-52 -0x1.fp-1025
casin -0x1p-52 -0x1.fp-1025
casin 0.0 0x1p-52
casin 0.0 -0x1p-52
casin -0.0 0x1p-52
casin -0.0 -0x1p-52
casin 0x1p-52 0.0
casin -0x1p-52 0.0
casin 0x1p-52 -0.0
casin -0x1p-52 -0.0
casin 0x1.fp-1025 0x1.fp-1025
casin 0x1.fp-1025 -0x1.fp-1025
casin -0x1.fp-1025 0x1.fp-1025
casin -0x1.fp-1025 -0x1.fp-1025
casin 0x1p-63 0x0.ffffffffffffffffp0
casin 0x1p-63 -0x0.ffffffffffffffffp0
casin -0x1p-63 0x0.ffffffffffffffffp0
casin -0x1p-63 -0x0.ffffffffffffffffp0
casin 0x0.ffffffffffffffffp0 0x1p-63
casin -0x0.ffffffffffffffffp0 0x1p-63
casin 0x0.ffffffffffffffffp0 -0x1p-63
casin -0x0.ffffffffffffffffp0 -0x1p-63
casin 0x1.fp-16385 0x0.ffffffffffffffffp0
casin 0x1.fp-16385 -0x0.ffffffffffffffffp0
casin -0x1.fp-16385 0x0.ffffffffffffffffp0
casin -0x1.fp-16385 -0x0.ffffffffffffffffp0
casin 0x0.ffffffffffffffffp0 0x1.fp-16385
casin -0x0.ffffffffffffffffp0 0x1.fp-16385
casin 0x0.ffffffffffffffffp0 -0x1.fp-16385
casin -0x0.ffffffffffffffffp0 -0x1.fp-16385
casin 0.0 0x0.ffffffffffffffffp0
casin 0.0 -0x0.ffffffffffffffffp0
casin -0.0 0x0.ffffffffffffffffp0
casin -0.0 -0x0.ffffffffffffffffp0
casin 0x0.ffffffffffffffffp0 0.0
casin -0x0.ffffffffffffffffp0 0.0
casin 0x0.ffffffffffffffffp0 -0.0
casin -0x0.ffffffffffffffffp0 -0.0
casin 0x1p-63 0.5
casin 0x1p-63 -0.5
casin -0x1p-63 0.5
casin -0x1p-63 -0.5
casin 0.5 0x1p-63
casin -0.5 0x1p-63
casin 0.5 -0x1p-63
casin -0.5 -0x1p-63
casin 0x1.fp-16385 0.5
casin 0x1.fp-16385 -0.5
casin -0x1.fp-16385 0.5
casin -0x1.fp-16385 -0.5
casin 0.5 0x1.fp-16385
casin -0.5 0x1.fp-16385
casin 0.5 -0x1.fp-16385
casin -0.5 -0x1.fp-16385
casin 0x1p-63 0x1p-63
casin 0x1p-63 -0x1p-63
casin -0x1p-63 0x1p-63
casin -0x1p-63 -0x1p-63
casin 0x1.fp-16385 0x1p-63
casin 0x1.fp-16385 -0x1p-63
casin -0x1.fp-16385 0x1p-63
casin -0x1.fp-16385 -0x1p-63
casin 0x1p-63 0x1.fp-16385
casin -0x1p-63 0x1.fp-16385
casin 0x1p-63 -0x1.fp-16385
casin -0x1p-63 -0x1.fp-16385
casin 0.0 0x1p-63
casin 0.0 -0x1p-63
casin -0.0 0x1p-63
casin -0.0 -0x1p-63
casin 0x1p-63 0.0
casin -0x1p-63 0.0
casin 0x1p-63 -0.0
casin -0x1p-63 -0.0
casin 0x1.fp-16385 0x1.fp-16385
casin 0x1.fp-16385 -0x1.fp-16385
casin -0x1.fp-16385 0x1.fp-16385
casin -0x1.fp-16385 -0x1.fp-16385
casin 0x1p-105 0x0.ffffffffffffffffffffffffffcp0
casin 0x1p-105 -0x0.ffffffffffffffffffffffffffcp0
casin -0x1p-105 0x0.ffffffffffffffffffffffffffcp0
casin -0x1p-105 -0x0.ffffffffffffffffffffffffffcp0
casin 0x0.ffffffffffffffffffffffffffcp0 0x1p-105
casin -0x0.ffffffffffffffffffffffffffcp0 0x1p-105
casin 0x0.ffffffffffffffffffffffffffcp0 -0x1p-105
casin -0x0.ffffffffffffffffffffffffffcp0 -0x1p-105
casin 0x1.fp-1025 0x0.ffffffffffffffffffffffffffcp0
casin 0x1.fp-1025 -0x0.ffffffffffffffffffffffffffcp0
casin -0x1.fp-1025 0x0.ffffffffffffffffffffffffffcp0
casin -0x1.fp-1025 -0x0.ffffffffffffffffffffffffffcp0
casin 0x0.ffffffffffffffffffffffffffcp0 0x1.fp-1025
casin -0x0.ffffffffffffffffffffffffffcp0 0x1.fp-1025
casin 0x0.ffffffffffffffffffffffffffcp0 -0x1.fp-1025
casin -0x0.ffffffffffffffffffffffffffcp0 -0x1.fp-1025
casin 0.0 0x0.ffffffffffffffffffffffffffcp0
casin 0.0 -0x0.ffffffffffffffffffffffffffcp0
casin -0.0 0x0.ffffffffffffffffffffffffffcp0
casin -0.0 -0x0.ffffffffffffffffffffffffffcp0
casin 0x0.ffffffffffffffffffffffffffcp0 0.0
casin -0x0.ffffffffffffffffffffffffffcp0 0.0
casin 0x0.ffffffffffffffffffffffffffcp0 -0.0
casin -0x0.ffffffffffffffffffffffffffcp0 -0.0
casin 0x1p-105 0.5
casin 0x1p-105 -0.5
casin -0x1p-105 0.5
casin -0x1p-105 -0.5
casin 0.5 0x1p-105
casin -0.5 0x1p-105
casin 0.5 -0x1p-105
casin -0.5 -0x1p-105
casin 0x1p-105 0x1p-105
casin 0x1p-105 -0x1p-105
casin -0x1p-105 0x1p-105
casin -0x1p-105 -0x1p-105
casin 0x1.fp-1025 0x1p-105
casin 0x1.fp-1025 -0x1p-105
casin -0x1.fp-1025 0x1p-105
casin -0x1.fp-1025 -0x1p-105
casin 0x1p-105 0x1.fp-1025
casin -0x1p-105 0x1.fp-1025
casin 0x1p-105 -0x1.fp-1025
casin -0x1p-105 -0x1.fp-1025
casin 0.0 0x1p-105
casin 0.0 -0x1p-105
casin -0.0 0x1p-105
casin -0.0 -0x1p-105
casin 0x1p-105 0.0
casin -0x1p-105 0.0
casin 0x1p-105 -0.0
casin -0x1p-105 -0.0
casin 0x1p-112 0x0.ffffffffffffffffffffffffffff8p0
casin 0x1p-112 -0x0.ffffffffffffffffffffffffffff8p0
casin -0x1p-112 0x0.ffffffffffffffffffffffffffff8p0
casin -0x1p-112 -0x0.ffffffffffffffffffffffffffff8p0
casin 0x0.ffffffffffffffffffffffffffff8p0 0x1p-112
casin -0x0.ffffffffffffffffffffffffffff8p0 0x1p-112
casin 0x0.ffffffffffffffffffffffffffff8p0 -0x1p-112
casin -0x0.ffffffffffffffffffffffffffff8p0 -0x1p-112
casin 0x1.fp-16385 0x0.ffffffffffffffffffffffffffff8p0
casin 0x1.fp-16385 -0x0.ffffffffffffffffffffffffffff8p0
casin -0x1.fp-16385 0x0.ffffffffffffffffffffffffffff8p0
casin -0x1.fp-16385 -0x0.ffffffffffffffffffffffffffff8p0
casin 0x0.ffffffffffffffffffffffffffff8p0 0x1.fp-16385
casin -0x0.ffffffffffffffffffffffffffff8p0 0x1.fp-16385
casin 0x0.ffffffffffffffffffffffffffff8p0 -0x1.fp-16385
casin -0x0.ffffffffffffffffffffffffffff8p0 -0x1.fp-16385
casin 0.0 0x0.ffffffffffffffffffffffffffff8p0
casin 0.0 -0x0.ffffffffffffffffffffffffffff8p0
casin -0.0 0x0.ffffffffffffffffffffffffffff8p0
casin -0.0 -0x0.ffffffffffffffffffffffffffff8p0
casin 0x0.ffffffffffffffffffffffffffff8p0 0.0
casin -0x0.ffffffffffffffffffffffffffff8p0 0.0
casin 0x0.ffffffffffffffffffffffffffff8p0 -0.0
casin -0x0.ffffffffffffffffffffffffffff8p0 -0.0
casin 0x1p-112 0.5
casin 0x1p-112 -0.5
casin -0x1p-112 0.5
casin -0x1p-112 -0.5
casin 0.5 0x1p-112
casin -0.5 0x1p-112
casin 0.5 -0x1p-112
casin -0.5 -0x1p-112
casin 0x1p-112 0x1p-112
casin 0x1p-112 -0x1p-112
casin -0x1p-112 0x1p-112
casin -0x1p-112 -0x1p-112
casin 0x1.fp-16385 0x1p-112
casin 0x1.fp-16385 -0x1p-112
casin -0x1.fp-16385 0x1p-112
casin -0x1.fp-16385 -0x1p-112
casin 0x1p-112 0x1.fp-16385
casin -0x1p-112 0x1.fp-16385
casin 0x1p-112 -0x1.fp-16385
casin -0x1p-112 -0x1.fp-16385
casin 0.0 0x1p-112
casin 0.0 -0x1p-112
casin -0.0 0x1p-112
casin -0.0 -0x1p-112
casin 0x1p-112 0.0
casin -0x1p-112 0.0
casin 0x1p-112 -0.0
casin -0x1p-112 -0.0
casin 0.75 1.25
casin -2 -3
casinh 0 0
casinh -0 0
casinh 0 -0
casinh -0 -0
casinh 0 -1.5
casinh -0 -1.5
casinh 0 -1.0
casinh -0 -1.0
casinh 0 -0.5
casinh -0 -0.5
casinh 0 0.5
casinh -0 0.5
casinh 0 1.0
casinh -0 1.0
casinh 0 1.5
casinh -0 1.5
casinh -1.5 0
casinh -1.5 -0
casinh -1.0 0
casinh -1.0 -0
casinh -0.5 0
casinh -0.5 -0
casinh 0.5 0
casinh 0.5 -0
casinh 1.0 0
casinh 1.0 -0
casinh 1.5 0
casinh 1.5 -0
casinh 0x1p50 1.0
casinh 0x1p50 -1.0
casinh -0x1p50 1.0
casinh -0x1p50 -1.0
casinh 1.0 0x1p50
casinh -1.0 0x1p50
casinh 1.0 -0x1p50
casinh -1.0 -0x1p50
casinh 0x1p500 1.0
casinh 0x1p500 -1.0
casinh -0x1p500 1.0
casinh -0x1p500 -1.0
casinh 1.0 0x1p500
casinh -1.0 0x1p500
casinh 1.0 -0x1p500
casinh -1.0 -0x1p500
casinh 0x1p5000 1.0
casinh 0x1p5000 -1.0
casinh -0x1p5000 1.0
casinh -0x1p5000 -1.0
casinh 1.0 0x1p5000
casinh -1.0 0x1p5000
casinh 1.0 -0x1p5000
casinh -1.0 -0x1p5000
casinh 0x1.fp127 0x1.fp127
casinh 0x1.fp1023 0x1.fp1023
casinh 0x1.fp16383 0x1.fp16383
casinh 0x1.fp-129 1.5
casinh 0x1.fp-129 -1.5
casinh -0x1.fp-129 1.5
casinh -0x1.fp-129 -1.5
casinh 1.5 0x1.fp-129
casinh -1.5 0x1.fp-129
casinh 1.5 -0x1.fp-129
casinh -1.5 -0x1.fp-129
casinh 0x1.fp-1025 1.5
casinh 0x1.fp-1025 -1.5
casinh -0x1.fp-1025 1.5
casinh -0x1.fp-1025 -1.5
casinh 1.5 0x1.fp-1025
casinh -1.5 0x1.fp-1025
casinh 1.5 -0x1.fp-1025
casinh -1.5 -0x1.fp-1025
casinh 0x1.fp-16385 1.5
casinh 0x1.fp-16385 -1.5
casinh -0x1.fp-16385 1.5
casinh -0x1.fp-16385 -1.5
casinh 1.5 0x1.fp-16385
casinh -1.5 0x1.fp-16385
casinh 1.5 -0x1.fp-16385
casinh -1.5 -0x1.fp-16385
casinh 0.5 1.0
casinh 0.5 -1.0
casinh -0.5 1.0
casinh -0.5 -1.0
casinh 1.0 0.5
casinh -1.0 0.5
casinh 1.0 -0.5
casinh -1.0 -0.5
casinh 0.25 1.0
casinh 0.25 -1.0
casinh -0.25 1.0
casinh -0.25 -1.0
casinh 1.0 0.25
casinh -1.0 0.25
casinh 1.0 -0.25
casinh -1.0 -0.25
casinh 0x1.fp-10 1.0
casinh 0x1.fp-10 -1.0
casinh -0x1.fp-10 1.0
casinh -0x1.fp-10 -1.0
casinh 1.0 0x1.fp-10
casinh -1.0 0x1.fp-10
casinh 1.0 -0x1.fp-10
casinh -1.0 -0x1.fp-10
casinh 0x1.fp-30 1.0
casinh 0x1.fp-30 -1.0
casinh -0x1.fp-30 1.0
casinh -0x1.fp-30 -1.0
casinh 1.0 0x1.fp-30
casinh -1.0 0x1.fp-30
casinh 1.0 -0x1.fp-30
casinh -1.0 -0x1.fp-30
casinh 0x1.fp-100 1.0
casinh 0x1.fp-100 -1.0
casinh -0x1.fp-100 1.0
casinh -0x1.fp-100 -1.0
casinh 1.0 0x1.fp-100
casinh -1.0 0x1.fp-100
casinh 1.0 -0x1.fp-100
casinh -1.0 -0x1.fp-100
casinh 0x1.fp-129 1.0
casinh 0x1.fp-129 -1.0
casinh -0x1.fp-129 1.0
casinh -0x1.fp-129 -1.0
casinh 1.0 0x1.fp-129
casinh -1.0 0x1.fp-129
casinh 1.0 -0x1.fp-129
casinh -1.0 -0x1.fp-129
casinh 0x1.fp-1000 1.0
casinh 0x1.fp-1000 -1.0
casinh -0x1.fp-1000 1.0
casinh -0x1.fp-1000 -1.0
casinh 1.0 0x1.fp-1000
casinh -1.0 0x1.fp-1000
casinh 1.0 -0x1.fp-1000
casinh -1.0 -0x1.fp-1000
casinh 0x1.fp-1025 1.0
casinh 0x1.fp-1025 -1.0
casinh -0x1.fp-1025 1.0
casinh -0x1.fp-1025 -1.0
casinh 1.0 0x1.fp-1025
casinh -1.0 0x1.fp-1025
casinh 1.0 -0x1.fp-1025
casinh -1.0 -0x1.fp-1025
casinh 0x1.fp-10000 1.0
casinh 0x1.fp-10000 -1.0
casinh -0x1.fp-10000 1.0
casinh -0x1.fp-10000 -1.0
casinh 1.0 0x1.fp-10000
casinh -1.0 0x1.fp-10000
casinh 1.0 -0x1.fp-10000
casinh -1.0 -0x1.fp-10000
casinh 0x1.fp-16385 1.0
casinh 0x1.fp-16385 -1.0
casinh -0x1.fp-16385 1.0
casinh -0x1.fp-16385 -1.0
casinh 1.0 0x1.fp-16385
casinh -1.0 0x1.fp-16385
casinh 1.0 -0x1.fp-16385
casinh -1.0 -0x1.fp-16385
casinh 0x1p-23 0x1.000002p0
casinh 0x1p-23 -0x1.000002p0
casinh -0x1p-23 0x1.000002p0
casinh -0x1p-23 -0x1.000002p0
casinh 0x1.000002p0 0x1p-23
casinh -0x1.000002p0 0x1p-23
casinh 0x1.000002p0 -0x1p-23
casinh -0x1.000002p0 -0x1p-23
casinh 0x1.fp-129 0x1.000002p0
casinh 0x1.fp-129 -0x1.000002p0
casinh -0x1.fp-129 0x1.000002p0
casinh -0x1.fp-129 -0x1.000002p0
casinh 0x1.000002p0 0x1.fp-129
casinh -0x1.000002p0 0x1.fp-129
casinh 0x1.000002p0 -0x1.fp-129
casinh -0x1.000002p0 -0x1.fp-129
casinh 0.0 0x1.000002p0
casinh 0.0 -0x1.000002p0
casinh -0.0 0x1.000002p0
casinh -0.0 -0x1.000002p0
casinh 0x1.000002p0 0.0
casinh -0x1.000002p0 0.0
casinh 0x1.000002p0 -0.0
casinh -0x1.000002p0 -0.0
casinh 0x1p-52 0x1.0000000000001p0
casinh 0x1p-52 -0x1.0000000000001p0
casinh -0x1p-52 0x1.0000000000001p0
casinh -0x1p-52 -0x1.0000000000001p0
casinh 0x1.0000000000001p0 0x1p-52
casinh -0x1.0000000000001p0 0x1p-52
casinh 0x1.0000000000001p0 -0x1p-52
casinh -0x1.0000000000001p0 -0x1p-52
casinh 0x1.fp-1025 0x1.0000000000001p0
casinh 0x1.fp-1025 -0x1.0000000000001p0
casinh -0x1.fp-1025 0x1.0000000000001p0
casinh -0x1.fp-1025 -0x1.0000000000001p0
casinh 0x1.0000000000001p0 0x1.fp-1025
casinh -0x1.0000000000001p0 0x1.fp-1025
casinh 0x1.0000000000001p0 -0x1.fp-1025
casinh -0x1.0000000000001p0 -0x1.fp-1025
casinh 0.0 0x1.0000000000001p0
casinh 0.0 -0x1.0000000000001p0
casinh -0.0 0x1.0000000000001p0
casinh -0.0 -0x1.0000000000001p0
casinh 0x1.0000000000001p0 0.0
casinh -0x1.0000000000001p0 0.0
casinh 0x1.0000000000001p0 -0.0
casinh -0x1.0000000000001p0 -0.0
casinh 0x1p-63 0x1.0000000000000002p0
casinh 0x1p-63 -0x1.0000000000000002p0
casinh -0x1p-63 0x1.0000000000000002p0
casinh -0x1p-63 -0x1.0000000000000002p0
casinh 0x1.0000000000000002p0 0x1p-63
casinh -0x1.0000000000000002p0 0x1p-63
casinh 0x1.0000000000000002p0 -0x1p-63
casinh -0x1.0000000000000002p0 -0x1p-63
casinh 0x1.fp-16385 0x1.0000000000000002p0
casinh 0x1.fp-16385 -0x1.0000000000000002p0
casinh -0x1.fp-16385 0x1.0000000000000002p0
casinh -0x1.fp-16385 -0x1.0000000000000002p0
casinh 0x1.0000000000000002p0 0x1.fp-16385
casinh -0x1.0000000000000002p0 0x1.fp-16385
casinh 0x1.0000000000000002p0 -0x1.fp-16385
casinh -0x1.0000000000000002p0 -0x1.fp-16385
casinh 0.0 0x1.0000000000000002p0
casinh 0.0 -0x1.0000000000000002p0
casinh -0.0 0x1.0000000000000002p0
casinh -0.0 -0x1.0000000000000002p0
casinh 0x1.0000000000000002p0 0.0
casinh -0x1.0000000000000002p0 0.0
casinh 0x1.0000000000000002p0 -0.0
casinh -0x1.0000000000000002p0 -0.0
casinh 0x1p-106 0x1.000000000000000000000000008p0
casinh 0x1p-106 -0x1.000000000000000000000000008p0
casinh -0x1p-106 0x1.000000000000000000000000008p0
casinh -0x1p-106 -0x1.000000000000000000000000008p0
casinh 0x1.000000000000000000000000008p0 0x1p-106
casinh -0x1.000000000000000000000000008p0 0x1p-106
casinh 0x1.000000000000000000000000008p0 -0x1p-106
casinh -0x1.000000000000000000000000008p0 -0x1p-106
casinh 0x1.fp-1025 0x1.000000000000000000000000008p0
casinh 0x1.fp-1025 -0x1.000000000000000000000000008p0
casinh -0x1.fp-1025 0x1.000000000000000000000000008p0
casinh -0x1.fp-1025 -0x1.000000000000000000000000008p0
casinh 0x1.000000000000000000000000008p0 0x1.fp-1025
casinh -0x1.000000000000000000000000008p0 0x1.fp-1025
casinh 0x1.000000000000000000000000008p0 -0x1.fp-1025
casinh -0x1.000000000000000000000000008p0 -0x1.fp-1025
casinh 0.0 0x1.000000000000000000000000008p0
casinh 0.0 -0x1.000000000000000000000000008p0
casinh -0.0 0x1.000000000000000000000000008p0
casinh -0.0 -0x1.000000000000000000000000008p0
casinh 0x1.000000000000000000000000008p0 0.0
casinh -0x1.000000000000000000000000008p0 0.0
casinh 0x1.000000000000000000000000008p0 -0.0
casinh -0x1.000000000000000000000000008p0 -0.0
casinh 0x1p-113 0x1.0000000000000000000000000001p0
casinh 0x1p-113 -0x1.0000000000000000000000000001p0
casinh -0x1p-113 0x1.0000000000000000000000000001p0
casinh -0x1p-113 -0x1.0000000000000000000000000001p0
casinh 0x1.0000000000000000000000000001p0 0x1p-113
casinh -0x1.0000000000000000000000000001p0 0x1p-113
casinh 0x1.0000000000000000000000000001p0 -0x1p-113
casinh -0x1.0000000000000000000000000001p0 -0x1p-113
casinh 0x1.fp-16385 0x1.0000000000000000000000000001p0
casinh 0x1.fp-16385 -0x1.0000000000000000000000000001p0
casinh -0x1.fp-16385 0x1.0000000000000000000000000001p0
casinh -0x1.fp-16385 -0x1.0000000000000000000000000001p0
casinh 0x1.0000000000000000000000000001p0 0x1.fp-16385
casinh -0x1.0000000000000000000000000001p0 0x1.fp-16385
casinh 0x1.0000000000000000000000000001p0 -0x1.fp-16385
casinh -0x1.0000000000000000000000000001p0 -0x1.fp-16385
casinh 0.0 0x1.0000000000000000000000000001p0
casinh 0.0 -0x1.0000000000000000000000000001p0
casinh -0.0 0x1.0000000000000000000000000001p0
casinh -0.0 -0x1.0000000000000000000000000001p0
casinh 0x1.0000000000000000000000000001p0 0.0
casinh -0x1.0000000000000000000000000001p0 0.0
casinh 0x1.0000000000000000000000000001p0 -0.0
casinh -0x1.0000000000000000000000000001p0 -0.0
casinh 0x1p-23 0x0.ffffffp0
casinh 0x1p-23 -0x0.ffffffp0
casinh -0x1p-23 0x0.ffffffp0
casinh -0x1p-23 -0x0.ffffffp0
casinh 0x0.ffffffp0 0x1p-23
casinh -0x0.ffffffp0 0x1p-23
casinh 0x0.ffffffp0 -0x1p-23
casinh -0x0.ffffffp0 -0x1p-23
casinh 0x1.fp-129 0x0.ffffffp0
casinh 0x1.fp-129 -0x0.ffffffp0
casinh -0x1.fp-129 0x0.ffffffp0
casinh -0x1.fp-129 -0x0.ffffffp0
casinh 0x0.ffffffp0 0x1.fp-129
casinh -0x0.ffffffp0 0x1.fp-129
casinh 0x0.ffffffp0 -0x1.fp-129
casinh -0x0.ffffffp0 -0x1.fp-129
casinh 0.0 0x0.ffffffp0
casinh 0.0 -0x0.ffffffp0
casinh -0.0 0x0.ffffffp0
casinh -0.0 -0x0.ffffffp0
casinh 0x0.ffffffp0 0.0
casinh -0x0.ffffffp0 0.0
casinh 0x0.ffffffp0 -0.0
casinh -0x0.ffffffp0 -0.0
casinh 0x1p-23 0.5
casinh 0x1p-23 -0.5
casinh -0x1p-23 0.5
casinh -0x1p-23 -0.5
casinh 0.5 0x1p-23
casinh -0.5 0x1p-23
casinh 0.5 -0x1p-23
casinh -0.5 -0x1p-23
casinh 0x1.fp-129 0.5
casinh 0x1.fp-129 -0.5
casinh -0x1.fp-129 0.5
casinh -0x1.fp-129 -0.5
casinh 0.5 0x1.fp-129
casinh -0.5 0x1.fp-129
casinh 0.5 -0x1.fp-129
casinh -0.5 -0x1.fp-129
casinh 0x1p-23 0x1p-23
casinh 0x1p-23 -0x1p-23
casinh -0x1p-23 0x1p-23
casinh -0x1p-23 -0x1p-23
casinh 0x1.fp-129 0x1p-23
casinh 0x1.fp-129 -0x1p-23
casinh -0x1.fp-129 0x1p-23
casinh -0x1.fp-129 -0x1p-23
casinh 0x1p-23 0x1.fp-129
casinh -0x1p-23 0x1.fp-129
casinh 0x1p-23 -0x1.fp-129
casinh -0x1p-23 -0x1.fp-129
casinh 0.0 0x1p-23
casinh 0.0 -0x1p-23
casinh -0.0 0x1p-23
casinh -0.0 -0x1p-23
casinh 0x1p-23 0.0
casinh -0x1p-23 0.0
casinh 0x1p-23 -0.0
casinh -0x1p-23 -0.0
casinh 0x1.fp-129 0x1.fp-129
casinh 0x1.fp-129 -0x1.fp-129
casinh -0x1.fp-129 0x1.fp-129
casinh -0x1.fp-129 -0x1.fp-129
casinh 0x1p-52 0x0.fffffffffffff8p0
casinh 0x1p-52 -0x0.fffffffffffff8p0
casinh -0x1p-52 0x0.fffffffffffff8p0
casinh -0x1p-52 -0x0.fffffffffffff8p0
casinh 0x0.fffffffffffff8p0 0x1p-52
casinh -0x0.fffffffffffff8p0 0x1p-52
casinh 0x0.fffffffffffff8p0 -0x1p-52
casinh -0x0.fffffffffffff8p0 -0x1p-52
casinh 0x1.fp-1025 0x0.fffffffffffff8p0
casinh 0x1.fp-1025 -0x0.fffffffffffff8p0
casinh -0x1.fp-1025 0x0.fffffffffffff8p0
casinh -0x1.fp-1025 -0x0.fffffffffffff8p0
casinh 0x0.fffffffffffff8p0 0x1.fp-1025
casinh -0x0.fffffffffffff8p0 0x1.fp-1025
casinh 0x0.fffffffffffff8p0 -0x1.fp-1025
casinh -0x0.fffffffffffff8p0 -0x1.fp-1025
casinh 0.0 0x0.fffffffffffff8p0
casinh 0.0 -0x0.fffffffffffff8p0
casinh -0.0 0x0.fffffffffffff8p0
casinh -0.0 -0x0.fffffffffffff8p0
casinh 0x0.fffffffffffff8p0 0.0
casinh -0x0.fffffffffffff8p0 0.0
casinh 0x0.fffffffffffff8p0 -0.0
casinh -0x0.fffffffffffff8p0 -0.0
casinh 0x1p-52 0.5
casinh 0x1p-52 -0.5
casinh -0x1p-52 0.5
casinh -0x1p-52 -0.5
casinh 0.5 0x1p-52
casinh -0.5 0x1p-52
casinh 0.5 -0x1p-52
casinh -0.5 -0x1p-52
casinh 0x1.fp-1025 0.5
casinh 0x1.fp-1025 -0.5
casinh -0x1.fp-1025 0.5
casinh -0x1.fp-1025 -0.5
casinh 0.5 0x1.fp-1025
casinh -0.5 0x1.fp-1025
casinh 0.5 -0x1.fp-1025
casinh -0.5 -0x1.fp-1025
casinh 0x1p-52 0x1p-52
casinh 0x1p-52 -0x1p-52
casinh -0x1p-52 0x1p-52
casinh -0x1p-52 -0x1p-52
casinh 0x1.fp-1025 0x1p-52
casinh 0x1.fp-1025 -0x1p-52
casinh -0x1.fp-1025 0x1p-52
casinh -0x1.fp-1025 -0x1p-52
casinh 0x1p-52 0x1.fp-1025
casinh -0x1p-52 0x1.fp-1025
casinh 0x1p-52 -0x1.fp-1025
casinh -0x1p-52 -0x1.fp-1025
casinh 0.0 0x1p-52
casinh 0.0 -0x1p-52
casinh -0.0 0x1p-52
casinh -0.0 -0x1p-52
casinh 0x1p-52 0.0
casinh -0x1p-52 0.0
casinh 0x1p-52 -0.0
casinh -0x1p-52 -0.0
casinh 0x1.fp-1025 0x1.fp-1025
casinh 0x1.fp-1025 -0x1.fp-1025
casinh -0x1.fp-1025 0x1.fp-1025
casinh -0x1.fp-1025 -0x1.fp-1025
casinh 0x1p-63 0x0.ffffffffffffffffp0
casinh 0x1p-63 -0x0.ffffffffffffffffp0
casinh -0x1p-63 0x0.ffffffffffffffffp0
casinh -0x1p-63 -0x0.ffffffffffffffffp0
casinh 0x0.ffffffffffffffffp0 0x1p-63
casinh -0x0.ffffffffffffffffp0 0x1p-63
casinh 0x0.ffffffffffffffffp0 -0x1p-63
casinh -0x0.ffffffffffffffffp0 -0x1p-63
casinh 0x1.fp-16385 0x0.ffffffffffffffffp0
casinh 0x1.fp-16385 -0x0.ffffffffffffffffp0
casinh -0x1.fp-16385 0x0.ffffffffffffffffp0
casinh -0x1.fp-16385 -0x0.ffffffffffffffffp0
casinh 0x0.ffffffffffffffffp0 0x1.fp-16385
casinh -0x0.ffffffffffffffffp0 0x1.fp-16385
casinh 0x0.ffffffffffffffffp0 -0x1.fp-16385
casinh -0x0.ffffffffffffffffp0 -0x1.fp-16385
casinh 0.0 0x0.ffffffffffffffffp0
casinh 0.0 -0x0.ffffffffffffffffp0
casinh -0.0 0x0.ffffffffffffffffp0
casinh -0.0 -0x0.ffffffffffffffffp0
casinh 0x0.ffffffffffffffffp0 0.0
casinh -0x0.ffffffffffffffffp0 0.0
casinh 0x0.ffffffffffffffffp0 -0.0
casinh -0x0.ffffffffffffffffp0 -0.0
casinh 0x1p-63 0.5
casinh 0x1p-63 -0.5
casinh -0x1p-63 0.5
casinh -0x1p-63 -0.5
casinh 0.5 0x1p-63
casinh -0.5 0x1p-63
casinh 0.5 -0x1p-63
casinh -0.5 -0x1p-63
casinh 0x1.fp-16385 0.5
casinh 0x1.fp-16385 -0.5
casinh -0x1.fp-16385 0.5
casinh -0x1.fp-16385 -0.5
casinh 0.5 0x1.fp-16385
casinh -0.5 0x1.fp-16385
casinh 0.5 -0x1.fp-16385
casinh -0.5 -0x1.fp-16385
casinh 0x1p-63 0x1p-63
casinh 0x1p-63 -0x1p-63
casinh -0x1p-63 0x1p-63
casinh -0x1p-63 -0x1p-63
casinh 0x1.fp-16385 0x1p-63
casinh 0x1.fp-16385 -0x1p-63
casinh -0x1.fp-16385 0x1p-63
casinh -0x1.fp-16385 -0x1p-63
casinh 0x1p-63 0x1.fp-16385
casinh -0x1p-63 0x1.fp-16385
casinh 0x1p-63 -0x1.fp-16385
casinh -0x1p-63 -0x1.fp-16385
casinh 0.0 0x1p-63
casinh 0.0 -0x1p-63
casinh -0.0 0x1p-63
casinh -0.0 -0x1p-63
casinh 0x1p-63 0.0
casinh -0x1p-63 0.0
casinh 0x1p-63 -0.0
casinh -0x1p-63 -0.0
casinh 0x1.fp-16385 0x1.fp-16385
casinh 0x1.fp-16385 -0x1.fp-16385
casinh -0x1.fp-16385 0x1.fp-16385
casinh -0x1.fp-16385 -0x1.fp-16385
casinh 0x1p-105 0x0.ffffffffffffffffffffffffffcp0
casinh 0x1p-105 -0x0.ffffffffffffffffffffffffffcp0
casinh -0x1p-105 0x0.ffffffffffffffffffffffffffcp0
casinh -0x1p-105 -0x0.ffffffffffffffffffffffffffcp0
casinh 0x0.ffffffffffffffffffffffffffcp0 0x1p-105
casinh -0x0.ffffffffffffffffffffffffffcp0 0x1p-105
casinh 0x0.ffffffffffffffffffffffffffcp0 -0x1p-105
casinh -0x0.ffffffffffffffffffffffffffcp0 -0x1p-105
casinh 0x1.fp-1025 0x0.ffffffffffffffffffffffffffcp0
casinh 0x1.fp-1025 -0x0.ffffffffffffffffffffffffffcp0
casinh -0x1.fp-1025 0x0.ffffffffffffffffffffffffffcp0
casinh -0x1.fp-1025 -0x0.ffffffffffffffffffffffffffcp0
casinh 0x0.ffffffffffffffffffffffffffcp0 0x1.fp-1025
casinh -0x0.ffffffffffffffffffffffffffcp0 0x1.fp-1025
casinh 0x0.ffffffffffffffffffffffffffcp0 -0x1.fp-1025
casinh -0x0.ffffffffffffffffffffffffffcp0 -0x1.fp-1025
casinh 0.0 0x0.ffffffffffffffffffffffffffcp0
casinh 0.0 -0x0.ffffffffffffffffffffffffffcp0
casinh -0.0 0x0.ffffffffffffffffffffffffffcp0
casinh -0.0 -0x0.ffffffffffffffffffffffffffcp0
casinh 0x0.ffffffffffffffffffffffffffcp0 0.0
casinh -0x0.ffffffffffffffffffffffffffcp0 0.0
casinh 0x0.ffffffffffffffffffffffffffcp0 -0.0
casinh -0x0.ffffffffffffffffffffffffffcp0 -0.0
casinh 0x1p-105 0.5
casinh 0x1p-105 -0.5
casinh -0x1p-105 0.5
casinh -0x1p-105 -0.5
casinh 0.5 0x1p-105
casinh -0.5 0x1p-105
casinh 0.5 -0x1p-105
casinh -0.5 -0x1p-105
casinh 0x1p-105 0x1p-105
casinh 0x1p-105 -0x1p-105
casinh -0x1p-105 0x1p-105
casinh -0x1p-105 -0x1p-105
casinh 0x1.fp-1025 0x1p-105
casinh 0x1.fp-1025 -0x1p-105
casinh -0x1.fp-1025 0x1p-105
casinh -0x1.fp-1025 -0x1p-105
casinh 0x1p-105 0x1.fp-1025
casinh -0x1p-105 0x1.fp-1025
casinh 0x1p-105 -0x1.fp-1025
casinh -0x1p-105 -0x1.fp-1025
casinh 0.0 0x1p-105
casinh 0.0 -0x1p-105
casinh -0.0 0x1p-105
casinh -0.0 -0x1p-105
casinh 0x1p-105 0.0
casinh -0x1p-105 0.0
casinh 0x1p-105 -0.0
casinh -0x1p-105 -0.0
casinh 0x1p-112 0x0.ffffffffffffffffffffffffffff8p0
casinh 0x1p-112 -0x0.ffffffffffffffffffffffffffff8p0
casinh -0x1p-112 0x0.ffffffffffffffffffffffffffff8p0
casinh -0x1p-112 -0x0.ffffffffffffffffffffffffffff8p0
casinh 0x0.ffffffffffffffffffffffffffff8p0 0x1p-112
casinh -0x0.ffffffffffffffffffffffffffff8p0 0x1p-112
casinh 0x0.ffffffffffffffffffffffffffff8p0 -0x1p-112
casinh -0x0.ffffffffffffffffffffffffffff8p0 -0x1p-112
casinh 0x1.fp-16385 0x0.ffffffffffffffffffffffffffff8p0
casinh 0x1.fp-16385 -0x0.ffffffffffffffffffffffffffff8p0
casinh -0x1.fp-16385 0x0.ffffffffffffffffffffffffffff8p0
casinh -0x1.fp-16385 -0x0.ffffffffffffffffffffffffffff8p0
casinh 0x0.ffffffffffffffffffffffffffff8p0 0x1.fp-16385
casinh -0x0.ffffffffffffffffffffffffffff8p0 0x1.fp-16385
casinh 0x0.ffffffffffffffffffffffffffff8p0 -0x1.fp-16385
casinh -0x0.ffffffffffffffffffffffffffff8p0 -0x1.fp-16385
casinh 0.0 0x0.ffffffffffffffffffffffffffff8p0
casinh 0.0 -0x0.ffffffffffffffffffffffffffff8p0
casinh -0.0 0x0.ffffffffffffffffffffffffffff8p0
casinh -0.0 -0x0.ffffffffffffffffffffffffffff8p0
casinh 0x0.ffffffffffffffffffffffffffff8p0 0.0
casinh -0x0.ffffffffffffffffffffffffffff8p0 0.0
casinh 0x0.ffffffffffffffffffffffffffff8p0 -0.0
casinh -0x0.ffffffffffffffffffffffffffff8p0 -0.0
casinh 0x1p-112 0.5
casinh 0x1p-112 -0.5
casinh -0x1p-112 0.5
casinh -0x1p-112 -0.5
casinh 0.5 0x1p-112
casinh -0.5 0x1p-112
casinh 0.5 -0x1p-112
casinh -0.5 -0x1p-112
casinh 0x1p-112 0x1p-112
casinh 0x1p-112 -0x1p-112
casinh -0x1p-112 0x1p-112
casinh -0x1p-112 -0x1p-112
casinh 0x1.fp-16385 0x1p-112
casinh 0x1.fp-16385 -0x1p-112
casinh -0x1.fp-16385 0x1p-112
casinh -0x1.fp-16385 -0x1p-112
casinh 0x1p-112 0x1.fp-16385
casinh -0x1p-112 0x1.fp-16385
casinh 0x1p-112 -0x1.fp-16385
casinh -0x1p-112 -0x1.fp-16385
casinh 0.0 0x1p-112
casinh 0.0 -0x1p-112
casinh -0.0 0x1p-112
casinh -0.0 -0x1p-112
casinh 0x1p-112 0.0
casinh -0x1p-112 0.0
casinh 0x1p-112 -0.0
casinh -0x1p-112 -0.0
casinh 0.75 1.25
casinh -2 -3
catan 0 0
catan -0 0
catan 0 -0
catan -0 -0
catan 1.0 0
catan 1.0 -0
catan -1.0 0
catan -1.0 -0
catan 0x1p50 0.0
catan 0x1p50 -0.0
catan -0x1p50 0.0
catan -0x1p50 -0.0
catan 0.0 0x1p50
catan -0.0 0x1p50
catan 0.0 -0x1p50
catan -0.0 -0x1p50
catan 0x1p500 0.0
catan 0x1p500 -0.0
catan -0x1p500 0.0
catan -0x1p500 -0.0
catan 0.0 0x1p500
catan -0.0 0x1p500
catan 0.0 -0x1p500
catan -0.0 -0x1p500
catan 0x1p5000 0.0
catan 0x1p5000 -0.0
catan -0x1p5000 0.0
catan -0x1p5000 -0.0
catan 0.0 0x1p5000
catan -0.0 0x1p5000
catan 0.0 -0x1p5000
catan -0.0 -0x1p5000
catan 0x1p63 0.5
catan 0x1p63 -0.5
catan -0x1p63 0.5
catan -0x1p63 -0.5
catan 0.5 0x1p63
catan -0.5 0x1p63
catan 0.5 -0x1p63
catan -0.5 -0x1p63
catan 0x1p511 0.5
catan 0x1p511 -0.5
catan -0x1p511 0.5
catan -0x1p511 -0.5
catan 0.5 0x1p511
catan -0.5 0x1p511
catan 0.5 -0x1p511
catan -0.5 -0x1p511
catan 0x1p8191 0.5
catan 0x1p8191 -0.5
catan -0x1p8191 0.5
catan -0x1p8191 -0.5
catan 0.5 0x1p8191
catan -0.5 0x1p8191
catan 0.5 -0x1p8191
catan -0.5 -0x1p8191
catan 0x1p100 0.0
catan 0x1p100 -0.0
catan -0x1p100 0.0
catan -0x1p100 -0.0
catan 0.0 0x1p100
catan -0.0 0x1p100
catan 0.0 -0x1p100
catan -0.0 -0x1p100
catan 0x1.fp127 0.0
catan 0x1.fp127 -0.0
catan -0x1.fp127 0.0
catan -0x1.fp127 -0.0
catan 0.0 0x1.fp127
catan -0.0 0x1.fp127
catan 0.0 -0x1.fp127
catan -0.0 -0x1.fp127
catan 0x1.fp127 0x1.fp127
catan 0x1.fp127 -0x1.fp127
catan -0x1.fp127 0x1.fp127
catan -0x1.fp127 -0x1.fp127
catan 0x1p900 0.0
catan 0x1p900 -0.0
catan -0x1p900 0.0
catan -0x1p900 -0.0
catan 0.0 0x1p900
catan -0.0 0x1p900
catan 0.0 -0x1p900
catan -0.0 -0x1p900
catan 0x1.fp1023 0.0
catan 0x1.fp1023 -0.0
catan -0x1.fp1023 0.0
catan -0x1.fp1023 -0.0
catan 0.0 0x1.fp1023
catan -0.0 0x1.fp1023
catan 0.0 -0x1.fp1023
catan -0.0 -0x1.fp1023
catan 0x1.fp1023 0x1.fp1023
catan 0x1.fp1023 -0x1.fp1023
catan -0x1.fp1023 0x1.fp1023
catan -0x1.fp1023 -0x1.fp1023
catan 0x1p10000 0.0
catan 0x1p10000 -0.0
catan -0x1p10000 0.0
catan -0x1p10000 -0.0
catan 0.0 0x1p10000
catan -0.0 0x1p10000
catan 0.0 -0x1p10000
catan -0.0 -0x1p10000
catan 0x1.fp16383 0.0
catan 0x1.fp16383 -0.0
catan -0x1.fp16383 0.0
catan -0x1.fp16383 -0.0
catan 0.0 0x1.fp16383
catan -0.0 0x1.fp16383
catan 0.0 -0x1.fp16383
catan -0.0 -0x1.fp16383
catan 0x1.fp16383 0x1.fp16383 xfail-rounding:ibm128-libgcc
catan 0x1.fp16383 -0x1.fp16383 xfail-rounding:ibm128-libgcc
catan -0x1.fp16383 0x1.fp16383 xfail-rounding:ibm128-libgcc
catan -0x1.fp16383 -0x1.fp16383 xfail-rounding:ibm128-libgcc
catan 0x1p-13 1.0
catan 0x1p-13 -1.0
catan -0x1p-13 1.0
catan -0x1p-13 -1.0
catan 1.0 0x1p-13
catan -1.0 0x1p-13
catan 1.0 -0x1p-13
catan -1.0 -0x1p-13
catan 0x1p-27 1.0
catan 0x1p-27 -1.0
catan -0x1p-27 1.0
catan -0x1p-27 -1.0
catan 1.0 0x1p-27
catan -1.0 0x1p-27
catan 1.0 -0x1p-27
catan -1.0 -0x1p-27
catan 0x1p-33 1.0
catan 0x1p-33 -1.0
catan -0x1p-33 1.0
catan -0x1p-33 -1.0
catan 1.0 0x1p-33
catan -1.0 0x1p-33
catan 1.0 -0x1p-33
catan -1.0 -0x1p-33
catan 0x1p-54 1.0
catan 0x1p-54 -1.0
catan -0x1p-54 1.0
catan -0x1p-54 -1.0
catan 1.0 0x1p-54
catan -1.0 0x1p-54
catan 1.0 -0x1p-54
catan -1.0 -0x1p-54
catan 0x1p-57 1.0
catan 0x1p-57 -1.0
catan -0x1p-57 1.0
catan -0x1p-57 -1.0
catan 1.0 0x1p-57
catan -1.0 0x1p-57
catan 1.0 -0x1p-57
catan -1.0 -0x1p-57
catan 0x1p-13 0x1.000002p0
catan 0x1p-13 -0x1.000002p0
catan -0x1p-13 0x1.000002p0
catan -0x1p-13 -0x1.000002p0
catan 0x1.000002p0 0x1p-13
catan -0x1.000002p0 0x1p-13
catan 0x1.000002p0 -0x1p-13
catan -0x1.000002p0 -0x1p-13
catan 0x1p-13 0x0.ffffffp0
catan 0x1p-13 -0x0.ffffffp0
catan -0x1p-13 0x0.ffffffp0
catan -0x1p-13 -0x0.ffffffp0
catan 0x0.ffffffp0 0x1p-13
catan -0x0.ffffffp0 0x1p-13
catan 0x0.ffffffp0 -0x1p-13
catan -0x0.ffffffp0 -0x1p-13
catan 0x1p-27 0x1.0000000000001p0
catan 0x1p-27 -0x1.0000000000001p0
catan -0x1p-27 0x1.0000000000001p0
catan -0x1p-27 -0x1.0000000000001p0
catan 0x1.0000000000001p0 0x1p-27
catan -0x1.0000000000001p0 0x1p-27
catan 0x1.0000000000001p0 -0x1p-27
catan -0x1.0000000000001p0 -0x1p-27
catan 0x1p-27 0x0.fffffffffffff8p0
catan 0x1p-27 -0x0.fffffffffffff8p0
catan -0x1p-27 0x0.fffffffffffff8p0
catan -0x1p-27 -0x0.fffffffffffff8p0
catan 0x0.fffffffffffff8p0 0x1p-27
catan -0x0.fffffffffffff8p0 0x1p-27
catan 0x0.fffffffffffff8p0 -0x1p-27
catan -0x0.fffffffffffff8p0 -0x1p-27
catan 0x1p-33 0x1.0000000000000002p0
catan 0x1p-33 -0x1.0000000000000002p0
catan -0x1p-33 0x1.0000000000000002p0
catan -0x1p-33 -0x1.0000000000000002p0
catan 0x1.0000000000000002p0 0x1p-33
catan -0x1.0000000000000002p0 0x1p-33
catan 0x1.0000000000000002p0 -0x1p-33
catan -0x1.0000000000000002p0 -0x1p-33
catan 0x1p-33 0x0.ffffffffffffffffp0
catan 0x1p-33 -0x0.ffffffffffffffffp0
catan -0x1p-33 0x0.ffffffffffffffffp0
catan -0x1p-33 -0x0.ffffffffffffffffp0
catan 0x0.ffffffffffffffffp0 0x1p-33
catan -0x0.ffffffffffffffffp0 0x1p-33
catan 0x0.ffffffffffffffffp0 -0x1p-33
catan -0x0.ffffffffffffffffp0 -0x1p-33
catan 0x1p-54 0x1.000000000000000000000000008p0
catan 0x1p-54 -0x1.000000000000000000000000008p0
catan -0x1p-54 0x1.000000000000000000000000008p0
catan -0x1p-54 -0x1.000000000000000000000000008p0
catan 0x1.000000000000000000000000008p0 0x1p-54
catan -0x1.000000000000000000000000008p0 0x1p-54
catan 0x1.000000000000000000000000008p0 -0x1p-54
catan -0x1.000000000000000000000000008p0 -0x1p-54
catan 0x1p-54 0x0.ffffffffffffffffffffffffffcp0
catan 0x1p-54 -0x0.ffffffffffffffffffffffffffcp0
catan -0x1p-54 0x0.ffffffffffffffffffffffffffcp0
catan -0x1p-54 -0x0.ffffffffffffffffffffffffffcp0
catan 0x0.ffffffffffffffffffffffffffcp0 0x1p-54
catan -0x0.ffffffffffffffffffffffffffcp0 0x1p-54
catan 0x0.ffffffffffffffffffffffffffcp0 -0x1p-54
catan -0x0.ffffffffffffffffffffffffffcp0 -0x1p-54
catan 0x1p-57 0x1.0000000000000000000000000001p0
catan 0x1p-57 -0x1.0000000000000000000000000001p0
catan -0x1p-57 0x1.0000000000000000000000000001p0
catan -0x1p-57 -0x1.0000000000000000000000000001p0
catan 0x1.0000000000000000000000000001p0 0x1p-57
catan -0x1.0000000000000000000000000001p0 0x1p-57
catan 0x1.0000000000000000000000000001p0 -0x1p-57
catan -0x1.0000000000000000000000000001p0 -0x1p-57
catan 0x1p-57 0x0.ffffffffffffffffffffffffffff8p0
catan 0x1p-57 -0x0.ffffffffffffffffffffffffffff8p0
catan -0x1p-57 0x0.ffffffffffffffffffffffffffff8p0
catan -0x1p-57 -0x0.ffffffffffffffffffffffffffff8p0
catan 0x0.ffffffffffffffffffffffffffff8p0 0x1p-57
catan -0x0.ffffffffffffffffffffffffffff8p0 0x1p-57
catan 0x0.ffffffffffffffffffffffffffff8p0 -0x1p-57
catan -0x0.ffffffffffffffffffffffffffff8p0 -0x1p-57
catan 1.0 0x1p-64
catan 1.0 -0x1p-64
catan -1.0 0x1p-64
catan -1.0 -0x1p-64
catan 0x1p-64 1.0
catan -0x1p-64 1.0
catan 0x1p-64 -1.0
catan -0x1p-64 -1.0
catan 1.0 0x1.3p-73
catan 1.0 -0x1.3p-73
catan -1.0 0x1.3p-73
catan -1.0 -0x1.3p-73
catan 0x1.3p-73 1.0
catan -0x1.3p-73 1.0
catan 0x1.3p-73 -1.0
catan -0x1.3p-73 -1.0
catan 1.0 0x1p-124
catan 1.0 -0x1p-124
catan -1.0 0x1p-124
catan -1.0 -0x1p-124
catan 0x1p-124 1.0
catan -0x1p-124 1.0
catan 0x1p-124 -1.0
catan -0x1p-124 -1.0
catan 0x1.000002p0 0x1p-126
catan 0x1.000002p0 -0x1p-126
catan -0x1.000002p0 0x1p-126
catan -0x1.000002p0 -0x1p-126
catan 0x1p-126 0x1.000002p0
catan -0x1p-126 0x1.000002p0
catan 0x1p-126 -0x1.000002p0
catan -0x1p-126 -0x1.000002p0
catan 0x0.ffffffp0 0x1p-126
catan 0x0.ffffffp0 -0x1p-126
catan -0x0.ffffffp0 0x1p-126
catan -0x0.ffffffp0 -0x1p-126
catan 0x1p-126 0x0.ffffffp0
catan -0x1p-126 0x0.ffffffp0
catan 0x1p-126 -0x0.ffffffp0
catan -0x1p-126 -0x0.ffffffp0
catan 1.0 0x1p-512
catan 1.0 -0x1p-512
catan -1.0 0x1p-512
catan -1.0 -0x1p-512
catan 0x1p-512 1.0
catan -0x1p-512 1.0
catan 0x1p-512 -1.0
catan -0x1p-512 -1.0
catan 1.0 0x1.3p-536
catan 1.0 -0x1.3p-536
catan -1.0 0x1.3p-536
catan -1.0 -0x1.3p-536
catan 0x1.3p-536 1.0
catan -0x1.3p-536 1.0
catan 0x1.3p-536 -1.0
catan -0x1.3p-536 -1.0
catan 1.0 0x1p-1020
catan 1.0 -0x1p-1020
catan -1.0 0x1p-1020
catan -1.0 -0x1p-1020
catan 0x1p-1020 1.0
catan -0x1p-1020 1.0
catan 0x1p-1020 -1.0
catan -0x1p-1020 -1.0
catan 0x1.0000000000001p0 0x1p-1022
catan 0x1.0000000000001p0 -0x1p-1022
catan -0x1.0000000000001p0 0x1p-1022
catan -0x1.0000000000001p0 -0x1p-1022
catan 0x1p-1022 0x1.0000000000001p0
catan -0x1p-1022 0x1.0000000000001p0
catan 0x1p-1022 -0x1.0000000000001p0
catan -0x1p-1022 -0x1.0000000000001p0
catan 0x0.fffffffffffff8p0 0x1p-1022
catan 0x0.fffffffffffff8p0 -0x1p-1022
catan -0x0.fffffffffffff8p0 0x1p-1022
catan -0x0.fffffffffffff8p0 -0x1p-1022
catan 0x1p-1022 0x0.fffffffffffff8p0
catan -0x1p-1022 0x0.fffffffffffff8p0
catan 0x1p-1022 -0x0.fffffffffffff8p0
catan -0x1p-1022 -0x0.fffffffffffff8p0
catan 0x1.0000000000000002p0 0x1p-1022
catan 0x1.0000000000000002p0 -0x1p-1022
catan -0x1.0000000000000002p0 0x1p-1022
catan -0x1.0000000000000002p0 -0x1p-1022
catan 0x1p-1022 0x1.0000000000000002p0
catan -0x1p-1022 0x1.0000000000000002p0
catan 0x1p-1022 -0x1.0000000000000002p0
catan -0x1p-1022 -0x1.0000000000000002p0
catan 0x0.ffffffffffffffffp0 0x1p-1022
catan 0x0.ffffffffffffffffp0 -0x1p-1022
catan -0x0.ffffffffffffffffp0 0x1p-1022
catan -0x0.ffffffffffffffffp0 -0x1p-1022
catan 0x1p-1022 0x0.ffffffffffffffffp0
catan -0x1p-1022 0x0.ffffffffffffffffp0
catan 0x1p-1022 -0x0.ffffffffffffffffp0
catan -0x1p-1022 -0x0.ffffffffffffffffp0
catan 0x1.000000000000000000000000008p0 0x1p-1022
catan 0x1.000000000000000000000000008p0 -0x1p-1022
catan -0x1.000000000000000000000000008p0 0x1p-1022
catan -0x1.000000000000000000000000008p0 -0x1p-1022
catan 0x1p-1022 0x1.000000000000000000000000008p0
catan -0x1p-1022 0x1.000000000000000000000000008p0
catan 0x1p-1022 -0x1.000000000000000000000000008p0
catan -0x1p-1022 -0x1.000000000000000000000000008p0
catan 0x0.ffffffffffffffffffffffffffcp0 0x1p-1022
catan 0x0.ffffffffffffffffffffffffffcp0 -0x1p-1022
catan -0x0.ffffffffffffffffffffffffffcp0 0x1p-1022
catan -0x0.ffffffffffffffffffffffffffcp0 -0x1p-1022
catan 0x1p-1022 0x0.ffffffffffffffffffffffffffcp0
catan -0x1p-1022 0x0.ffffffffffffffffffffffffffcp0
catan 0x1p-1022 -0x0.ffffffffffffffffffffffffffcp0
catan -0x1p-1022 -0x0.ffffffffffffffffffffffffffcp0
catan 1.0 0x1p-8192
catan 1.0 -0x1p-8192
catan -1.0 0x1p-8192
catan -1.0 -0x1p-8192
catan 0x1p-8192 1.0
catan -0x1p-8192 1.0
catan 0x1p-8192 -1.0
catan -0x1p-8192 -1.0
catan 1.0 0x1.3p-8221
catan 1.0 -0x1.3p-8221
catan -1.0 0x1.3p-8221
catan -1.0 -0x1.3p-8221
catan 0x1.3p-8221 1.0
catan -0x1.3p-8221 1.0
catan 0x1.3p-8221 -1.0
catan -0x1.3p-8221 -1.0
catan 1.0 0x1.3p-8246
catan 1.0 -0x1.3p-8246
catan -1.0 0x1.3p-8246
catan -1.0 -0x1.3p-8246
catan 0x1.3p-8246 1.0
catan -0x1.3p-8246 1.0
catan 0x1.3p-8246 -1.0
catan -0x1.3p-8246 -1.0
catan 1.0 0x1p-16380
catan 1.0 -0x1p-16380
catan -1.0 0x1p-16380
catan -1.0 -0x1p-16380
catan 0x1p-16380 1.0
catan -0x1p-16380 1.0
catan 0x1p-16380 -1.0
catan -0x1p-16380 -1.0
catan 0x1.0000000000000002p0 0x1p-16382
catan 0x1.0000000000000002p0 -0x1p-16382
catan -0x1.0000000000000002p0 0x1p-16382
catan -0x1.0000000000000002p0 -0x1p-16382
catan 0x1p-16382 0x1.0000000000000002p0
catan -0x1p-16382 0x1.0000000000000002p0
catan 0x1p-16382 -0x1.0000000000000002p0
catan -0x1p-16382 -0x1.0000000000000002p0
catan 0x0.ffffffffffffffffp0 0x1p-16382
catan 0x0.ffffffffffffffffp0 -0x1p-16382
catan -0x0.ffffffffffffffffp0 0x1p-16382
catan -0x0.ffffffffffffffffp0 -0x1p-16382
catan 0x1p-16382 0x0.ffffffffffffffffp0
catan -0x1p-16382 0x0.ffffffffffffffffp0
catan 0x1p-16382 -0x0.ffffffffffffffffp0
catan -0x1p-16382 -0x0.ffffffffffffffffp0
catan 0x1.0000000000000000000000000001p0 0x1p-16382
catan 0x1.0000000000000000000000000001p0 -0x1p-16382
catan -0x1.0000000000000000000000000001p0 0x1p-16382
catan -0x1.0000000000000000000000000001p0 -0x1p-16382
catan 0x1p-16382 0x1.0000000000000000000000000001p0
catan -0x1p-16382 0x1.0000000000000000000000000001p0
catan 0x1p-16382 -0x1.0000000000000000000000000001p0
catan -0x1p-16382 -0x1.0000000000000000000000000001p0
catan 0x0.ffffffffffffffffffffffffffff8p0 0x1p-16382
catan 0x0.ffffffffffffffffffffffffffff8p0 -0x1p-16382
catan -0x0.ffffffffffffffffffffffffffff8p0 0x1p-16382
catan -0x0.ffffffffffffffffffffffffffff8p0 -0x1p-16382
catan 0x1p-16382 0x0.ffffffffffffffffffffffffffff8p0
catan -0x1p-16382 0x0.ffffffffffffffffffffffffffff8p0
catan 0x1p-16382 -0x0.ffffffffffffffffffffffffffff8p0
catan -0x1p-16382 -0x0.ffffffffffffffffffffffffffff8p0
catan 0.75 1.25
catan -2 -3
catanh 0 0
catanh -0 0
catanh 0 -0
catanh -0 -0
catanh 0 1.0
catanh -0 1.0
catanh 0 -1.0
catanh -0 -1.0
catanh 0x1p50 0.0
catanh 0x1p50 -0.0
catanh -0x1p50 0.0
catanh -0x1p50 -0.0
catanh 0.0 0x1p50
catanh -0.0 0x1p50
catanh 0.0 -0x1p50
catanh -0.0 -0x1p50
catanh 0x1p500 0.0
catanh 0x1p500 -0.0
catanh -0x1p500 0.0
catanh -0x1p500 -0.0
catanh 0.0 0x1p500
catanh -0.0 0x1p500
catanh 0.0 -0x1p500
catanh -0.0 -0x1p500
catanh 0x1p5000 0.0
catanh 0x1p5000 -0.0
catanh -0x1p5000 0.0
catanh -0x1p5000 -0.0
catanh 0.0 0x1p5000
catanh -0.0 0x1p5000
catanh 0.0 -0x1p5000
catanh -0.0 -0x1p5000
catanh 0x1p63 0.5
catanh 0x1p63 -0.5
catanh -0x1p63 0.5
catanh -0x1p63 -0.5
catanh 0.5 0x1p63
catanh -0.5 0x1p63
catanh 0.5 -0x1p63
catanh -0.5 -0x1p63
catanh 0x1p511 0.5
catanh 0x1p511 -0.5
catanh -0x1p511 0.5
catanh -0x1p511 -0.5
catanh 0.5 0x1p511
catanh -0.5 0x1p511
catanh 0.5 -0x1p511
catanh -0.5 -0x1p511
catanh 0x1p8191 0.5
catanh 0x1p8191 -0.5
catanh -0x1p8191 0.5
catanh -0x1p8191 -0.5
catanh 0.5 0x1p8191
catanh -0.5 0x1p8191
catanh 0.5 -0x1p8191
catanh -0.5 -0x1p8191
catanh 0x1p100 0.0
catanh 0x1p100 -0.0
catanh -0x1p100 0.0
catanh -0x1p100 -0.0
catanh 0.0 0x1p100
catanh -0.0 0x1p100
catanh 0.0 -0x1p100
catanh -0.0 -0x1p100
catanh 0x1.fp127 0.0
catanh 0x1.fp127 -0.0
catanh -0x1.fp127 0.0
catanh -0x1.fp127 -0.0
catanh 0.0 0x1.fp127
catanh -0.0 0x1.fp127
catanh 0.0 -0x1.fp127
catanh -0.0 -0x1.fp127
catanh 0x1.fp127 0x1.fp127
catanh 0x1.fp127 -0x1.fp127
catanh -0x1.fp127 0x1.fp127
catanh -0x1.fp127 -0x1.fp127
catanh 0x1p900 0.0
catanh 0x1p900 -0.0
catanh -0x1p900 0.0
catanh -0x1p900 -0.0
catanh 0.0 0x1p900
catanh -0.0 0x1p900
catanh 0.0 -0x1p900
catanh -0.0 -0x1p900
catanh 0x1.fp1023 0.0
catanh 0x1.fp1023 -0.0
catanh -0x1.fp1023 0.0
catanh -0x1.fp1023 -0.0
catanh 0.0 0x1.fp1023
catanh -0.0 0x1.fp1023
catanh 0.0 -0x1.fp1023
catanh -0.0 -0x1.fp1023
catanh 0x1.fp1023 0x1.fp1023
catanh 0x1.fp1023 -0x1.fp1023
catanh -0x1.fp1023 0x1.fp1023
catanh -0x1.fp1023 -0x1.fp1023
catanh 0x1p10000 0.0
catanh 0x1p10000 -0.0
catanh -0x1p10000 0.0
catanh -0x1p10000 -0.0
catanh 0.0 0x1p10000
catanh -0.0 0x1p10000
catanh 0.0 -0x1p10000
catanh -0.0 -0x1p10000
catanh 0x1.fp16383 0.0
catanh 0x1.fp16383 -0.0
catanh -0x1.fp16383 0.0
catanh -0x1.fp16383 -0.0
catanh 0.0 0x1.fp16383
catanh -0.0 0x1.fp16383
catanh 0.0 -0x1.fp16383
catanh -0.0 -0x1.fp16383
catanh 0x1.fp16383 0x1.fp16383 xfail-rounding:ibm128-libgcc
catanh 0x1.fp16383 -0x1.fp16383 xfail-rounding:ibm128-libgcc
catanh -0x1.fp16383 0x1.fp16383 xfail-rounding:ibm128-libgcc
catanh -0x1.fp16383 -0x1.fp16383 xfail-rounding:ibm128-libgcc
catanh 0x1p-13 1.0
catanh 0x1p-13 -1.0
catanh -0x1p-13 1.0
catanh -0x1p-13 -1.0
catanh 1.0 0x1p-13
catanh -1.0 0x1p-13
catanh 1.0 -0x1p-13
catanh -1.0 -0x1p-13
catanh 0x1p-27 1.0
catanh 0x1p-27 -1.0
catanh -0x1p-27 1.0
catanh -0x1p-27 -1.0
catanh 1.0 0x1p-27
catanh -1.0 0x1p-27
catanh 1.0 -0x1p-27
catanh -1.0 -0x1p-27
catanh 0x1p-33 1.0
catanh 0x1p-33 -1.0
catanh -0x1p-33 1.0
catanh -0x1p-33 -1.0
catanh 1.0 0x1p-33
catanh -1.0 0x1p-33
catanh 1.0 -0x1p-33
catanh -1.0 -0x1p-33
catanh 0x1p-54 1.0
catanh 0x1p-54 -1.0
catanh -0x1p-54 1.0
catanh -0x1p-54 -1.0
catanh 1.0 0x1p-54
catanh -1.0 0x1p-54
catanh 1.0 -0x1p-54
catanh -1.0 -0x1p-54
catanh 0x1p-57 1.0
catanh 0x1p-57 -1.0
catanh -0x1p-57 1.0
catanh -0x1p-57 -1.0
catanh 1.0 0x1p-57
catanh -1.0 0x1p-57
catanh 1.0 -0x1p-57
catanh -1.0 -0x1p-57
catanh 0x1p-13 0x1.000002p0
catanh 0x1p-13 -0x1.000002p0
catanh -0x1p-13 0x1.000002p0
catanh -0x1p-13 -0x1.000002p0
catanh 0x1.000002p0 0x1p-13
catanh -0x1.000002p0 0x1p-13
catanh 0x1.000002p0 -0x1p-13
catanh -0x1.000002p0 -0x1p-13
catanh 0x1p-13 0x0.ffffffp0
catanh 0x1p-13 -0x0.ffffffp0
catanh -0x1p-13 0x0.ffffffp0
catanh -0x1p-13 -0x0.ffffffp0
catanh 0x0.ffffffp0 0x1p-13
catanh -0x0.ffffffp0 0x1p-13
catanh 0x0.ffffffp0 -0x1p-13
catanh -0x0.ffffffp0 -0x1p-13
catanh 0x1p-27 0x1.0000000000001p0
catanh 0x1p-27 -0x1.0000000000001p0
catanh -0x1p-27 0x1.0000000000001p0
catanh -0x1p-27 -0x1.0000000000001p0
catanh 0x1.0000000000001p0 0x1p-27
catanh -0x1.0000000000001p0 0x1p-27
catanh 0x1.0000000000001p0 -0x1p-27
catanh -0x1.0000000000001p0 -0x1p-27
catanh 0x1p-27 0x0.fffffffffffff8p0
catanh 0x1p-27 -0x0.fffffffffffff8p0
catanh -0x1p-27 0x0.fffffffffffff8p0
catanh -0x1p-27 -0x0.fffffffffffff8p0
catanh 0x0.fffffffffffff8p0 0x1p-27
catanh -0x0.fffffffffffff8p0 0x1p-27
catanh 0x0.fffffffffffff8p0 -0x1p-27
catanh -0x0.fffffffffffff8p0 -0x1p-27
catanh 0x1p-33 0x1.0000000000000002p0
catanh 0x1p-33 -0x1.0000000000000002p0
catanh -0x1p-33 0x1.0000000000000002p0
catanh -0x1p-33 -0x1.0000000000000002p0
catanh 0x1.0000000000000002p0 0x1p-33
catanh -0x1.0000000000000002p0 0x1p-33
catanh 0x1.0000000000000002p0 -0x1p-33
catanh -0x1.0000000000000002p0 -0x1p-33
catanh 0x1p-33 0x0.ffffffffffffffffp0
catanh 0x1p-33 -0x0.ffffffffffffffffp0
catanh -0x1p-33 0x0.ffffffffffffffffp0
catanh -0x1p-33 -0x0.ffffffffffffffffp0
catanh 0x0.ffffffffffffffffp0 0x1p-33
catanh -0x0.ffffffffffffffffp0 0x1p-33
catanh 0x0.ffffffffffffffffp0 -0x1p-33
catanh -0x0.ffffffffffffffffp0 -0x1p-33
catanh 0x1p-54 0x1.000000000000000000000000008p0
catanh 0x1p-54 -0x1.000000000000000000000000008p0
catanh -0x1p-54 0x1.000000000000000000000000008p0
catanh -0x1p-54 -0x1.000000000000000000000000008p0
catanh 0x1.000000000000000000000000008p0 0x1p-54
catanh -0x1.000000000000000000000000008p0 0x1p-54
catanh 0x1.000000000000000000000000008p0 -0x1p-54
catanh -0x1.000000000000000000000000008p0 -0x1p-54
catanh 0x1p-54 0x0.ffffffffffffffffffffffffffcp0
catanh 0x1p-54 -0x0.ffffffffffffffffffffffffffcp0
catanh -0x1p-54 0x0.ffffffffffffffffffffffffffcp0
catanh -0x1p-54 -0x0.ffffffffffffffffffffffffffcp0
catanh 0x0.ffffffffffffffffffffffffffcp0 0x1p-54
catanh -0x0.ffffffffffffffffffffffffffcp0 0x1p-54
catanh 0x0.ffffffffffffffffffffffffffcp0 -0x1p-54
catanh -0x0.ffffffffffffffffffffffffffcp0 -0x1p-54
catanh 0x1p-57 0x1.0000000000000000000000000001p0
catanh 0x1p-57 -0x1.0000000000000000000000000001p0
catanh -0x1p-57 0x1.0000000000000000000000000001p0
catanh -0x1p-57 -0x1.0000000000000000000000000001p0
catanh 0x1.0000000000000000000000000001p0 0x1p-57
catanh -0x1.0000000000000000000000000001p0 0x1p-57
catanh 0x1.0000000000000000000000000001p0 -0x1p-57
catanh -0x1.0000000000000000000000000001p0 -0x1p-57
catanh 0x1p-57 0x0.ffffffffffffffffffffffffffff8p0
catanh 0x1p-57 -0x0.ffffffffffffffffffffffffffff8p0
catanh -0x1p-57 0x0.ffffffffffffffffffffffffffff8p0
catanh -0x1p-57 -0x0.ffffffffffffffffffffffffffff8p0
catanh 0x0.ffffffffffffffffffffffffffff8p0 0x1p-57
catanh -0x0.ffffffffffffffffffffffffffff8p0 0x1p-57
catanh 0x0.ffffffffffffffffffffffffffff8p0 -0x1p-57
catanh -0x0.ffffffffffffffffffffffffffff8p0 -0x1p-57
catanh 1.0 0x1p-64
catanh 1.0 -0x1p-64
catanh -1.0 0x1p-64
catanh -1.0 -0x1p-64
catanh 0x1p-64 1.0
catanh -0x1p-64 1.0
catanh 0x1p-64 -1.0
catanh -0x1p-64 -1.0
catanh 1.0 0x1.3p-73
catanh 1.0 -0x1.3p-73
catanh -1.0 0x1.3p-73
catanh -1.0 -0x1.3p-73
catanh 0x1.3p-73 1.0
catanh -0x1.3p-73 1.0
catanh 0x1.3p-73 -1.0
catanh -0x1.3p-73 -1.0
catanh 1.0 0x1p-124
catanh 1.0 -0x1p-124
catanh -1.0 0x1p-124
catanh -1.0 -0x1p-124
catanh 0x1p-124 1.0
catanh -0x1p-124 1.0
catanh 0x1p-124 -1.0
catanh -0x1p-124 -1.0
catanh 0x1.000002p0 0x1p-126
catanh 0x1.000002p0 -0x1p-126
catanh -0x1.000002p0 0x1p-126
catanh -0x1.000002p0 -0x1p-126
catanh 0x1p-126 0x1.000002p0
catanh -0x1p-126 0x1.000002p0
catanh 0x1p-126 -0x1.000002p0
catanh -0x1p-126 -0x1.000002p0
catanh 0x0.ffffffp0 0x1p-126
catanh 0x0.ffffffp0 -0x1p-126
catanh -0x0.ffffffp0 0x1p-126
catanh -0x0.ffffffp0 -0x1p-126
catanh 0x1p-126 0x0.ffffffp0
catanh -0x1p-126 0x0.ffffffp0
catanh 0x1p-126 -0x0.ffffffp0
catanh -0x1p-126 -0x0.ffffffp0
catanh 1.0 0x1p-512
catanh 1.0 -0x1p-512
catanh -1.0 0x1p-512
catanh -1.0 -0x1p-512
catanh 0x1p-512 1.0
catanh -0x1p-512 1.0
catanh 0x1p-512 -1.0
catanh -0x1p-512 -1.0
catanh 1.0 0x1.3p-536
catanh 1.0 -0x1.3p-536
catanh -1.0 0x1.3p-536
catanh -1.0 -0x1.3p-536
catanh 0x1.3p-536 1.0
catanh -0x1.3p-536 1.0
catanh 0x1.3p-536 -1.0
catanh -0x1.3p-536 -1.0
catanh 1.0 0x1p-1020
catanh 1.0 -0x1p-1020
catanh -1.0 0x1p-1020
catanh -1.0 -0x1p-1020
catanh 0x1p-1020 1.0
catanh -0x1p-1020 1.0
catanh 0x1p-1020 -1.0
catanh -0x1p-1020 -1.0
catanh 0x1.0000000000001p0 0x1p-1022
catanh 0x1.0000000000001p0 -0x1p-1022
catanh -0x1.0000000000001p0 0x1p-1022
catanh -0x1.0000000000001p0 -0x1p-1022
catanh 0x1p-1022 0x1.0000000000001p0
catanh -0x1p-1022 0x1.0000000000001p0
catanh 0x1p-1022 -0x1.0000000000001p0
catanh -0x1p-1022 -0x1.0000000000001p0
catanh 0x0.fffffffffffff8p0 0x1p-1022
catanh 0x0.fffffffffffff8p0 -0x1p-1022
catanh -0x0.fffffffffffff8p0 0x1p-1022
catanh -0x0.fffffffffffff8p0 -0x1p-1022
catanh 0x1p-1022 0x0.fffffffffffff8p0
catanh -0x1p-1022 0x0.fffffffffffff8p0
catanh 0x1p-1022 -0x0.fffffffffffff8p0
catanh -0x1p-1022 -0x0.fffffffffffff8p0
catanh 0x1.0000000000000002p0 0x1p-1022
catanh 0x1.0000000000000002p0 -0x1p-1022
catanh -0x1.0000000000000002p0 0x1p-1022
catanh -0x1.0000000000000002p0 -0x1p-1022
catanh 0x1p-1022 0x1.0000000000000002p0
catanh -0x1p-1022 0x1.0000000000000002p0
catanh 0x1p-1022 -0x1.0000000000000002p0
catanh -0x1p-1022 -0x1.0000000000000002p0
catanh 0x0.ffffffffffffffffp0 0x1p-1022
catanh 0x0.ffffffffffffffffp0 -0x1p-1022
catanh -0x0.ffffffffffffffffp0 0x1p-1022
catanh -0x0.ffffffffffffffffp0 -0x1p-1022
catanh 0x1p-1022 0x0.ffffffffffffffffp0
catanh -0x1p-1022 0x0.ffffffffffffffffp0
catanh 0x1p-1022 -0x0.ffffffffffffffffp0
catanh -0x1p-1022 -0x0.ffffffffffffffffp0
catanh 0x1.000000000000000000000000008p0 0x1p-1022
catanh 0x1.000000000000000000000000008p0 -0x1p-1022
catanh -0x1.000000000000000000000000008p0 0x1p-1022
catanh -0x1.000000000000000000000000008p0 -0x1p-1022
catanh 0x1p-1022 0x1.000000000000000000000000008p0
catanh -0x1p-1022 0x1.000000000000000000000000008p0
catanh 0x1p-1022 -0x1.000000000000000000000000008p0
catanh -0x1p-1022 -0x1.000000000000000000000000008p0
catanh 0x0.ffffffffffffffffffffffffffcp0 0x1p-1022
catanh 0x0.ffffffffffffffffffffffffffcp0 -0x1p-1022
catanh -0x0.ffffffffffffffffffffffffffcp0 0x1p-1022
catanh -0x0.ffffffffffffffffffffffffffcp0 -0x1p-1022
catanh 0x1p-1022 0x0.ffffffffffffffffffffffffffcp0
catanh -0x1p-1022 0x0.ffffffffffffffffffffffffffcp0
catanh 0x1p-1022 -0x0.ffffffffffffffffffffffffffcp0
catanh -0x1p-1022 -0x0.ffffffffffffffffffffffffffcp0
catanh 1.0 0x1p-8192
catanh 1.0 -0x1p-8192
catanh -1.0 0x1p-8192
catanh -1.0 -0x1p-8192
catanh 0x1p-8192 1.0
catanh -0x1p-8192 1.0
catanh 0x1p-8192 -1.0
catanh -0x1p-8192 -1.0
catanh 1.0 0x1.3p-8221
catanh 1.0 -0x1.3p-8221
catanh -1.0 0x1.3p-8221
catanh -1.0 -0x1.3p-8221
catanh 0x1.3p-8221 1.0
catanh -0x1.3p-8221 1.0
catanh 0x1.3p-8221 -1.0
catanh -0x1.3p-8221 -1.0
catanh 1.0 0x1.3p-8246
catanh 1.0 -0x1.3p-8246
catanh -1.0 0x1.3p-8246
catanh -1.0 -0x1.3p-8246
catanh 0x1.3p-8246 1.0
catanh -0x1.3p-8246 1.0
catanh 0x1.3p-8246 -1.0
catanh -0x1.3p-8246 -1.0
catanh 1.0 0x1p-16380
catanh 1.0 -0x1p-16380
catanh -1.0 0x1p-16380
catanh -1.0 -0x1p-16380
catanh 0x1p-16380 1.0
catanh -0x1p-16380 1.0
catanh 0x1p-16380 -1.0
catanh -0x1p-16380 -1.0
catanh 0x1.0000000000000002p0 0x1p-16382
catanh 0x1.0000000000000002p0 -0x1p-16382
catanh -0x1.0000000000000002p0 0x1p-16382
catanh -0x1.0000000000000002p0 -0x1p-16382
catanh 0x1p-16382 0x1.0000000000000002p0
catanh -0x1p-16382 0x1.0000000000000002p0
catanh 0x1p-16382 -0x1.0000000000000002p0
catanh -0x1p-16382 -0x1.0000000000000002p0
catanh 0x0.ffffffffffffffffp0 0x1p-16382
catanh 0x0.ffffffffffffffffp0 -0x1p-16382
catanh -0x0.ffffffffffffffffp0 0x1p-16382
catanh -0x0.ffffffffffffffffp0 -0x1p-16382
catanh 0x1p-16382 0x0.ffffffffffffffffp0
catanh -0x1p-16382 0x0.ffffffffffffffffp0
catanh 0x1p-16382 -0x0.ffffffffffffffffp0
catanh -0x1p-16382 -0x0.ffffffffffffffffp0
catanh 0x1.0000000000000000000000000001p0 0x1p-16382
catanh 0x1.0000000000000000000000000001p0 -0x1p-16382
catanh -0x1.0000000000000000000000000001p0 0x1p-16382
catanh -0x1.0000000000000000000000000001p0 -0x1p-16382
catanh 0x1p-16382 0x1.0000000000000000000000000001p0
catanh -0x1p-16382 0x1.0000000000000000000000000001p0
catanh 0x1p-16382 -0x1.0000000000000000000000000001p0
catanh -0x1p-16382 -0x1.0000000000000000000000000001p0
catanh 0x0.ffffffffffffffffffffffffffff8p0 0x1p-16382
catanh 0x0.ffffffffffffffffffffffffffff8p0 -0x1p-16382
catanh -0x0.ffffffffffffffffffffffffffff8p0 0x1p-16382
catanh -0x0.ffffffffffffffffffffffffffff8p0 -0x1p-16382
catanh 0x1p-16382 0x0.ffffffffffffffffffffffffffff8p0
catanh -0x1p-16382 0x0.ffffffffffffffffffffffffffff8p0
catanh 0x1p-16382 -0x0.ffffffffffffffffffffffffffff8p0
catanh -0x1p-16382 -0x0.ffffffffffffffffffffffffffff8p0
catanh 0.75 1.25
catanh -2 -3
cbrt 0.0
cbrt -0
cbrt -0.001
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
cbrt 2
cbrt 4
cbrt 8
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
cbrt -10
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
# the next value generates larger error bounds on x86_64 (binary64)
cbrt -0x1.7cec1dab41272p-230
cbrt max xfail:ibm128-libgcc
cbrt -max xfail:ibm128-libgcc
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 12:32:44 +00: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
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 12:32:44 +00:00
ccos 0x1p-149 180
ccos 0x1p-1074 1440
ccos 0x1p-16434 22730
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 12:32:44 +00:00
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-24 21:04:51 +00: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 12:32:44 +00: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
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 12:32:44 +00:00
ccosh 180 0x1p-149
ccosh 1440 0x1p-1074
ccosh 22730 0x1p-16434
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 12:32:44 +00:00
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-24 21:04:51 +00: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 12:32:44 +00: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
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 12:32:44 +00:00
cexp -11370 0.75
cexp 180 0x1p-149
cexp 1440 0x1p-1074
cexp 22730 0x1p-16434
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 12:32:44 +00:00
cexp 1e6 0
cexp 1e6 min
cexp 1e6 -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 12:32:44 +00:00
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-24 21:04:51 +00: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 12:32:44 +00: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
Fix clog, clog10 inaccuracy (bug 19016). For arguments with X^2 + Y^2 close to 1, clog and clog10 avoid large errors from log(hypot) by computing X^2 + Y^2 - 1 in a way that avoids cancellation error and then using log1p. However, the thresholds for using that approach still result in log being used on argument as large as sqrt(13/16) > 0.9, leading to significant errors, in some cases above the 9ulp maximum allowed in glibc libm. This patch arranges for the approach using log1p to be used in any cases where |X|, |Y| < 1 and X^2 + Y^2 >= 0.5 (with the existing allowance for cases where one of X and Y is very small), adjusting the __x2y2m1 functions to work with the wider range of inputs. This way, log only gets used on arguments below sqrt(1/2) (or substantially above 1), where the error involved is much less. Tested for x86_64, x86, mips64 and powerpc. For the ulps regeneration I removed the existing clog and clog10 ulps before regenerating to allow any reduced ulps to appear. Tests added include those found by random test generation to produce large ulps either before or after the patch, and some found by trying inputs close to the (0.75, 0.5) threshold where the potential errors from using log are largest. [BZ #19016] * sysdeps/generic/math_private.h (__x2y2m1f): Update comment to allow more cases with X^2 + Y^2 >= 0.5. * sysdeps/ieee754/dbl-64/x2y2m1.c (__x2y2m1): Likewise. Add -1 as normal element in sum instead of special-casing based on values of arguments. * sysdeps/ieee754/dbl-64/x2y2m1f.c (__x2y2m1f): Update comment. * sysdeps/ieee754/ldbl-128/x2y2m1l.c (__x2y2m1l): Likewise. Add -1 as normal element in sum instead of special-casing based on values of arguments. * sysdeps/ieee754/ldbl-128ibm/x2y2m1l.c (__x2y2m1l): Likewise. * sysdeps/ieee754/ldbl-96/x2y2m1.c [FLT_EVAL_METHOD != 0] (__x2y2m1): Update comment. * sysdeps/ieee754/ldbl-96/x2y2m1l.c (__x2y2m1l): Likewise. Add -1 as normal element in sum instead of special-casing based on values of arguments. * math/s_clog.c (__clog): Handle more cases using log1p without hypot. * math/s_clog10.c (__clog10): Likewise. * math/s_clog10f.c (__clog10f): Likewise. * math/s_clog10l.c (__clog10l): Likewise. * math/s_clogf.c (__clogf): Likewise. * math/s_clogl.c (__clogl): Likewise. * math/auto-libm-test-in: Add more tests of clog and clog10. * math/auto-libm-test-out: Regenerated. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2015-09-28 22:11:22 +00:00
clog -0x2.7bdep-4 0x5.ab7a4p-4
clog -0xb.e1d3d0ff44358p-4 -0x7.54785e1b143f8p-4
clog 0x3.ba473p+0 0x7.eea9ap-4
clog 0x9.d02220baee4ep+36 0x2.b9a29cp+0
clog -0x5.1a5cf8p-4 -0xb.73012p-4
clog -0xa.ff292a609dbb8p-4 0x6.f73d4cp-4
clog -0x5.1a5cfc2301114p-4 -0xb.730118p-4
clog 0xb.ffffcp-4 0x7.ffff1p-4
clog 0xb.ffffp-4 0x7.ffffap-4
clog 0xb.ffffp-4 0x7.fffff8p-4
clog 0xb.ffffp-4 0x7.ffffp-4
clog 0xb.fffffp-4 0x7.ffff68p-4
clog 0xb.fffffp-4 0x7.ffffp-4
clog 0xb.ffff8p-4 0x7.ffffcp-4
clog 0xb.ffffp-4 0x7.ffffcp-4
clog 0xb.ffffp-4 0x7.ffffb8p-4
clog 0xb.ffffp-4 0x7.ffff7p-4
clog 0xb.ffffp-4 0x7.ffff5p-4
clog 0xb.fffffffffff7p-4 0x7.fffff8p-4
clog 0xb.fffffffffff08p-4 0x7.fffffffffffdp-4
clog 0xb.fffffffffff08p-4 0x7.fffffffffff9p-4
clog 0xb.fffffffffffp-4 0x7.fffffffffffdcp-4
clog 0xb.fffffp-4 0x7.ffffffffffff4p-4
clog 0xb.fffffffffffp-4 0x7.fffffffffffecp-4
clog 0xb.fffffffffff8p-4 0x7.fffff8p-4
clog 0x8p-152 -0x1.10233ap+0
clog 0xa.03634p-4 -0x4.7bb918p-20
clog -0x5.e23d2p-4 0x8.525df889c21ap-4
clog 0x9.8ce58p-4 -0x8p-152
clog 0x8p-152 0x9.2af75p-4
clog 0x9.97a15de8e59d8p-4 -0
clog -0x4.74556ec92eb4746p-4 0x1.1e7aa1d936f6efe6p+0
clog 0x9.97a15de8e59d8p-4 -0
clog -0x9.7f1d7p-64 0x9.db37dp-4
clog -0x8.5efc4p-4 -0x5.40310cp-4
clog -0x9.0b459p-4 0
clog -0x6.a9419e9b30e68p-4 -0x6.262c7p-4
clog 0x5.2767cdfdfbf2p-4 0x7.69ee98p-4
clog -0x9.f5563cb3227d8p-4 0
clog -0x9.5a284p-4 0x6.899578p-8
clog 0xa.3e62bp-4 0x1.18c03p-100
clog 0 -0x9.22a99p-4
clog 0 0x9.7915bp-4
clog 0x3.00d1ap-12 0x1.23ff6ap+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 12:32:44 +00: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
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 12:32:44 +00:00
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
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 12:32:44 +00:00
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
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 12:32:44 +00:00
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
Fix clog, clog10 inaccuracy (bug 19016). For arguments with X^2 + Y^2 close to 1, clog and clog10 avoid large errors from log(hypot) by computing X^2 + Y^2 - 1 in a way that avoids cancellation error and then using log1p. However, the thresholds for using that approach still result in log being used on argument as large as sqrt(13/16) > 0.9, leading to significant errors, in some cases above the 9ulp maximum allowed in glibc libm. This patch arranges for the approach using log1p to be used in any cases where |X|, |Y| < 1 and X^2 + Y^2 >= 0.5 (with the existing allowance for cases where one of X and Y is very small), adjusting the __x2y2m1 functions to work with the wider range of inputs. This way, log only gets used on arguments below sqrt(1/2) (or substantially above 1), where the error involved is much less. Tested for x86_64, x86, mips64 and powerpc. For the ulps regeneration I removed the existing clog and clog10 ulps before regenerating to allow any reduced ulps to appear. Tests added include those found by random test generation to produce large ulps either before or after the patch, and some found by trying inputs close to the (0.75, 0.5) threshold where the potential errors from using log are largest. [BZ #19016] * sysdeps/generic/math_private.h (__x2y2m1f): Update comment to allow more cases with X^2 + Y^2 >= 0.5. * sysdeps/ieee754/dbl-64/x2y2m1.c (__x2y2m1): Likewise. Add -1 as normal element in sum instead of special-casing based on values of arguments. * sysdeps/ieee754/dbl-64/x2y2m1f.c (__x2y2m1f): Update comment. * sysdeps/ieee754/ldbl-128/x2y2m1l.c (__x2y2m1l): Likewise. Add -1 as normal element in sum instead of special-casing based on values of arguments. * sysdeps/ieee754/ldbl-128ibm/x2y2m1l.c (__x2y2m1l): Likewise. * sysdeps/ieee754/ldbl-96/x2y2m1.c [FLT_EVAL_METHOD != 0] (__x2y2m1): Update comment. * sysdeps/ieee754/ldbl-96/x2y2m1l.c (__x2y2m1l): Likewise. Add -1 as normal element in sum instead of special-casing based on values of arguments. * math/s_clog.c (__clog): Handle more cases using log1p without hypot. * math/s_clog10.c (__clog10): Likewise. * math/s_clog10f.c (__clog10f): Likewise. * math/s_clog10l.c (__clog10l): Likewise. * math/s_clogf.c (__clogf): Likewise. * math/s_clogl.c (__clogl): Likewise. * math/auto-libm-test-in: Add more tests of clog and clog10. * math/auto-libm-test-out: Regenerated. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2015-09-28 22:11:22 +00:00
clog10 -0x2.7bdep-4 0x5.ab7a4p-4
clog10 -0xb.e1d3d0ff44358p-4 -0x7.54785e1b143f8p-4
clog10 0x3.ba473p+0 0x7.eea9ap-4
clog10 0x9.d02220baee4ep+36 0x2.b9a29cp+0
clog10 -0x5.1a5cf8p-4 -0xb.73012p-4
clog10 -0xa.ff292a609dbb8p-4 0x6.f73d4cp-4
clog10 -0x5.1a5cfc2301114p-4 -0xb.730118p-4
clog10 0xb.ffffcp-4 0x7.ffff1p-4
clog10 0xb.ffffp-4 0x7.ffffap-4
clog10 0xb.ffffp-4 0x7.fffff8p-4
clog10 0xb.ffffp-4 0x7.ffffp-4
clog10 0xb.fffffp-4 0x7.ffff68p-4
clog10 0xb.fffffp-4 0x7.ffffp-4
clog10 0xb.ffff8p-4 0x7.ffffcp-4
clog10 0xb.ffffp-4 0x7.ffffcp-4
clog10 0xb.ffffp-4 0x7.ffffb8p-4
clog10 0xb.ffffp-4 0x7.ffff7p-4
clog10 0xb.ffffp-4 0x7.ffff5p-4
clog10 0xb.fffffffffff7p-4 0x7.fffff8p-4
clog10 0xb.fffffffffff08p-4 0x7.fffffffffffdp-4
clog10 0xb.fffffffffff08p-4 0x7.fffffffffff9p-4
clog10 0xb.fffffffffffp-4 0x7.fffffffffffdcp-4
clog10 0xb.fffffp-4 0x7.ffffffffffff4p-4
clog10 0xb.fffffffffffp-4 0x7.fffffffffffecp-4
clog10 0xb.fffffffffff8p-4 0x7.fffff8p-4
clog10 0x8p-152 -0x1.10233ap+0
clog10 0xa.03634p-4 -0x4.7bb918p-20
clog10 -0x5.e23d2p-4 0x8.525df889c21ap-4
clog10 0x9.8ce58p-4 -0x8p-152
clog10 0x8p-152 0x9.2af75p-4
clog10 0x9.97a15de8e59d8p-4 -0
clog10 -0x4.74556ec92eb4746p-4 0x1.1e7aa1d936f6efe6p+0
clog10 0x9.97a15de8e59d8p-4 -0
clog10 -0x9.7f1d7p-64 0x9.db37dp-4
clog10 -0x8.5efc4p-4 -0x5.40310cp-4
clog10 -0x9.0b459p-4 0
clog10 -0x6.a9419e9b30e68p-4 -0x6.262c7p-4
clog10 0x5.2767cdfdfbf2p-4 0x7.69ee98p-4
clog10 -0x9.f5563cb3227d8p-4 0
clog10 -0x9.5a284p-4 0x6.899578p-8
clog10 0xa.3e62bp-4 0x1.18c03p-100
clog10 0 -0x9.22a99p-4
clog10 0 0x9.7915bp-4
clog10 0x3.00d1ap-12 0x1.23ff6ap+0
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
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
cos 0x1p-5
cos 0x1p-10
cos 0x1p-15
cos 0x1p-20
cos 0x1p-25
cos 0x1p-30
cos 0x1p-35
cos 0x1p-40
cos 0x1p-45
cos 0x1p-50
cos 0x1p-55
cos 0x1p-60
cos 0x1p-100
cos 0x1p-600
cos 0x1p-10000
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
cos 0x1.8475e5afd4481p+0
cos 1.57079697
cos -1.57079697
# the next value generates larger error bounds on x86_64 (binary32)
cos 0x2.3c6ef4p-12
# the next value generates larger error bounds on x86_64 (binary128)
cos 0xe.6672d458b05edf50af4fab1a42p+40
cosh 0
cosh -0
cosh 0.75
cosh 709.8893558127259666434838436543941497802734375
cosh -709.8893558127259666434838436543941497802734375
cosh 22
cosh 23
cosh 24
cosh 0x1p-5
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
cosh 0x1p-10
cosh 0x1p-15
cosh 0x1p-20
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
cosh 0x1p-25
cosh 0x1p-30
cosh 0x1p-35
cosh 0x1p-40
cosh 0x1p-45
cosh 0x1p-50
cosh 0x1p-100
cosh 0x1p-600
cosh 0x1p-10000
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
cosh max
cosh -max
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-23 20:20:10 +00: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
cosh 0x2.c679d1f73f0fap+8
cosh 0x2.c679d1f73f0fcp+8
cosh -0x2.c679d1f73f0fap+8
cosh -0x2.c679d1f73f0fcp+8
cosh 0x2.c679d1f73f0fb624d358b213a7p+8 xfail-rounding:ibm128-libgcc
cosh 0x2.c679d1f73f0fb624d358b213a8p+8 xfail-rounding:ibm128-libgcc
cosh -0x2.c679d1f73f0fb624d358b213a7p+8 xfail-rounding:ibm128-libgcc
cosh -0x2.c679d1f73f0fb624d358b213a8p+8 xfail-rounding:ibm128-libgcc
cosh 0x2.c5d37700c6bb03a4p+12
cosh 0x2.c5d37700c6bb03a8p+12
cosh -0x2.c5d37700c6bb03a4p+12
cosh -0x2.c5d37700c6bb03a8p+12
cosh 0x2.c5d37700c6bb03a6c24b6c9b494cp+12
cosh 0x2.c5d37700c6bb03a6c24b6c9b494ep+12
cosh -0x2.c5d37700c6bb03a6c24b6c9b494cp+12
cosh -0x2.c5d37700c6bb03a6c24b6c9b494ep+12
# the next value generates larger error bounds on x86_64 (binary32)
cosh 0x5.8bfe6p+4
# the next value generates larger error bounds on x86_64 (binary64)
cosh 0x1.633c457f1e66bp+9
# the next value generates larger error bounds on x86_64 (ldbl-96)
cosh 0x2.c5d376167f4052f4p+12
# the next value generates larger error bounds on x86_64 (binary128)
cosh -0x2.c5d376eefcd4bbeb000452d84662p+12
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-23 20:15:14 +00: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-23 20:15:14 +00: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-23 20:15:14 +00: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-24 21:04:51 +00:00
csin min 1
csin -min 1
csin min_subnorm 80
csin -min_subnorm 80
csin min_subnorm min
csin min min_subnorm
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-24 21:04:51 +00:00
csinh 1 min
csinh 1 -min
csinh 80 min_subnorm
csinh 80 -min_subnorm
csinh min_subnorm min
csinh 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 12:32:44 +00: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 12:32:44 +00: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 12:32:44 +00: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
ctan 1 5680
ctan 1 5690
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 12:32:44 +00:00
ctan 0x3.243f6cp-1 0
ctan 0x1p127 1
ctan 0x1p1023 1
ctan 0x1p16383 1
ctan 50000 50000
ctan 50000 -50000
ctan -50000 50000
ctan -50000 -50000
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 12:32:44 +00: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-24 21:04:51 +00: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 12:32:44 +00: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
ctanh 5680 1
ctanh 5690 1
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 12:32:44 +00:00
ctanh 0 0x3.243f6cp-1
ctanh 1 0x1p127
ctanh 1 0x1p1023
ctanh 1 0x1p16383
ctanh 50000 50000
ctanh 50000 -50000
ctanh -50000 50000
ctanh -50000 -50000
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 12:32:44 +00: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-24 21:04:51 +00:00
Add narrowing divide functions. This patch adds the narrowing divide functions from TS 18661-1 to glibc's libm: fdiv, fdivl, ddivl, f32divf64, f32divf32x, f32xdivf64 for all configurations; f32divf64x, f32divf128, f64divf64x, f64divf128, f32xdivf64x, f32xdivf128, f64xdivf128 for configurations with _Float64x and _Float128; __nldbl_ddivl for ldbl-opt. The changes are mostly essentially the same as for the other narrowing functions, so the description of those generally applies to this patch as well. Tested for x86_64, x86, mips64 (all three ABIs, both hard and soft float) and powerpc, and with build-many-glibcs.py. * math/Makefile (libm-narrow-fns): Add div. (libm-test-funcs-narrow): Likewise. * math/Versions (GLIBC_2.28): Add narrowing divide functions. * math/bits/mathcalls-narrow.h (div): Use __MATHCALL_NARROW. * math/gen-auto-libm-tests.c (test_functions): Add div. * math/math-narrow.h (CHECK_NARROW_DIV): New macro. (NARROW_DIV_ROUND_TO_ODD): Likewise. (NARROW_DIV_TRIVIAL): Likewise. * sysdeps/ieee754/float128/float128_private.h (__fdivl): New macro. (__ddivl): Likewise. * sysdeps/ieee754/ldbl-opt/Makefile (libnldbl-calls): Add fdiv and ddiv. (CFLAGS-nldbl-ddiv.c): New variable. (CFLAGS-nldbl-fdiv.c): Likewise. * sysdeps/ieee754/ldbl-opt/Versions (GLIBC_2.28): Add __nldbl_ddivl. * sysdeps/ieee754/ldbl-opt/nldbl-compat.h (__nldbl_ddivl): New prototype. * manual/arith.texi (Misc FP Arithmetic): Document fdiv, fdivl, ddivl, fMdivfN, fMdivfNx, fMxdivfN and fMxdivfNx. * math/auto-libm-test-in: Add tests of div. * math/auto-libm-test-out-narrow-div: New generated file. * math/libm-test-narrow-div.inc: New file. * sysdeps/i386/fpu/s_f32xdivf64.c: Likewise. * sysdeps/ieee754/dbl-64/s_f32xdivf64.c: Likewise. * sysdeps/ieee754/dbl-64/s_fdiv.c: Likewise. * sysdeps/ieee754/float128/s_f32divf128.c: Likewise. * sysdeps/ieee754/float128/s_f64divf128.c: Likewise. * sysdeps/ieee754/float128/s_f64xdivf128.c: Likewise. * sysdeps/ieee754/ldbl-128/s_ddivl.c: Likewise. * sysdeps/ieee754/ldbl-128/s_f64xdivf128.c: Likewise. * sysdeps/ieee754/ldbl-128/s_fdivl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_ddivl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_fdivl.c: Likewise. * sysdeps/ieee754/ldbl-96/s_ddivl.c: Likewise. * sysdeps/ieee754/ldbl-96/s_fdivl.c: Likewise. * sysdeps/ieee754/ldbl-opt/nldbl-ddiv.c: Likewise. * sysdeps/ieee754/ldbl-opt/nldbl-fdiv.c: Likewise. * sysdeps/ieee754/soft-fp/s_ddivl.c: Likewise. * sysdeps/ieee754/soft-fp/s_fdiv.c: Likewise. * sysdeps/ieee754/soft-fp/s_fdivl.c: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * sysdeps/mach/hurd/i386/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/aarch64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/alpha/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/arm/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/hppa/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/i386/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/ia64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/microblaze/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/nios2/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/riscv/rv64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/sh/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise.
2018-05-17 00:40:52 +00:00
div 0 min
div 0 -min
div 0 min_subnorm
div 0 -min_subnorm
div 0 max
div 0 -max
div -0 min
div -0 -min
div -0 min_subnorm
div -0 -min_subnorm
div -0 max
div -0 -max
div max max xfail:ibm128-libgcc
div max -max xfail:ibm128-libgcc
div -max max xfail:ibm128-libgcc
div -max -max xfail:ibm128-libgcc
div min min
div min -min
div -min min
div -min -min
div min_subnorm min_subnorm
div min_subnorm -min_subnorm
div -min_subnorm min_subnorm
div -min_subnorm -min_subnorm
div max min xfail-rounding:ibm128-libgcc
div max -min xfail-rounding:ibm128-libgcc
div -max min xfail-rounding:ibm128-libgcc
div -max -min xfail-rounding:ibm128-libgcc
div max min_subnorm xfail-rounding:ibm128-libgcc
div max -min_subnorm xfail-rounding:ibm128-libgcc
div -max min_subnorm xfail-rounding:ibm128-libgcc
div -max -min_subnorm xfail-rounding:ibm128-libgcc
div min max xfail-rounding:ibm128-libgcc
div min -max xfail-rounding:ibm128-libgcc
div -min max xfail-rounding:ibm128-libgcc
div -min -max xfail-rounding:ibm128-libgcc
div min_subnorm max xfail-rounding:ibm128-libgcc
div min_subnorm -max xfail-rounding:ibm128-libgcc
div -min_subnorm max xfail-rounding:ibm128-libgcc
div -min_subnorm -max xfail-rounding:ibm128-libgcc
div 1 2
div 1 -2
div -1 2
div -1 -2
div 100.5 0.75
div 100.5 -0.75
div -100.5 0.75
div -100.5 -0.75
# Cases where the ratio of two values in a wider format is very close
# to half way between two representable values in a narrower format,
# so that double rounding would sometimes yield the wrong result. For
# a narrower format of width a and a wider format of width w, take
# b = w - a; these examples are of the form
# (1 + 2^-a + 2^-b + 2^(1-w)) / (1 + 2^-b). These examples have
# ratios of the form (1 + 2^-a) to the width of the wider format, but
# the mathematical value is slightly greater, so that rounding once
# should round the result up but double rounding would wrongly round
# the result down.
# a = 24, w = 53.
div 0x1.0000010800001p0 0x1.00000008p0
# a = 24, w = 64.
div 0x1.0000010001000002p0 0x1.0000000001p0
# a = 24, w = 113.
div 0x1.0000010000000000000000800001p0 0x1.00000000000000000000008p0
# a = 53, w = 64.
div 0x1.0020000000000802p0 0x1.002p0
# a = 53, w = 113.
div 0x1.0000000000000810000000000001p0 0x1.000000000000001p0
# a = 64, w = 113.
div 0x1.0000000000008001000000000001p0 0x1.0000000000008p0
# Similar, for double rounding to 64-bit of a division of 53-bit values.
div 0x1ffe1p0 0xfffp0
# Cases where there is underflow before rounding (for some format) but
# might not be after rounding, depending on the rounding mode.
div 0x1p-126 0x1.0000001p0
div 0x1p-126 -0x1.0000001p0
div -0x1p-126 0x1.0000001p0
div -0x1p-126 -0x1.0000001p0
div 0x1p-1022 0x1.00000000000001p0 missing-underflow:arg-ibm128
div 0x1p-1022 -0x1.00000000000001p0 missing-underflow:arg-ibm128
div -0x1p-1022 0x1.00000000000001p0 missing-underflow:arg-ibm128
div -0x1p-1022 -0x1.00000000000001p0 missing-underflow:arg-ibm128
div 0x1p-16382 0x1.00000000000000001p0 missing-underflow:arg-ibm128 xfail-rounding:ibm128-libgcc
div 0x1p-16382 -0x1.00000000000000001p0 missing-underflow:arg-ibm128 xfail-rounding:ibm128-libgcc
div -0x1p-16382 0x1.00000000000000001p0 missing-underflow:arg-ibm128 xfail-rounding:ibm128-libgcc
div -0x1p-16382 -0x1.00000000000000001p0 missing-underflow:arg-ibm128 xfail-rounding:ibm128-libgcc
erf 0
erf -0
erf 0.125
erf 0.75
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
erf 1
erf -1
erf 1.25
erf 2.0
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
erf -2
erf 3
erf -3
erf 4
erf -4
erf 4.125
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
erf 5
erf 6
erf 7
erf 8
erf 9
erf 10
erf -10
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 12:34:03 +00:00
erf 0x1.c5bf94p-127
erf 0x3.8b7fa8p-128
erf -0x3.8b7f12369ded8p-1024
erf 0x3.8b7f12369ded5518p-16384
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
erf 0x3.8b7ee8p-128
erf 0x3.8b7f3cp-128
erf 0x3.8b7f12369decp-1024
erf 0x3.8b7f12369deeap-1024
erf 0x7.16fe246d3bdaa9e70ec1483562p-972
erf 0x7.16fe246d3bdaa9e70ec148358cp-972
erf 0x3.8b7f12369ded54c8p-16384
erf 0x3.8b7f12369ded551cp-16384
erf 0x1.c5bf891b4ef6aa64p-16384
erf 0x1.c5bf891b4ef6aa8ep-16384
erf 0x3.8b7f12369ded54f38760a41abb5cp-16384
erf 0x3.8b7f12369ded54f38760a41abb86p-16384
erf 26.0
erf 28.0
erf 100
erf 106
erf 106.5
erf 106.625
erf 107
erf 108
erf 1000
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
erf 0x1p-5
erf -0x1p-5
erf 0x1p-10
erf 0x1p-15
erf 0x1p-20
erf 0x1p-25
erf 0x1p-30
erf 0x1p-35
erf 0x1p-40
erf 0x1p-45
erf 0x1p-50
erf 0x1p-55
erf 0x1p-60
erf 0x1p-100
erf 0x1p-600
erf 0x1p-10000
erf min
erf -min
erf min_subnorm
erf -min_subnorm
erf max
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
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
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
erfc 1
erfc -1
erfc 1.25
erfc 2.0
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
erfc -2
erfc 3
erfc -3
erfc 0x1.f7303cp+1
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
erfc 4
erfc -4
erfc 4.125
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
erfc 5
erfc -5
erfc 6
erfc -6
erfc 7
erfc -7
erfc 8
erfc -8
erfc 9
erfc -9
erfc 10
erfc -10
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
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
erfc 0x1p-5
erfc -0x1p-5
erfc 0x1p-10
erfc 0x1p-15
erfc 0x1p-20
erfc 0x1p-25
erfc 0x1p-30
erfc 0x1p-35
erfc 0x1p-40
erfc 0x1p-45
erfc 0x1p-50
erfc 0x1p-60
erfc 0x1p-100
erfc 0x1p-600
erfc 0x1p-10000
erfc 0x9.31cdfp+0
erfc 0x9.31cep+0
erfc 0x1.a8b12fc6e4891p+4
erfc 0x1.a8b12fc6e4892p+4
erfc 0x1.9d7adac608e8586300e6c8b99ep+4
erfc 0x1.9d7adac608e8586300e6c8b99e8p+4
erfc 0x6.a893032db905274p+4
erfc 0x6.a893032db9052748p+4
erfc 0x6.a8a0561d8bbe942p+4
erfc 0x6.a8a0561d8bbe9428p+4
erfc 0x6.a893032db905274042fb05c665dcp+4
erfc 0x6.a893032db905274042fb05c665ep+4
# the next value generates larger error bounds on x86_64 (binary32)
erfc 0xd.03d06p-4
# the next value generates larger error bounds on x86_64 (ldbl-96)
erfc 0x1.5cf2167efe9207d2p+0
# the next value generates larger error bounds on x86_64 (binary128)
erfc 0x1.5166e0efc44a9dfc79b8c8873a99p+0
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
erfc min
erfc -min
erfc min_subnorm
erfc -min_subnorm
erfc max
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
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
# the next value generates larger error bounds on x86_64 (binary64)
erfc 0x1.3ffcbf39febb4p+0
exp 0
exp -0
exp 1
exp 2
exp 3
exp 0.75
exp 50.0
exp 88.72269439697265625
exp 709.75
exp 1000.0
exp 710
exp -1234
exp 0x2.c679d1f73f0fb628p+8
exp 1e5
exp max
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
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
exp 0x1p-600
exp -0x1p-600
exp 0x1p-10000
exp -0x1p-10000
exp 0x5.8b90b8p+4
exp 0x5.8b90cp+4
exp -0x5.75628p+4
exp -0x5.756278p+4
exp 0x2.c5c85fdf473dep+8
exp 0x2.c5c85fdf473ep+8
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
exp -0x2.c4657baf579a6p+8
exp -0x2.c4657baf579a4p+8
exp 0x2.c5c85fdf473de6ab278ece600fp+8 xfail-rounding:ibm128-libgcc
exp 0x2.c5c85fdf473de6ab278ece601p+8 xfail-rounding:ibm128-libgcc
exp -0x2.9fa8dcb9092a538b3f2ee2ca67p+8 xfail-rounding:ibm128-libgcc
exp -0x2.9fa8dcb9092a538b3f2ee2ca66p+8 xfail-rounding:ibm128-libgcc
exp 0x2.c5c85fdf473de6acp+12
exp 0x2.c5c85fdf473de6bp+12
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
exp -0x2.c5b2319c4843accp+12
exp -0x2.c5b2319c4843acbcp+12
exp -0x2.c5bd48bdc7c0c9b8p+12
exp -0x2.c5bd48bdc7c0c9b4p+12
exp 0x2.c5c85fdf473de6af278ece600fcap+12
exp 0x2.c5c85fdf473de6af278ece600fccp+12
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
exp -0x2.c5b2319c4843acbff21591e99cccp+12
exp -0x2.c5b2319c4843acbff21591e99ccap+12
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
# the next value generates larger error bounds on x86_64 (binary32)
exp 0x1.fefe02p-16
# the next value generates larger error bounds on x86_64 (binary64)
exp -0x1.0c4af1ad4ee36p+9
exp10 0
exp10 -0
exp10 3
exp10 -1
exp10 36
exp10 -36
exp10 305
exp10 -305
exp10 4932
exp10 -4932
exp10 -0x1.343793004f503232p12
exp10 1e5
exp10 -1e5
exp10 1e6
exp10 -1e6
exp10 max
exp10 -max
exp10 0.75
exp10 0x1.348e45573a1dd72cp+8
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
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
exp10 0x1p-600
exp10 -0x1p-600
exp10 0x1p-10000
exp10 -0x1p-10000
exp10 0x2.688268p+4
exp10 0x2.68826cp+4
exp10 -0x2.5ee064p+4
exp10 -0x2.5ee06p+4
exp10 0x1.34413509f79fep+8
exp10 0x1.34413509f79ffp+8
exp10 -0x1.33a7146f72a42p+8
exp10 -0x1.33a7146f72a41p+8
exp10 0x1.34413509f79fef2f625b0205a88p+8 xfail:ibm128-libgcc
exp10 0x1.34413509f79fef2f625b0205a9p+8 xfail:ibm128-libgcc
exp10 -0x1.23b2b470ae9318183ba772361cp+8 xfail-rounding:ibm128-libgcc
exp10 -0x1.23b2b470ae9318183ba772361b8p+8 xfail-rounding:ibm128-libgcc
exp10 0x1.34413509f79fef3p+12
exp10 0x1.34413509f79fef32p+12
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
exp10 -0x1.343793004f503232p+12
exp10 -0x1.343793004f50323p+12
exp10 -0x1.343c6405237810b2p+12
exp10 -0x1.343c6405237810bp+12
exp10 0x1.34413509f79fef311f12b35816f9p+12
exp10 0x1.34413509f79fef311f12b35816fap+12
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
exp10 -0x1.343793004f503231a589bac27c39p+12
exp10 -0x1.343793004f503231a589bac27c38p+12
# the next value generates larger error bounds on x86_64 (binary32)
exp10 -0xa.6f431p+0
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
Implement C23 exp2m1, exp10m1 C23 adds various <math.h> function families originally defined in TS 18661-4. Add the exp2m1 and exp10m1 functions (exp2(x)-1 and exp10(x)-1, like expm1). As with other such functions, these use type-generic templates that could be replaced with faster and more accurate type-specific implementations in future. Test inputs are copied from those for expm1, plus some additions close to the overflow threshold (copied from exp2 and exp10) and also some near the underflow threshold. exp2m1 has the unusual property of having an input (M_MAX_EXP) where whether the function overflows (under IEEE semantics) depends on the rounding mode. Although these could reasonably be XFAILed in the testsuite (as we do in some cases for arguments very close to a function's overflow threshold when an error of a few ulps in the implementation can result in the implementation not agreeing with an ideal one on whether overflow takes place - the testsuite isn't smart enough to handle this automatically), since these functions aren't required to be correctly rounding, I made the implementation check for and handle this case specially. The Makefile ordering expected by lint-makefiles for the new functions is a bit peculiar, but I implemented it in this patch so that the test passes; I don't know why log2 also needed moving in one Makefile variable setting when it didn't in my previous patches, but the failure showed a different place was expected for that function as well. The powerpc64le IFUNC setup seems not to be as self-contained as one might hope; it shouldn't be necessary to add IFUNCs for new functions such as these simply to get them building, but without setting up IFUNCs for the new functions, there were undefined references to __GI___expm1f128 (that IFUNC machinery results in no such function being defined, but doesn't stop include/math.h from doing the redirection resulting in the exp2m1f128 and exp10m1f128 implementations expecting to call it). Tested for x86_64 and x86, and with build-many-glibcs.py.
2024-06-17 16:31:49 +00:00
exp10m1 0
exp10m1 -0
exp10m1 1
exp10m1 0.75
exp10m1 2
exp10m1 3
exp10m1 4
exp10m1 5
exp10m1 10
exp10m1 15
exp10m1 20
exp10m1 25
exp10m1 30
exp10m1 35
exp10m1 40
exp10m1 50.0
exp10m1 60
exp10m1 70
exp10m1 80
exp10m1 90
exp10m1 100
exp10m1 127.0
exp10m1 500.0
exp10m1 11356.25
exp10m1 -10.0
exp10m1 -16.0
exp10m1 -17.0
exp10m1 -18.0
exp10m1 -36.0
exp10m1 -37.0
exp10m1 -38.0
exp10m1 -44.0
exp10m1 -45.0
exp10m1 -46.0
exp10m1 -73.0
exp10m1 -74.0
exp10m1 -75.0
exp10m1 -78.0
exp10m1 -79.0
exp10m1 -80.0
exp10m1 -100.0
exp10m1 -1000.0
exp10m1 -10000.0
exp10m1 -100000.0
exp10m1 100000.0
exp10m1 max
exp10m1 -max
exp10m1 0x1p-2
exp10m1 -0x1p-2
exp10m1 0x1p-10
exp10m1 -0x1p-10
exp10m1 0x1p-20
exp10m1 -0x1p-20
exp10m1 0x1p-29
exp10m1 -0x1p-29
exp10m1 0x1p-32
exp10m1 -0x1p-32
exp10m1 0x1p-50
exp10m1 -0x1p-50
exp10m1 0x1p-64
exp10m1 -0x1p-64
exp10m1 0x1p-100
exp10m1 -0x1p-100
exp10m1 0x1p-600
exp10m1 -0x1p-600
exp10m1 0x1p-10000
exp10m1 -0x1p-10000
exp10m1 0xe.4152ac57cd1ea7ap-60
exp10m1 0x6.660247486aed8p-4
exp10m1 0x6.289a78p-4
exp10m1 0x6.1b4d318238d4a2a8p-4
exp10m1 0x5.fb8dc64e91a74p-4
exp10m1 0x3.735f497c4e67535cp-4
exp10m1 -0x7.d6c50b469d404p+0
exp10m1 0x4.857de8p+4
exp10m1 0x5.dfeb68p-4
exp10m1 0x4.0000000000000028p-16384
exp10m1 0x5.8b911eb6733469c8p-4
exp10m1 0x5.a343df0d680099a7a1a873a751a8p-4
exp10m1 min
exp10m1 -min
exp10m1 min_subnorm
exp10m1 -min_subnorm
exp10m1 0x2.688268p+4
exp10m1 0x2.68826cp+4
exp10m1 0x1.34413509f79fep+8
exp10m1 0x1.34413509f79ffp+8
exp10m1 0x1.34413509f79fef2f625b0205a88p+8 xfail:ibm128-libgcc
exp10m1 0x1.34413509f79fef2f625b0205a9p+8 xfail:ibm128-libgcc
exp10m1 0x1.34413509f79fef3p+12
exp10m1 0x1.34413509f79fef32p+12
exp10m1 0x1.34413509f79fef311f12b35816f9p+12
exp10m1 0x1.34413509f79fef311f12b35816fap+12
exp10m1 0x1p-128
exp10m1 0x1p-1024
exp10m1 0x1p-16384
exp10m1 -0x1p-128
exp10m1 -0x1p-1024
exp10m1 -0x1p-16384
# the next values yield large errors on x86_64 for binary32
exp10m1 0x1.e4fb5ap-2
exp10m1 0x1.cc3352p-2
exp10m1 0x1.c8a6e6p-2
exp10m1 -0x1.c03a7ep-8
# the next values yield large errors on x86_64 for binary64
exp10m1 0x1.e880c5bafbd41p-2
exp10m1 0x1.ce521eafe0f21p-2
exp10m1 0x1.ce21fffa5aed8p-2
exp10m1 -0x1.bcb951df89248p-15
# the next values yield large errors on x86_64 for intel96
exp10m1 0x2.6882b807049f54ap-4
exp10m1 -0x6.f6469fc524a1de1p-12
exp10m1 0x2.cf6c5a8ec5919c0cp-4
exp10m1 0x2.d08614068c3c5514p-4
exp10m1 0x2.c7fd02fd98797bf4p-4
exp10m1 -0x6.f36b2669aee2d2e8p-12
exp10m1 0x2.c83d897086a4e644p-4
exp10m1 0x2.b47fd78c73d7fa7cp-4
# the next values yield large errors on x86_64 for binary128
exp10m1 0xb.2ee9062818e91afe8e80fae1818p-4
exp10m1 0xb.2e822db54f357c3f65ad743758bp-4
exp10m1 0xb.2edd92a794cbc6f81f5f4f82c14p-4
exp10m1 0xb.2eca344f0d4f0af54bdbd5974858p-4
Implement C23 exp2m1, exp10m1 C23 adds various <math.h> function families originally defined in TS 18661-4. Add the exp2m1 and exp10m1 functions (exp2(x)-1 and exp10(x)-1, like expm1). As with other such functions, these use type-generic templates that could be replaced with faster and more accurate type-specific implementations in future. Test inputs are copied from those for expm1, plus some additions close to the overflow threshold (copied from exp2 and exp10) and also some near the underflow threshold. exp2m1 has the unusual property of having an input (M_MAX_EXP) where whether the function overflows (under IEEE semantics) depends on the rounding mode. Although these could reasonably be XFAILed in the testsuite (as we do in some cases for arguments very close to a function's overflow threshold when an error of a few ulps in the implementation can result in the implementation not agreeing with an ideal one on whether overflow takes place - the testsuite isn't smart enough to handle this automatically), since these functions aren't required to be correctly rounding, I made the implementation check for and handle this case specially. The Makefile ordering expected by lint-makefiles for the new functions is a bit peculiar, but I implemented it in this patch so that the test passes; I don't know why log2 also needed moving in one Makefile variable setting when it didn't in my previous patches, but the failure showed a different place was expected for that function as well. The powerpc64le IFUNC setup seems not to be as self-contained as one might hope; it shouldn't be necessary to add IFUNCs for new functions such as these simply to get them building, but without setting up IFUNCs for the new functions, there were undefined references to __GI___expm1f128 (that IFUNC machinery results in no such function being defined, but doesn't stop include/math.h from doing the redirection resulting in the exp2m1f128 and exp10m1f128 implementations expecting to call it). Tested for x86_64 and x86, and with build-many-glibcs.py.
2024-06-17 16:31:49 +00:00
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-14 22:00:12 +00: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
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
exp2 0x1p-600
exp2 -0x1p-600
exp2 0x1p-10000
exp2 -0x1p-10000
exp2 0x7.fffff8p+4
exp2 0x8.00001p+4
exp2 -0x7.e00008p+4
exp2 -0x7.dffff8p+4
exp2 0x3.ffffffffffffep+8
exp2 0x4.0000000000004p+8
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
exp2 -0x3.fe00000000002p+8
exp2 -0x3.fdffffffffffep+8
exp2 0x3.fffffffffffffffa3aae26b51fp+8 xfail-rounding:ibm128-libgcc
exp2 0x3.fffffffffffffffa3aae26b52p+8 xfail-rounding:ibm128-libgcc
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
exp2 -0x3.c9000000000000000000000001p+8
exp2 -0x3.c8ffffffffffffffffffffffffp+8
exp2 0x3.fffffffffffffffcp+12
exp2 0x4.0000000000000008p+12
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
exp2 -0x3.ffe0000000000004p+12
exp2 -0x3.ffdffffffffffffcp+12
exp2 -0x3.fff0000000000004p+12
exp2 -0x3.ffeffffffffffffcp+12
exp2 0x3.fffffffffffffffffffffffffffep+12
exp2 0x4.0000000000000000000000000004p+12
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
exp2 -0x3.ffe0000000000000000000000002p+12
exp2 -0x3.ffdffffffffffffffffffffffffep+12
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
Implement C23 exp2m1, exp10m1 C23 adds various <math.h> function families originally defined in TS 18661-4. Add the exp2m1 and exp10m1 functions (exp2(x)-1 and exp10(x)-1, like expm1). As with other such functions, these use type-generic templates that could be replaced with faster and more accurate type-specific implementations in future. Test inputs are copied from those for expm1, plus some additions close to the overflow threshold (copied from exp2 and exp10) and also some near the underflow threshold. exp2m1 has the unusual property of having an input (M_MAX_EXP) where whether the function overflows (under IEEE semantics) depends on the rounding mode. Although these could reasonably be XFAILed in the testsuite (as we do in some cases for arguments very close to a function's overflow threshold when an error of a few ulps in the implementation can result in the implementation not agreeing with an ideal one on whether overflow takes place - the testsuite isn't smart enough to handle this automatically), since these functions aren't required to be correctly rounding, I made the implementation check for and handle this case specially. The Makefile ordering expected by lint-makefiles for the new functions is a bit peculiar, but I implemented it in this patch so that the test passes; I don't know why log2 also needed moving in one Makefile variable setting when it didn't in my previous patches, but the failure showed a different place was expected for that function as well. The powerpc64le IFUNC setup seems not to be as self-contained as one might hope; it shouldn't be necessary to add IFUNCs for new functions such as these simply to get them building, but without setting up IFUNCs for the new functions, there were undefined references to __GI___expm1f128 (that IFUNC machinery results in no such function being defined, but doesn't stop include/math.h from doing the redirection resulting in the exp2m1f128 and exp10m1f128 implementations expecting to call it). Tested for x86_64 and x86, and with build-many-glibcs.py.
2024-06-17 16:31:49 +00:00
exp2m1 0
exp2m1 -0
exp2m1 1
exp2m1 0.75
exp2m1 2
exp2m1 3
exp2m1 4
exp2m1 5
exp2m1 10
exp2m1 15
exp2m1 20
exp2m1 25
exp2m1 30
exp2m1 35
exp2m1 40
exp2m1 50.0
exp2m1 60
exp2m1 70
exp2m1 80
exp2m1 90
exp2m1 100
exp2m1 127.0
exp2m1 500.0
exp2m1 11356.25
exp2m1 -10.0
exp2m1 -16.0
exp2m1 -17.0
exp2m1 -18.0
exp2m1 -36.0
exp2m1 -37.0
exp2m1 -38.0
exp2m1 -44.0
exp2m1 -45.0
exp2m1 -46.0
exp2m1 -73.0
exp2m1 -74.0
exp2m1 -75.0
exp2m1 -78.0
exp2m1 -79.0
exp2m1 -80.0
exp2m1 -100.0
exp2m1 -1000.0
exp2m1 -10000.0
exp2m1 -100000.0
exp2m1 100000.0
exp2m1 max
exp2m1 -max
exp2m1 0x1p-2
exp2m1 -0x1p-2
exp2m1 0x1p-10
exp2m1 -0x1p-10
exp2m1 0x1p-20
exp2m1 -0x1p-20
exp2m1 0x1p-29
exp2m1 -0x1p-29
exp2m1 0x1p-32
exp2m1 -0x1p-32
exp2m1 0x1p-50
exp2m1 -0x1p-50
exp2m1 0x1p-64
exp2m1 -0x1p-64
exp2m1 0x1p-100
exp2m1 -0x1p-100
exp2m1 0x1p-600
exp2m1 -0x1p-600
exp2m1 0x1p-10000
exp2m1 -0x1p-10000
exp2m1 0xe.4152ac57cd1ea7ap-60
exp2m1 0x6.660247486aed8p-4
exp2m1 0x6.289a78p-4
exp2m1 0x6.1b4d318238d4a2a8p-4
exp2m1 0x5.fb8dc64e91a74p-4
exp2m1 0x3.735f497c4e67535cp-4
exp2m1 -0x7.d6c50b469d404p+0
exp2m1 0x4.857de8p+4
exp2m1 0x5.dfeb68p-4
exp2m1 0x4.0000000000000028p-16384
exp2m1 0x5.8b911eb6733469c8p-4
exp2m1 0x5.a343df0d680099a7a1a873a751a8p-4
exp2m1 min
exp2m1 -min
exp2m1 min_subnorm
exp2m1 -min_subnorm
exp2m1 128
exp2m1 0x7.fffff8p+4
exp2m1 0x8.00001p+4
exp2m1 0x3.ffffffffffffep+8
exp2m1 0x4.0000000000004p+8
exp2m1 0x3.fffffffffffffffa3aae26b51fp+8 xfail-rounding:ibm128-libgcc
exp2m1 0x3.fffffffffffffffa3aae26b52p+8 xfail-rounding:ibm128-libgcc
exp2m1 0x3.fffffffffffffffcp+12
exp2m1 0x4.0000000000000008p+12
exp2m1 0x3.fffffffffffffffffffffffffffep+12
exp2m1 0x4.0000000000000000000000000004p+12
exp2m1 0x1p-125
exp2m1 0x1p-1021
exp2m1 0x1p-16381
exp2m1 -0x1p-125
exp2m1 -0x1p-1021
exp2m1 -0x1p-16381
# the next values yield large errors on x86_64 for binary32
exp2m1 0x1.9cac28p-1
exp2m1 -0x1.715546p-15
exp2m1 0x1.fffffep-1
exp2m1 -0x1.720d9ap-8
# the next values yield large errors on x86_64 for binary64
exp2m1 0x1.d047583a6c6dp-1
exp2m1 0x1.fff7be96c5276p-1
exp2m1 -0x1.715bd8586d057p-12
exp2m1 0x1.ffffb5c6996fp-1
# the next values yield large errors on x86_64 for intel96
exp2m1 0x9.58009dd25960a7bp-4
exp2m1 -0x1.7159454d13d4e3fap-12
exp2m1 0x9.5a4e825121e5782p-4
exp2m1 0x9.3e34e79efaa18cfp-4
exp2m1 0x9.3754a635820f937p-4
exp2m1 -0x1.71573dd150de9ccap-8
exp2m1 0x9.3d27303441ac81fp-4
exp2m1 0x8.fe7f91d947a1cfdp-4
# the next values yield large errors on x86_64 for binary128
exp2m1 0x9.1217d12087d76b2ca347683e4b5p-4
exp2m1 0x8.80db492a604297e1a3816aeec568p-4
exp2m1 0x8.872e307510a80e501665a37c218p-4
exp2m1 0x9.10b9251f0cc9bdc81d6ab13bb74p-4
Implement C23 exp2m1, exp10m1 C23 adds various <math.h> function families originally defined in TS 18661-4. Add the exp2m1 and exp10m1 functions (exp2(x)-1 and exp10(x)-1, like expm1). As with other such functions, these use type-generic templates that could be replaced with faster and more accurate type-specific implementations in future. Test inputs are copied from those for expm1, plus some additions close to the overflow threshold (copied from exp2 and exp10) and also some near the underflow threshold. exp2m1 has the unusual property of having an input (M_MAX_EXP) where whether the function overflows (under IEEE semantics) depends on the rounding mode. Although these could reasonably be XFAILed in the testsuite (as we do in some cases for arguments very close to a function's overflow threshold when an error of a few ulps in the implementation can result in the implementation not agreeing with an ideal one on whether overflow takes place - the testsuite isn't smart enough to handle this automatically), since these functions aren't required to be correctly rounding, I made the implementation check for and handle this case specially. The Makefile ordering expected by lint-makefiles for the new functions is a bit peculiar, but I implemented it in this patch so that the test passes; I don't know why log2 also needed moving in one Makefile variable setting when it didn't in my previous patches, but the failure showed a different place was expected for that function as well. The powerpc64le IFUNC setup seems not to be as self-contained as one might hope; it shouldn't be necessary to add IFUNCs for new functions such as these simply to get them building, but without setting up IFUNCs for the new functions, there were undefined references to __GI___expm1f128 (that IFUNC machinery results in no such function being defined, but doesn't stop include/math.h from doing the redirection resulting in the exp2m1f128 and exp10m1f128 implementations expecting to call it). Tested for x86_64 and x86, and with build-many-glibcs.py.
2024-06-17 16:31:49 +00:00
expm1 0
expm1 -0 no-mathvec
expm1 1
expm1 0.75
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
expm1 2
expm1 3
expm1 4
expm1 5
expm1 10
expm1 15
expm1 20
expm1 25
expm1 30
expm1 35
expm1 40
expm1 50.0
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
expm1 60
expm1 70
expm1 80
expm1 90
expm1 100
expm1 127.0
expm1 500.0
expm1 11356.25
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
expm1 100000.0
expm1 max
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 13:36:10 +00: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
Improve test coverage of real libm functions [a-e]*. This patch improves test coverage of the real libm functions [a-e]*, ensuring that special cases and ranges of input values of potential significance (such as close to overflow and underflow thresholds) are more systematically covered. This is a followup to <https://sourceware.org/ml/libc-alpha/2013-12/msg00757.html> which covered [a-c]* (however, I found more weaknesses in the coverage of those functions when preparing this patch, hence the additional tests being added for them here). Addition of a test for acosh (-qNaN) is temporarily deferred, to be included as part of a fix for bug 19032 which was discovered in the course of adding these tests (and which illustrates the use of testing -qNaN as well as +qNaN as input even to functions for which the sign of a NaN isn't meant to be significant). Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, atan, atan2, atanh, cbrt, cos, cosh, erf, erfc, exp, exp10, exp2 and expm1. * math/auto-libm-test-out: Regenerated. * math/libm-test.inc (acos_test_data): Add more tests. (asin_test_data): Likewise. (asinh_test_data): Likewise. (atan_test_data): Likewise. (atanh_test_data): Likewise. (atan2_test_data): Likewise. (cbrt_test_data): Likewise. (ceil_test_data): Likewise. (copysign_test_data): Likewise. (cos_test_data): Likewise. (cosh_test_data): Likewise. (erf_test_data): Likewise. (erfc_test_data): Likewise. (exp_test_data): Likewise. (exp10_test_data): Likewise. (exp2_test_data): Likewise. (expm1_test_data): Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Update.
2015-09-30 18:06:02 +00:00
expm1 0x1p-600
expm1 -0x1p-600
expm1 0x1p-10000
expm1 -0x1p-10000 no-mathvec
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-22 21:06:19 +00:00
expm1 0x4.0000000000000028p-16384
# the next value generates larger error bounds on x86_64 (ldbl-96)
expm1 0x5.8b911eb6733469c8p-4
# the next value generates larger error bounds on x86_64 (binary128)
expm1 0x5.a343df0d680099a7a1a873a751a8p-4
2015-06-22 21:06:19 +00:00
expm1 min
expm1 -min
2015-06-22 21:06:19 +00:00
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-18 21:48:51 +00: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
Add narrowing fma functions This patch adds the narrowing fused multiply-add functions from TS 18661-1 / TS 18661-3 / C2X to glibc's libm: ffma, ffmal, dfmal, f32fmaf64, f32fmaf32x, f32xfmaf64 for all configurations; f32fmaf64x, f32fmaf128, f64fmaf64x, f64fmaf128, f32xfmaf64x, f32xfmaf128, f64xfmaf128 for configurations with _Float64x and _Float128; __f32fmaieee128 and __f64fmaieee128 aliases in the powerpc64le case (for calls to ffmal and dfmal when long double is IEEE binary128). Corresponding tgmath.h macro support is also added. The changes are mostly similar to those for the other narrowing functions previously added, especially that for sqrt, so the description of those generally applies to this patch as well. As with sqrt, I reused the same test inputs in auto-libm-test-in as for non-narrowing fma rather than adding extra or separate inputs for narrowing fma. The tests in libm-test-narrow-fma.inc also follow those for non-narrowing fma. The non-narrowing fma has a known bug (bug 6801) that it does not set errno on errors (overflow, underflow, Inf * 0, Inf - Inf). Rather than fixing this or having narrowing fma check for errors when non-narrowing does not (complicating the cases when narrowing fma can otherwise be an alias for a non-narrowing function), this patch does not attempt to check for errors from narrowing fma and set errno; the CHECK_NARROW_FMA macro is still present, but as a placeholder that does nothing, and this missing errno setting is considered to be covered by the existing bug rather than needing a separate open bug. missing-errno annotations are duly added to many of the auto-libm-test-in test inputs for fma. This completes adding all the new functions from TS 18661-1 to glibc, so will be followed by corresponding stdc-predef.h changes to define __STDC_IEC_60559_BFP__ and __STDC_IEC_60559_COMPLEX__, as the support for TS 18661-1 will be at a similar level to that for C standard floating-point facilities up to C11 (pragmas not implemented, but library functions done). (There are still further changes to be done to implement changes to the types of fromfp functions from N2548.) Tested as followed: natively with the full glibc testsuite for x86_64 (GCC 11, 7, 6) and x86 (GCC 11); with build-many-glibcs.py with GCC 11, 7 and 6; cross testing of math/ tests for powerpc64le, powerpc32 hard float, mips64 (all three ABIs, both hard and soft float). The different GCC versions are to cover the different cases in tgmath.h and tgmath.h tests properly (GCC 6 has _Float* only as typedefs in glibc headers, GCC 7 has proper _Float* support, GCC 8 adds __builtin_tgmath).
2021-09-22 21:25:31 +00:00
fma 0 0 max xfail-rounding:ibm128-libgcc missing-errno
fma 0 1 1
fma 1 0 1
fma 0 1 2
fma 1 0 2
Add narrowing fma functions This patch adds the narrowing fused multiply-add functions from TS 18661-1 / TS 18661-3 / C2X to glibc's libm: ffma, ffmal, dfmal, f32fmaf64, f32fmaf32x, f32xfmaf64 for all configurations; f32fmaf64x, f32fmaf128, f64fmaf64x, f64fmaf128, f32xfmaf64x, f32xfmaf128, f64xfmaf128 for configurations with _Float64x and _Float128; __f32fmaieee128 and __f64fmaieee128 aliases in the powerpc64le case (for calls to ffmal and dfmal when long double is IEEE binary128). Corresponding tgmath.h macro support is also added. The changes are mostly similar to those for the other narrowing functions previously added, especially that for sqrt, so the description of those generally applies to this patch as well. As with sqrt, I reused the same test inputs in auto-libm-test-in as for non-narrowing fma rather than adding extra or separate inputs for narrowing fma. The tests in libm-test-narrow-fma.inc also follow those for non-narrowing fma. The non-narrowing fma has a known bug (bug 6801) that it does not set errno on errors (overflow, underflow, Inf * 0, Inf - Inf). Rather than fixing this or having narrowing fma check for errors when non-narrowing does not (complicating the cases when narrowing fma can otherwise be an alias for a non-narrowing function), this patch does not attempt to check for errors from narrowing fma and set errno; the CHECK_NARROW_FMA macro is still present, but as a placeholder that does nothing, and this missing errno setting is considered to be covered by the existing bug rather than needing a separate open bug. missing-errno annotations are duly added to many of the auto-libm-test-in test inputs for fma. This completes adding all the new functions from TS 18661-1 to glibc, so will be followed by corresponding stdc-predef.h changes to define __STDC_IEC_60559_BFP__ and __STDC_IEC_60559_COMPLEX__, as the support for TS 18661-1 will be at a similar level to that for C standard floating-point facilities up to C11 (pragmas not implemented, but library functions done). (There are still further changes to be done to implement changes to the types of fromfp functions from N2548.) Tested as followed: natively with the full glibc testsuite for x86_64 (GCC 11, 7, 6) and x86 (GCC 11); with build-many-glibcs.py with GCC 11, 7 and 6; cross testing of math/ tests for powerpc64le, powerpc32 hard float, mips64 (all three ABIs, both hard and soft float). The different GCC versions are to cover the different cases in tgmath.h and tgmath.h tests properly (GCC 6 has _Float* only as typedefs in glibc headers, GCC 7 has proper _Float* support, GCC 8 adds __builtin_tgmath).
2021-09-22 21:25:31 +00:00
fma 0 1 max xfail-rounding:ibm128-libgcc missing-errno
fma 1 0 max xfail-rounding:ibm128-libgcc missing-errno
Add narrowing fma functions This patch adds the narrowing fused multiply-add functions from TS 18661-1 / TS 18661-3 / C2X to glibc's libm: ffma, ffmal, dfmal, f32fmaf64, f32fmaf32x, f32xfmaf64 for all configurations; f32fmaf64x, f32fmaf128, f64fmaf64x, f64fmaf128, f32xfmaf64x, f32xfmaf128, f64xfmaf128 for configurations with _Float64x and _Float128; __f32fmaieee128 and __f64fmaieee128 aliases in the powerpc64le case (for calls to ffmal and dfmal when long double is IEEE binary128). Corresponding tgmath.h macro support is also added. The changes are mostly similar to those for the other narrowing functions previously added, especially that for sqrt, so the description of those generally applies to this patch as well. As with sqrt, I reused the same test inputs in auto-libm-test-in as for non-narrowing fma rather than adding extra or separate inputs for narrowing fma. The tests in libm-test-narrow-fma.inc also follow those for non-narrowing fma. The non-narrowing fma has a known bug (bug 6801) that it does not set errno on errors (overflow, underflow, Inf * 0, Inf - Inf). Rather than fixing this or having narrowing fma check for errors when non-narrowing does not (complicating the cases when narrowing fma can otherwise be an alias for a non-narrowing function), this patch does not attempt to check for errors from narrowing fma and set errno; the CHECK_NARROW_FMA macro is still present, but as a placeholder that does nothing, and this missing errno setting is considered to be covered by the existing bug rather than needing a separate open bug. missing-errno annotations are duly added to many of the auto-libm-test-in test inputs for fma. This completes adding all the new functions from TS 18661-1 to glibc, so will be followed by corresponding stdc-predef.h changes to define __STDC_IEC_60559_BFP__ and __STDC_IEC_60559_COMPLEX__, as the support for TS 18661-1 will be at a similar level to that for C standard floating-point facilities up to C11 (pragmas not implemented, but library functions done). (There are still further changes to be done to implement changes to the types of fromfp functions from N2548.) Tested as followed: natively with the full glibc testsuite for x86_64 (GCC 11, 7, 6) and x86 (GCC 11); with build-many-glibcs.py with GCC 11, 7 and 6; cross testing of math/ tests for powerpc64le, powerpc32 hard float, mips64 (all three ABIs, both hard and soft float). The different GCC versions are to cover the different cases in tgmath.h and tgmath.h tests properly (GCC 6 has _Float* only as typedefs in glibc headers, GCC 7 has proper _Float* support, GCC 8 adds __builtin_tgmath).
2021-09-22 21:25:31 +00:00
# Bug 6801: errno setting may be missing. This applies to both plain
# and narrowing fma, and is only commented here once.
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-18 21:48:51 +00:00
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
Implement proper fmal for ldbl-128ibm (bug 13304). ldbl-128ibm had an implementation of fmal that just did (x * y) + z in most cases, with no attempt at actually being a fused operation. This patch replaces it with a genuine fused operation. It is not necessarily correctly rounding, but should produce a result at least as accurate as the long double arithmetic operations in libgcc, which I think is all that can reasonably be expected for such a non-IEEE format where arithmetic is approximate rather than rounded according to any particular rule for determining the exact result. Like the libgcc arithmetic, it may produce spurious overflow and underflow results, and it falls back to the libgcc multiplication in the case of (finite, finite, zero). This concludes the fixes for bug 13304; any subsequently found fma issues should go in separate Bugzilla bugs. Various other pieces of bug 13304 were fixed in past releases over the past several years. Tested for powerpc. [BZ #13304] * sysdeps/ieee754/ldbl-128ibm/s_fmal.c: Include <fenv.h>, <float.h>, <math_private.h> and <stdlib.h>. (add_split): New function. (mul_split): Likewise. (ext_val): New typedef. (store_ext_val): New function. (mul_ext_val): New function. (compare): New function. (add_split_ext): New function. (__fmal): After checking for Inf, NaN and zero, compute result as an exact sum of scaled double values in round-to-nearest before adding those up and adjusting for other rounding modes. * math/auto-libm-test-in: Remove xfail-rounding:ldbl-128ibm from tests of fma. * math/auto-libm-test-out: Regenerated.
2016-05-19 20:10:56 +00:00
fma max max min missing-errno
fma max max -min missing-errno
fma max -max min missing-errno
fma max -max -min missing-errno
fma -max max min missing-errno
fma -max max -min missing-errno
fma -max -max min missing-errno
fma -max -max -min missing-errno
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-18 21:48:51 +00:00
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
Add narrowing fma functions This patch adds the narrowing fused multiply-add functions from TS 18661-1 / TS 18661-3 / C2X to glibc's libm: ffma, ffmal, dfmal, f32fmaf64, f32fmaf32x, f32xfmaf64 for all configurations; f32fmaf64x, f32fmaf128, f64fmaf64x, f64fmaf128, f32xfmaf64x, f32xfmaf128, f64xfmaf128 for configurations with _Float64x and _Float128; __f32fmaieee128 and __f64fmaieee128 aliases in the powerpc64le case (for calls to ffmal and dfmal when long double is IEEE binary128). Corresponding tgmath.h macro support is also added. The changes are mostly similar to those for the other narrowing functions previously added, especially that for sqrt, so the description of those generally applies to this patch as well. As with sqrt, I reused the same test inputs in auto-libm-test-in as for non-narrowing fma rather than adding extra or separate inputs for narrowing fma. The tests in libm-test-narrow-fma.inc also follow those for non-narrowing fma. The non-narrowing fma has a known bug (bug 6801) that it does not set errno on errors (overflow, underflow, Inf * 0, Inf - Inf). Rather than fixing this or having narrowing fma check for errors when non-narrowing does not (complicating the cases when narrowing fma can otherwise be an alias for a non-narrowing function), this patch does not attempt to check for errors from narrowing fma and set errno; the CHECK_NARROW_FMA macro is still present, but as a placeholder that does nothing, and this missing errno setting is considered to be covered by the existing bug rather than needing a separate open bug. missing-errno annotations are duly added to many of the auto-libm-test-in test inputs for fma. This completes adding all the new functions from TS 18661-1 to glibc, so will be followed by corresponding stdc-predef.h changes to define __STDC_IEC_60559_BFP__ and __STDC_IEC_60559_COMPLEX__, as the support for TS 18661-1 will be at a similar level to that for C standard floating-point facilities up to C11 (pragmas not implemented, but library functions done). (There are still further changes to be done to implement changes to the types of fromfp functions from N2548.) Tested as followed: natively with the full glibc testsuite for x86_64 (GCC 11, 7, 6) and x86 (GCC 11); with build-many-glibcs.py with GCC 11, 7 and 6; cross testing of math/ tests for powerpc64le, powerpc32 hard float, mips64 (all three ABIs, both hard and soft float). The different GCC versions are to cover the different cases in tgmath.h and tgmath.h tests properly (GCC 6 has _Float* only as typedefs in glibc headers, GCC 7 has proper _Float* support, GCC 8 adds __builtin_tgmath).
2021-09-22 21:25:31 +00:00
fma 0x1p-149 -0x1p-149 0x1p-126 missing-underflow:arg-ibm128
fma 0x1p-149 0x1p-149 -0x1p-126 missing-underflow:arg-ibm128
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-18 21:48:51 +00:00
fma 0x1p-149 -0x1p-149 -0x1p-126
Add narrowing fma functions This patch adds the narrowing fused multiply-add functions from TS 18661-1 / TS 18661-3 / C2X to glibc's libm: ffma, ffmal, dfmal, f32fmaf64, f32fmaf32x, f32xfmaf64 for all configurations; f32fmaf64x, f32fmaf128, f64fmaf64x, f64fmaf128, f32xfmaf64x, f32xfmaf128, f64xfmaf128 for configurations with _Float64x and _Float128; __f32fmaieee128 and __f64fmaieee128 aliases in the powerpc64le case (for calls to ffmal and dfmal when long double is IEEE binary128). Corresponding tgmath.h macro support is also added. The changes are mostly similar to those for the other narrowing functions previously added, especially that for sqrt, so the description of those generally applies to this patch as well. As with sqrt, I reused the same test inputs in auto-libm-test-in as for non-narrowing fma rather than adding extra or separate inputs for narrowing fma. The tests in libm-test-narrow-fma.inc also follow those for non-narrowing fma. The non-narrowing fma has a known bug (bug 6801) that it does not set errno on errors (overflow, underflow, Inf * 0, Inf - Inf). Rather than fixing this or having narrowing fma check for errors when non-narrowing does not (complicating the cases when narrowing fma can otherwise be an alias for a non-narrowing function), this patch does not attempt to check for errors from narrowing fma and set errno; the CHECK_NARROW_FMA macro is still present, but as a placeholder that does nothing, and this missing errno setting is considered to be covered by the existing bug rather than needing a separate open bug. missing-errno annotations are duly added to many of the auto-libm-test-in test inputs for fma. This completes adding all the new functions from TS 18661-1 to glibc, so will be followed by corresponding stdc-predef.h changes to define __STDC_IEC_60559_BFP__ and __STDC_IEC_60559_COMPLEX__, as the support for TS 18661-1 will be at a similar level to that for C standard floating-point facilities up to C11 (pragmas not implemented, but library functions done). (There are still further changes to be done to implement changes to the types of fromfp functions from N2548.) Tested as followed: natively with the full glibc testsuite for x86_64 (GCC 11, 7, 6) and x86 (GCC 11); with build-many-glibcs.py with GCC 11, 7 and 6; cross testing of math/ tests for powerpc64le, powerpc32 hard float, mips64 (all three ABIs, both hard and soft float). The different GCC versions are to cover the different cases in tgmath.h and tgmath.h tests properly (GCC 6 has _Float* only as typedefs in glibc headers, GCC 7 has proper _Float* support, GCC 8 adds __builtin_tgmath).
2021-09-22 21:25:31 +00:00
fma 0x1p-149 0x1p-149 0x0.fffffep-126 missing-underflow:arg-ibm128
fma 0x1p-149 -0x1p-149 0x0.fffffep-126 missing-underflow:arg-ibm128
fma 0x1p-149 0x1p-149 -0x0.fffffep-126 missing-underflow:arg-ibm128
fma 0x1p-149 -0x1p-149 -0x0.fffffep-126 missing-underflow:arg-ibm128
fma 0x1p-149 0x1p-149 0x1p-149 missing-underflow:arg-ibm128
fma 0x1p-149 -0x1p-149 0x1p-149 missing-errno missing-underflow:arg-ibm128
fma 0x1p-149 0x1p-149 -0x1p-149 missing-errno missing-underflow:arg-ibm128
fma 0x1p-149 -0x1p-149 -0x1p-149 missing-underflow:arg-ibm128
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-18 21:48:51 +00:00
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
Add narrowing fma functions This patch adds the narrowing fused multiply-add functions from TS 18661-1 / TS 18661-3 / C2X to glibc's libm: ffma, ffmal, dfmal, f32fmaf64, f32fmaf32x, f32xfmaf64 for all configurations; f32fmaf64x, f32fmaf128, f64fmaf64x, f64fmaf128, f32xfmaf64x, f32xfmaf128, f64xfmaf128 for configurations with _Float64x and _Float128; __f32fmaieee128 and __f64fmaieee128 aliases in the powerpc64le case (for calls to ffmal and dfmal when long double is IEEE binary128). Corresponding tgmath.h macro support is also added. The changes are mostly similar to those for the other narrowing functions previously added, especially that for sqrt, so the description of those generally applies to this patch as well. As with sqrt, I reused the same test inputs in auto-libm-test-in as for non-narrowing fma rather than adding extra or separate inputs for narrowing fma. The tests in libm-test-narrow-fma.inc also follow those for non-narrowing fma. The non-narrowing fma has a known bug (bug 6801) that it does not set errno on errors (overflow, underflow, Inf * 0, Inf - Inf). Rather than fixing this or having narrowing fma check for errors when non-narrowing does not (complicating the cases when narrowing fma can otherwise be an alias for a non-narrowing function), this patch does not attempt to check for errors from narrowing fma and set errno; the CHECK_NARROW_FMA macro is still present, but as a placeholder that does nothing, and this missing errno setting is considered to be covered by the existing bug rather than needing a separate open bug. missing-errno annotations are duly added to many of the auto-libm-test-in test inputs for fma. This completes adding all the new functions from TS 18661-1 to glibc, so will be followed by corresponding stdc-predef.h changes to define __STDC_IEC_60559_BFP__ and __STDC_IEC_60559_COMPLEX__, as the support for TS 18661-1 will be at a similar level to that for C standard floating-point facilities up to C11 (pragmas not implemented, but library functions done). (There are still further changes to be done to implement changes to the types of fromfp functions from N2548.) Tested as followed: natively with the full glibc testsuite for x86_64 (GCC 11, 7, 6) and x86 (GCC 11); with build-many-glibcs.py with GCC 11, 7 and 6; cross testing of math/ tests for powerpc64le, powerpc32 hard float, mips64 (all three ABIs, both hard and soft float). The different GCC versions are to cover the different cases in tgmath.h and tgmath.h tests properly (GCC 6 has _Float* only as typedefs in glibc headers, GCC 7 has proper _Float* support, GCC 8 adds __builtin_tgmath).
2021-09-22 21:25:31 +00:00
fma 0x1.deadbeef2feedp+900 0x0.deadbeef2feedp-1022 -0x1.a05f8c01a4bfbp-122 missing-errno
fma 0x1.fffffffffffffp+1023 0x1.001p+0 -0x1.fffffffffffffp+1023 missing-errno
fma -0x1.fffffffffffffp+1023 0x1.fffffffffffffp+0 0x1.fffffffffffffp+1023 missing-errno
fma 0x1.fffffffffffffp+1023 2.0 -0x1.fffffffffffffp+1023 missing-errno
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-18 21:48:51 +00:00
fma 0x1.6a09e667f3bccp-538 0x1.6a09e667f3bccp-538 0.0 missing-errno
Add narrowing fma functions This patch adds the narrowing fused multiply-add functions from TS 18661-1 / TS 18661-3 / C2X to glibc's libm: ffma, ffmal, dfmal, f32fmaf64, f32fmaf32x, f32xfmaf64 for all configurations; f32fmaf64x, f32fmaf128, f64fmaf64x, f64fmaf128, f32xfmaf64x, f32xfmaf128, f64xfmaf128 for configurations with _Float64x and _Float128; __f32fmaieee128 and __f64fmaieee128 aliases in the powerpc64le case (for calls to ffmal and dfmal when long double is IEEE binary128). Corresponding tgmath.h macro support is also added. The changes are mostly similar to those for the other narrowing functions previously added, especially that for sqrt, so the description of those generally applies to this patch as well. As with sqrt, I reused the same test inputs in auto-libm-test-in as for non-narrowing fma rather than adding extra or separate inputs for narrowing fma. The tests in libm-test-narrow-fma.inc also follow those for non-narrowing fma. The non-narrowing fma has a known bug (bug 6801) that it does not set errno on errors (overflow, underflow, Inf * 0, Inf - Inf). Rather than fixing this or having narrowing fma check for errors when non-narrowing does not (complicating the cases when narrowing fma can otherwise be an alias for a non-narrowing function), this patch does not attempt to check for errors from narrowing fma and set errno; the CHECK_NARROW_FMA macro is still present, but as a placeholder that does nothing, and this missing errno setting is considered to be covered by the existing bug rather than needing a separate open bug. missing-errno annotations are duly added to many of the auto-libm-test-in test inputs for fma. This completes adding all the new functions from TS 18661-1 to glibc, so will be followed by corresponding stdc-predef.h changes to define __STDC_IEC_60559_BFP__ and __STDC_IEC_60559_COMPLEX__, as the support for TS 18661-1 will be at a similar level to that for C standard floating-point facilities up to C11 (pragmas not implemented, but library functions done). (There are still further changes to be done to implement changes to the types of fromfp functions from N2548.) Tested as followed: natively with the full glibc testsuite for x86_64 (GCC 11, 7, 6) and x86 (GCC 11); with build-many-glibcs.py with GCC 11, 7 and 6; cross testing of math/ tests for powerpc64le, powerpc32 hard float, mips64 (all three ABIs, both hard and soft float). The different GCC versions are to cover the different cases in tgmath.h and tgmath.h tests properly (GCC 6 has _Float* only as typedefs in glibc headers, GCC 7 has proper _Float* support, GCC 8 adds __builtin_tgmath).
2021-09-22 21:25:31 +00:00
fma 0x1.deadbeef2feedp-495 0x1.deadbeef2feedp-495 -0x1.bf86a5786a574p-989 missing-errno
fma 0x1.deadbeef2feedp-503 0x1.deadbeef2feedp-503 -0x1.bf86a5786a574p-1005 missing-errno
fma 0x1p-537 0x1p-538 0x1p-1074 missing-errno
fma 0x1.7fffff8p-968 0x1p-106 0x0.000001p-1022 missing-errno
fma 0x1.4000004p-967 0x1p-106 0x0.000001p-1022 missing-errno
fma 0x1.4p-967 -0x1p-106 -0x0.000001p-1022 missing-errno
fma -0x1.19cab66d73e17p-959 0x1.c7108a8c5ff51p-107 -0x0.80b0ad65d9b64p-1022 missing-errno
fma -0x1.d2eaed6e8e9d3p-979 -0x1.4e066c62ac9ddp-63 -0x0.9245e6b003454p-1022 missing-errno
fma 0x1.153d650bb9f06p-907 0x1.2d01230d48407p-125 -0x0.b278d5acfc3cp-1022 missing-errno
fma -0x1.fffffffffffffp-711 0x1.fffffffffffffp-275 0x1.fffffe00007ffp-983 missing-errno
fma 0x1.4p-1022 0x1.0000000000002p-1 0x1p-1024 missing-errno
fma -0x1.4p-1022 0x1.0000000000002p-1 -0x1p-1024 missing-errno
fma 0x1.ffffffffffffcp-1022 0x1.0000000000001p-1 0x1p-1074 missing-errno
fma -0x1.ffffffffffffcp-1022 0x1.0000000000001p-1 -0x1p-1074 missing-errno
fma 0x1p-1074 0x1p-1 0x0.fffffffffffffp-1022 missing-errno
fma -0x1p-1074 0x1p-1 -0x0.fffffffffffffp-1022 missing-errno
fma 0x1p-1074 0x1.1p-1 0x0.fffffffffffffp-1022 missing-errno
fma -0x1p-1074 0x1.1p-1 -0x0.fffffffffffffp-1022 missing-errno
fma 0x1p-1074 0x1p-1074 0x1p1023 missing-errno
fma 0x1p-1074 -0x1p-1074 0x1p1023 missing-errno
fma 0x1p-1074 0x1p-1074 -0x1p1023 missing-errno
fma 0x1p-1074 -0x1p-1074 -0x1p1023 missing-errno
fma 0x1p-1074 0x1p-1074 0x1p-1022 missing-errno
fma 0x1p-1074 -0x1p-1074 0x1p-1022 missing-errno
fma 0x1p-1074 0x1p-1074 -0x1p-1022 missing-errno
fma 0x1p-1074 -0x1p-1074 -0x1p-1022 missing-errno
fma 0x1p-1074 0x1p-1074 0x0.fffffffffffffp-1022 missing-errno
fma 0x1p-1074 -0x1p-1074 0x0.fffffffffffffp-1022 missing-errno
fma 0x1p-1074 0x1p-1074 -0x0.fffffffffffffp-1022 missing-errno
fma 0x1p-1074 -0x1p-1074 -0x0.fffffffffffffp-1022 missing-errno
fma 0x1p-1074 0x1p-1074 0x1p-1074 missing-errno
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-18 21:48:51 +00:00
fma 0x1p-1074 -0x1p-1074 0x1p-1074 missing-errno
fma 0x1p-1074 0x1p-1074 -0x1p-1074 missing-errno
Add narrowing fma functions This patch adds the narrowing fused multiply-add functions from TS 18661-1 / TS 18661-3 / C2X to glibc's libm: ffma, ffmal, dfmal, f32fmaf64, f32fmaf32x, f32xfmaf64 for all configurations; f32fmaf64x, f32fmaf128, f64fmaf64x, f64fmaf128, f32xfmaf64x, f32xfmaf128, f64xfmaf128 for configurations with _Float64x and _Float128; __f32fmaieee128 and __f64fmaieee128 aliases in the powerpc64le case (for calls to ffmal and dfmal when long double is IEEE binary128). Corresponding tgmath.h macro support is also added. The changes are mostly similar to those for the other narrowing functions previously added, especially that for sqrt, so the description of those generally applies to this patch as well. As with sqrt, I reused the same test inputs in auto-libm-test-in as for non-narrowing fma rather than adding extra or separate inputs for narrowing fma. The tests in libm-test-narrow-fma.inc also follow those for non-narrowing fma. The non-narrowing fma has a known bug (bug 6801) that it does not set errno on errors (overflow, underflow, Inf * 0, Inf - Inf). Rather than fixing this or having narrowing fma check for errors when non-narrowing does not (complicating the cases when narrowing fma can otherwise be an alias for a non-narrowing function), this patch does not attempt to check for errors from narrowing fma and set errno; the CHECK_NARROW_FMA macro is still present, but as a placeholder that does nothing, and this missing errno setting is considered to be covered by the existing bug rather than needing a separate open bug. missing-errno annotations are duly added to many of the auto-libm-test-in test inputs for fma. This completes adding all the new functions from TS 18661-1 to glibc, so will be followed by corresponding stdc-predef.h changes to define __STDC_IEC_60559_BFP__ and __STDC_IEC_60559_COMPLEX__, as the support for TS 18661-1 will be at a similar level to that for C standard floating-point facilities up to C11 (pragmas not implemented, but library functions done). (There are still further changes to be done to implement changes to the types of fromfp functions from N2548.) Tested as followed: natively with the full glibc testsuite for x86_64 (GCC 11, 7, 6) and x86 (GCC 11); with build-many-glibcs.py with GCC 11, 7 and 6; cross testing of math/ tests for powerpc64le, powerpc32 hard float, mips64 (all three ABIs, both hard and soft float). The different GCC versions are to cover the different cases in tgmath.h and tgmath.h tests properly (GCC 6 has _Float* only as typedefs in glibc headers, GCC 7 has proper _Float* support, GCC 8 adds __builtin_tgmath).
2021-09-22 21:25:31 +00:00
fma 0x1p-1074 -0x1p-1074 -0x1p-1074 missing-errno
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-18 21:48:51 +00:00
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
Add narrowing fma functions This patch adds the narrowing fused multiply-add functions from TS 18661-1 / TS 18661-3 / C2X to glibc's libm: ffma, ffmal, dfmal, f32fmaf64, f32fmaf32x, f32xfmaf64 for all configurations; f32fmaf64x, f32fmaf128, f64fmaf64x, f64fmaf128, f32xfmaf64x, f32xfmaf128, f64xfmaf128 for configurations with _Float64x and _Float128; __f32fmaieee128 and __f64fmaieee128 aliases in the powerpc64le case (for calls to ffmal and dfmal when long double is IEEE binary128). Corresponding tgmath.h macro support is also added. The changes are mostly similar to those for the other narrowing functions previously added, especially that for sqrt, so the description of those generally applies to this patch as well. As with sqrt, I reused the same test inputs in auto-libm-test-in as for non-narrowing fma rather than adding extra or separate inputs for narrowing fma. The tests in libm-test-narrow-fma.inc also follow those for non-narrowing fma. The non-narrowing fma has a known bug (bug 6801) that it does not set errno on errors (overflow, underflow, Inf * 0, Inf - Inf). Rather than fixing this or having narrowing fma check for errors when non-narrowing does not (complicating the cases when narrowing fma can otherwise be an alias for a non-narrowing function), this patch does not attempt to check for errors from narrowing fma and set errno; the CHECK_NARROW_FMA macro is still present, but as a placeholder that does nothing, and this missing errno setting is considered to be covered by the existing bug rather than needing a separate open bug. missing-errno annotations are duly added to many of the auto-libm-test-in test inputs for fma. This completes adding all the new functions from TS 18661-1 to glibc, so will be followed by corresponding stdc-predef.h changes to define __STDC_IEC_60559_BFP__ and __STDC_IEC_60559_COMPLEX__, as the support for TS 18661-1 will be at a similar level to that for C standard floating-point facilities up to C11 (pragmas not implemented, but library functions done). (There are still further changes to be done to implement changes to the types of fromfp functions from N2548.) Tested as followed: natively with the full glibc testsuite for x86_64 (GCC 11, 7, 6) and x86 (GCC 11); with build-many-glibcs.py with GCC 11, 7 and 6; cross testing of math/ tests for powerpc64le, powerpc32 hard float, mips64 (all three ABIs, both hard and soft float). The different GCC versions are to cover the different cases in tgmath.h and tgmath.h tests properly (GCC 6 has _Float* only as typedefs in glibc headers, GCC 7 has proper _Float* support, GCC 8 adds __builtin_tgmath).
2021-09-22 21:25:31 +00:00
fma 0x1.0000000000001p-1022 0x1.0000000000001p-55 0x1p1023 missing-errno
fma 0x1.0000000000001p-1022 -0x1.0000000000001p-55 0x1p1023 missing-errno
fma 0x1.0000000000001p-1022 0x1.0000000000001p-55 -0x1p1023 missing-errno
fma 0x1.0000000000001p-1022 -0x1.0000000000001p-55 -0x1p1023 missing-errno
fma 0x1.0000000000001p-1022 0x1.0000000000001p-55 0x1p970 missing-errno
fma 0x1.0000000000001p-1022 -0x1.0000000000001p-55 0x1p970 missing-errno
fma 0x1.0000000000001p-1022 0x1.0000000000001p-55 -0x1p970 missing-errno
fma 0x1.0000000000001p-1022 -0x1.0000000000001p-55 -0x1p970 missing-errno
fma -0x8.03fcp+3696 0xf.fffffffffffffffp-6140 0x8.3ffffffffffffffp-2450 missing-errno
fma 0x9.fcp+2033 -0x8.000e1f000ff800fp-3613 -0xf.fffffffffffc0ffp-1579 missing-errno
fma 0xc.7fc000003ffffffp-1194 0x8.1e0003fffffffffp+15327 -0x8.fffep+14072 missing-errno
fma -0x8.0001fc000000003p+1798 0xcp-2230 0x8.f7e000000000007p-468 missing-errno
fma 0xc.0000000000007ffp+10130 -0x8.000000000000001p+4430 0xc.07000000001ffffp+14513 missing-errno
fma 0xb.ffffp-4777 0x8.000000fffffffffp-11612 -0x0.3800fff8p-16385 missing-errno
fma 0x1.4p-16382 0x1.0000000000000004p-1 0x1p-16384 missing-errno
fma -0x1.4p-16382 0x1.0000000000000004p-1 -0x1p-16384 missing-errno
fma 0x1.fffffffffffffff8p-16382 0x1.0000000000000002p-1 0x1p-16445 missing-errno
fma -0x1.fffffffffffffff8p-16382 0x1.0000000000000002p-1 -0x1p-16445 missing-errno
fma 0x1p-16445 0x1p-1 0x0.fffffffffffffffep-16382 missing-errno
fma -0x1p-16445 0x1p-1 -0x0.fffffffffffffffep-16382 missing-errno
fma 0x1p-16445 0x1.1p-1 0x0.fffffffffffffffep-16382 missing-errno
fma -0x1p-16445 0x1.1p-1 -0x0.fffffffffffffffep-16382 missing-errno
fma 0x1p-16445 0x1p-16445 0x1p16383 missing-errno
fma 0x1p-16445 -0x1p-16445 0x1p16383 missing-errno
fma 0x1p-16445 0x1p-16445 -0x1p16383 missing-errno
fma 0x1p-16445 -0x1p-16445 -0x1p16383 missing-errno
fma 0x1p-16445 0x1p-16445 0x1p-16382 missing-errno
fma 0x1p-16445 -0x1p-16445 0x1p-16382 missing-errno
fma 0x1p-16445 0x1p-16445 -0x1p-16382 missing-errno
fma 0x1p-16445 -0x1p-16445 -0x1p-16382 missing-errno
fma 0x1p-16445 0x1p-16445 0x0.fffffffffffffffep-16382 missing-errno
fma 0x1p-16445 -0x1p-16445 0x0.fffffffffffffffep-16382 missing-errno
fma 0x1p-16445 0x1p-16445 -0x0.fffffffffffffffep-16382 missing-errno
fma 0x1p-16445 -0x1p-16445 -0x0.fffffffffffffffep-16382 missing-errno
fma 0x1p-16445 0x1p-16445 0x1p-16445 missing-errno
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-18 21:48:51 +00:00
fma 0x1p-16445 -0x1p-16445 0x1p-16445 missing-errno
fma 0x1p-16445 0x1p-16445 -0x1p-16445 missing-errno
Add narrowing fma functions This patch adds the narrowing fused multiply-add functions from TS 18661-1 / TS 18661-3 / C2X to glibc's libm: ffma, ffmal, dfmal, f32fmaf64, f32fmaf32x, f32xfmaf64 for all configurations; f32fmaf64x, f32fmaf128, f64fmaf64x, f64fmaf128, f32xfmaf64x, f32xfmaf128, f64xfmaf128 for configurations with _Float64x and _Float128; __f32fmaieee128 and __f64fmaieee128 aliases in the powerpc64le case (for calls to ffmal and dfmal when long double is IEEE binary128). Corresponding tgmath.h macro support is also added. The changes are mostly similar to those for the other narrowing functions previously added, especially that for sqrt, so the description of those generally applies to this patch as well. As with sqrt, I reused the same test inputs in auto-libm-test-in as for non-narrowing fma rather than adding extra or separate inputs for narrowing fma. The tests in libm-test-narrow-fma.inc also follow those for non-narrowing fma. The non-narrowing fma has a known bug (bug 6801) that it does not set errno on errors (overflow, underflow, Inf * 0, Inf - Inf). Rather than fixing this or having narrowing fma check for errors when non-narrowing does not (complicating the cases when narrowing fma can otherwise be an alias for a non-narrowing function), this patch does not attempt to check for errors from narrowing fma and set errno; the CHECK_NARROW_FMA macro is still present, but as a placeholder that does nothing, and this missing errno setting is considered to be covered by the existing bug rather than needing a separate open bug. missing-errno annotations are duly added to many of the auto-libm-test-in test inputs for fma. This completes adding all the new functions from TS 18661-1 to glibc, so will be followed by corresponding stdc-predef.h changes to define __STDC_IEC_60559_BFP__ and __STDC_IEC_60559_COMPLEX__, as the support for TS 18661-1 will be at a similar level to that for C standard floating-point facilities up to C11 (pragmas not implemented, but library functions done). (There are still further changes to be done to implement changes to the types of fromfp functions from N2548.) Tested as followed: natively with the full glibc testsuite for x86_64 (GCC 11, 7, 6) and x86 (GCC 11); with build-many-glibcs.py with GCC 11, 7 and 6; cross testing of math/ tests for powerpc64le, powerpc32 hard float, mips64 (all three ABIs, both hard and soft float). The different GCC versions are to cover the different cases in tgmath.h and tgmath.h tests properly (GCC 6 has _Float* only as typedefs in glibc headers, GCC 7 has proper _Float* support, GCC 8 adds __builtin_tgmath).
2021-09-22 21:25:31 +00:00
fma 0x1p-16445 -0x1p-16445 -0x1p-16445 missing-errno
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-18 21:48:51 +00:00
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
Add narrowing fma functions This patch adds the narrowing fused multiply-add functions from TS 18661-1 / TS 18661-3 / C2X to glibc's libm: ffma, ffmal, dfmal, f32fmaf64, f32fmaf32x, f32xfmaf64 for all configurations; f32fmaf64x, f32fmaf128, f64fmaf64x, f64fmaf128, f32xfmaf64x, f32xfmaf128, f64xfmaf128 for configurations with _Float64x and _Float128; __f32fmaieee128 and __f64fmaieee128 aliases in the powerpc64le case (for calls to ffmal and dfmal when long double is IEEE binary128). Corresponding tgmath.h macro support is also added. The changes are mostly similar to those for the other narrowing functions previously added, especially that for sqrt, so the description of those generally applies to this patch as well. As with sqrt, I reused the same test inputs in auto-libm-test-in as for non-narrowing fma rather than adding extra or separate inputs for narrowing fma. The tests in libm-test-narrow-fma.inc also follow those for non-narrowing fma. The non-narrowing fma has a known bug (bug 6801) that it does not set errno on errors (overflow, underflow, Inf * 0, Inf - Inf). Rather than fixing this or having narrowing fma check for errors when non-narrowing does not (complicating the cases when narrowing fma can otherwise be an alias for a non-narrowing function), this patch does not attempt to check for errors from narrowing fma and set errno; the CHECK_NARROW_FMA macro is still present, but as a placeholder that does nothing, and this missing errno setting is considered to be covered by the existing bug rather than needing a separate open bug. missing-errno annotations are duly added to many of the auto-libm-test-in test inputs for fma. This completes adding all the new functions from TS 18661-1 to glibc, so will be followed by corresponding stdc-predef.h changes to define __STDC_IEC_60559_BFP__ and __STDC_IEC_60559_COMPLEX__, as the support for TS 18661-1 will be at a similar level to that for C standard floating-point facilities up to C11 (pragmas not implemented, but library functions done). (There are still further changes to be done to implement changes to the types of fromfp functions from N2548.) Tested as followed: natively with the full glibc testsuite for x86_64 (GCC 11, 7, 6) and x86 (GCC 11); with build-many-glibcs.py with GCC 11, 7 and 6; cross testing of math/ tests for powerpc64le, powerpc32 hard float, mips64 (all three ABIs, both hard and soft float). The different GCC versions are to cover the different cases in tgmath.h and tgmath.h tests properly (GCC 6 has _Float* only as typedefs in glibc headers, GCC 7 has proper _Float* support, GCC 8 adds __builtin_tgmath).
2021-09-22 21:25:31 +00:00
fma 0x1.0000000000000002p-16382 0x1.0000000000000002p-66 0x1p16383 missing-errno
fma 0x1.0000000000000002p-16382 -0x1.0000000000000002p-66 0x1p16383 missing-errno
fma 0x1.0000000000000002p-16382 0x1.0000000000000002p-66 -0x1p16383 missing-errno
fma 0x1.0000000000000002p-16382 -0x1.0000000000000002p-66 -0x1p16383 missing-errno
fma 0x1.0000000000000002p-16382 0x1.0000000000000002p-66 0x1p16319 missing-errno
fma 0x1.0000000000000002p-16382 -0x1.0000000000000002p-66 0x1p16319 missing-errno
fma 0x1.0000000000000002p-16382 0x1.0000000000000002p-66 -0x1p16319 missing-errno
fma 0x1.0000000000000002p-16382 -0x1.0000000000000002p-66 -0x1p16319 missing-errno
fma 0x1.bb2de33e02ccbbfa6e245a7c1f71p-2584 -0x1.6b500daf0580d987f1bc0cadfcddp-13777 0x1.613cd91d9fed34b33820e5ab9d8dp-16378 missing-errno
fma -0x1.f949b880cacb0f0c61540105321dp-5954 -0x1.3876cec84b4140f3bd6198731b7ep-10525 -0x0.a5dc1c6cfbc498c54fb0b504bf19p-16382 missing-errno
fma -0x1.0000fffffffffp-16221 0x1.0000001fffff8007fep-239 0x0.ff87ffffffffffffe000003fffffp-16382 missing-errno
fma -0x1.ac79c9376ef447f3827c9e9de008p-2228 -0x1.5ba830022b6139e21fbe7270cad8p-6314 0x1.e8282b6a26bb6a9daf5c8e73e9f9p-8616 missing-errno
fma -0x1.c69749ec574caaa2ab8e97ddb9f3p+2652 0x1.f34235ff9d095449c29b4831b62dp+3311 0x1.fbe4302df23354dbd0c4d3cfe606p+5879 missing-errno
fma -0x1.ca8835fc6ecfb5398625fc891be5p-1686 0x1.621e1972bbe2180e5be9dd7d8df5p-7671 -0x1.7d2d21b73b52cf20dec2a83902a4p-9395 missing-errno
fma -0x1.55cff679ec49c2541fab41fc843ep-11819 0x1.e60e9f464f9e8df0509647c7c971p+12325 0x1.eaa2a7649d765c2f564f7a5beca7p+454 missing-errno
fma 0x1.f0e7b1454908576f2537d863cf9bp+11432 0x1.cdce52f09d4ca76e68706f34b5d5p-1417 -0x1.2e986187c70f146235ea2066e486p+9979 missing-errno
fma 0x1.f102f7da4a57a3a4aab620e29452p-3098 -0x1.cc06a4ff40248f9e2dcc4b6afd84p-11727 0x1.d512a11126b5ac8ed8973b8580c8p-14849 missing-errno
fma -0x1.fc47ac7434b993cd8dcb2b431f25p-3816 0x1.fbc9750da8468852d84558e1db6dp-5773 -0x1.00a98abf783f75c40fe5b7a37d86p-9607 missing-errno
fma 0x1.00000000000007ffffffffffffffp-9045 -0x1.ffffffffffff80000001ffffffffp+4773 -0x1.f8p-4316 missing-errno
fma 0x1.4e922764c90701d4a2f21d01893dp-8683 -0x1.955a12e2d7c9447c27fa022fc865p+212 -0x1.e9634462eaef96528b90b6944578p-8521 missing-errno
fma 0x1.801181509c03bdbef10d6165588cp-15131 0x1.ad86f8e57d3d40bfa8007780af63p-368 -0x1.6e9df0dab1c9f1d7a6043c390741p-15507 missing-errno
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-18 21:48:51 +00:00
fma 0x1.ffffffffffffffp0 0x1.000000000000008p0 -0x1p-1000
Add narrowing fma functions This patch adds the narrowing fused multiply-add functions from TS 18661-1 / TS 18661-3 / C2X to glibc's libm: ffma, ffmal, dfmal, f32fmaf64, f32fmaf32x, f32xfmaf64 for all configurations; f32fmaf64x, f32fmaf128, f64fmaf64x, f64fmaf128, f32xfmaf64x, f32xfmaf128, f64xfmaf128 for configurations with _Float64x and _Float128; __f32fmaieee128 and __f64fmaieee128 aliases in the powerpc64le case (for calls to ffmal and dfmal when long double is IEEE binary128). Corresponding tgmath.h macro support is also added. The changes are mostly similar to those for the other narrowing functions previously added, especially that for sqrt, so the description of those generally applies to this patch as well. As with sqrt, I reused the same test inputs in auto-libm-test-in as for non-narrowing fma rather than adding extra or separate inputs for narrowing fma. The tests in libm-test-narrow-fma.inc also follow those for non-narrowing fma. The non-narrowing fma has a known bug (bug 6801) that it does not set errno on errors (overflow, underflow, Inf * 0, Inf - Inf). Rather than fixing this or having narrowing fma check for errors when non-narrowing does not (complicating the cases when narrowing fma can otherwise be an alias for a non-narrowing function), this patch does not attempt to check for errors from narrowing fma and set errno; the CHECK_NARROW_FMA macro is still present, but as a placeholder that does nothing, and this missing errno setting is considered to be covered by the existing bug rather than needing a separate open bug. missing-errno annotations are duly added to many of the auto-libm-test-in test inputs for fma. This completes adding all the new functions from TS 18661-1 to glibc, so will be followed by corresponding stdc-predef.h changes to define __STDC_IEC_60559_BFP__ and __STDC_IEC_60559_COMPLEX__, as the support for TS 18661-1 will be at a similar level to that for C standard floating-point facilities up to C11 (pragmas not implemented, but library functions done). (There are still further changes to be done to implement changes to the types of fromfp functions from N2548.) Tested as followed: natively with the full glibc testsuite for x86_64 (GCC 11, 7, 6) and x86 (GCC 11); with build-many-glibcs.py with GCC 11, 7 and 6; cross testing of math/ tests for powerpc64le, powerpc32 hard float, mips64 (all three ABIs, both hard and soft float). The different GCC versions are to cover the different cases in tgmath.h and tgmath.h tests properly (GCC 6 has _Float* only as typedefs in glibc headers, GCC 7 has proper _Float* support, GCC 8 adds __builtin_tgmath).
2021-09-22 21:25:31 +00:00
fma 0x1.4p-16382 0x1.0000000000000000000000000002p-1 0x1p-16384 missing-errno
fma -0x1.4p-16382 0x1.0000000000000000000000000002p-1 -0x1p-16384 missing-errno
fma 0x1.fffffffffffffffffffffffffffcp-16382 0x1.0000000000000000000000000001p-1 0x1p-16494 missing-errno
fma -0x1.fffffffffffffffffffffffffffcp-16382 0x1.0000000000000000000000000001p-1 -0x1p-16494 missing-errno
fma 0x1p-16494 0x1p-1 0x0.ffffffffffffffffffffffffffffp-16382 missing-errno
fma -0x1p-16494 0x1p-1 -0x0.ffffffffffffffffffffffffffffp-16382 missing-errno
fma 0x1p-16494 0x1.1p-1 0x0.ffffffffffffffffffffffffffffp-16382 missing-errno
fma -0x1p-16494 0x1.1p-1 -0x0.ffffffffffffffffffffffffffffp-16382 missing-errno
fma 0x1p-16494 0x1p-16494 0x1p16383 missing-errno
fma 0x1p-16494 -0x1p-16494 0x1p16383 missing-errno
fma 0x1p-16494 0x1p-16494 -0x1p16383 missing-errno
fma 0x1p-16494 -0x1p-16494 -0x1p16383 missing-errno
fma 0x1p-16494 0x1p-16494 0x1p-16382 missing-errno
fma 0x1p-16494 -0x1p-16494 0x1p-16382 missing-errno
fma 0x1p-16494 0x1p-16494 -0x1p-16382 missing-errno
fma 0x1p-16494 -0x1p-16494 -0x1p-16382 missing-errno
fma 0x1p-16494 0x1p-16494 0x0.ffffffffffffffffffffffffffffp-16382 missing-errno
fma 0x1p-16494 -0x1p-16494 0x0.ffffffffffffffffffffffffffffp-16382 missing-errno
fma 0x1p-16494 0x1p-16494 -0x0.ffffffffffffffffffffffffffffp-16382 missing-errno
fma 0x1p-16494 -0x1p-16494 -0x0.ffffffffffffffffffffffffffffp-16382 missing-errno
fma 0x1p-16494 0x1p-16494 0x1p-16494 missing-errno
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-18 21:48:51 +00:00
fma 0x1p-16494 -0x1p-16494 0x1p-16494 missing-errno
fma 0x1p-16494 0x1p-16494 -0x1p-16494 missing-errno
Add narrowing fma functions This patch adds the narrowing fused multiply-add functions from TS 18661-1 / TS 18661-3 / C2X to glibc's libm: ffma, ffmal, dfmal, f32fmaf64, f32fmaf32x, f32xfmaf64 for all configurations; f32fmaf64x, f32fmaf128, f64fmaf64x, f64fmaf128, f32xfmaf64x, f32xfmaf128, f64xfmaf128 for configurations with _Float64x and _Float128; __f32fmaieee128 and __f64fmaieee128 aliases in the powerpc64le case (for calls to ffmal and dfmal when long double is IEEE binary128). Corresponding tgmath.h macro support is also added. The changes are mostly similar to those for the other narrowing functions previously added, especially that for sqrt, so the description of those generally applies to this patch as well. As with sqrt, I reused the same test inputs in auto-libm-test-in as for non-narrowing fma rather than adding extra or separate inputs for narrowing fma. The tests in libm-test-narrow-fma.inc also follow those for non-narrowing fma. The non-narrowing fma has a known bug (bug 6801) that it does not set errno on errors (overflow, underflow, Inf * 0, Inf - Inf). Rather than fixing this or having narrowing fma check for errors when non-narrowing does not (complicating the cases when narrowing fma can otherwise be an alias for a non-narrowing function), this patch does not attempt to check for errors from narrowing fma and set errno; the CHECK_NARROW_FMA macro is still present, but as a placeholder that does nothing, and this missing errno setting is considered to be covered by the existing bug rather than needing a separate open bug. missing-errno annotations are duly added to many of the auto-libm-test-in test inputs for fma. This completes adding all the new functions from TS 18661-1 to glibc, so will be followed by corresponding stdc-predef.h changes to define __STDC_IEC_60559_BFP__ and __STDC_IEC_60559_COMPLEX__, as the support for TS 18661-1 will be at a similar level to that for C standard floating-point facilities up to C11 (pragmas not implemented, but library functions done). (There are still further changes to be done to implement changes to the types of fromfp functions from N2548.) Tested as followed: natively with the full glibc testsuite for x86_64 (GCC 11, 7, 6) and x86 (GCC 11); with build-many-glibcs.py with GCC 11, 7 and 6; cross testing of math/ tests for powerpc64le, powerpc32 hard float, mips64 (all three ABIs, both hard and soft float). The different GCC versions are to cover the different cases in tgmath.h and tgmath.h tests properly (GCC 6 has _Float* only as typedefs in glibc headers, GCC 7 has proper _Float* support, GCC 8 adds __builtin_tgmath).
2021-09-22 21:25:31 +00:00
fma 0x1p-16494 -0x1p-16494 -0x1p-16494 missing-errno
fma 0x0.ffffffffffffffffffffffffffff8p0 0x0.ffffffffffffffffffffffffffff8p0 -0x0.ffffffffffffffffffffffffffffp0 missing-errno
fma 0x0.ffffffffffffffffffffffffffff8p0 -0x0.ffffffffffffffffffffffffffff8p0 0x0.ffffffffffffffffffffffffffffp0 missing-errno
fma -0x0.ffffffffffffffffffffffffffff8p0 0x0.ffffffffffffffffffffffffffff8p0 0x0.ffffffffffffffffffffffffffffp0 missing-errno
fma -0x0.ffffffffffffffffffffffffffff8p0 -0x0.ffffffffffffffffffffffffffff8p0 -0x0.ffffffffffffffffffffffffffffp0 missing-errno
fma 0x1.0000000000000000000000000001p-16382 0x1.0000000000000000000000000001p-66 0x1p16383 missing-errno
fma 0x1.0000000000000000000000000001p-16382 -0x1.0000000000000000000000000001p-66 0x1p16383 missing-errno
fma 0x1.0000000000000000000000000001p-16382 0x1.0000000000000000000000000001p-66 -0x1p16383 missing-errno
fma 0x1.0000000000000000000000000001p-16382 -0x1.0000000000000000000000000001p-66 -0x1p16383 missing-errno
fma 0x1.0000000000000000000000000001p-16382 0x1.0000000000000000000000000001p-66 0x1p16319 missing-errno
fma 0x1.0000000000000000000000000001p-16382 -0x1.0000000000000000000000000001p-66 0x1p16319 missing-errno
fma 0x1.0000000000000000000000000001p-16382 0x1.0000000000000000000000000001p-66 -0x1p16319 missing-errno
fma 0x1.0000000000000000000000000001p-16382 -0x1.0000000000000000000000000001p-66 -0x1p16319 missing-errno
fma 0x1.fffffep-126 0x1.fffffep25 0x1.fffffep127 missing-errno xfail-rounding:ibm128-libgcc
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-14 17:15:06 +00:00
fma 0x1.fffffep-126 -0x1.fffffep25 0x1.fffffep127
fma 0x1.fffffep-126 0x1.fffffep25 -0x1.fffffep127
Add narrowing fma functions This patch adds the narrowing fused multiply-add functions from TS 18661-1 / TS 18661-3 / C2X to glibc's libm: ffma, ffmal, dfmal, f32fmaf64, f32fmaf32x, f32xfmaf64 for all configurations; f32fmaf64x, f32fmaf128, f64fmaf64x, f64fmaf128, f32xfmaf64x, f32xfmaf128, f64xfmaf128 for configurations with _Float64x and _Float128; __f32fmaieee128 and __f64fmaieee128 aliases in the powerpc64le case (for calls to ffmal and dfmal when long double is IEEE binary128). Corresponding tgmath.h macro support is also added. The changes are mostly similar to those for the other narrowing functions previously added, especially that for sqrt, so the description of those generally applies to this patch as well. As with sqrt, I reused the same test inputs in auto-libm-test-in as for non-narrowing fma rather than adding extra or separate inputs for narrowing fma. The tests in libm-test-narrow-fma.inc also follow those for non-narrowing fma. The non-narrowing fma has a known bug (bug 6801) that it does not set errno on errors (overflow, underflow, Inf * 0, Inf - Inf). Rather than fixing this or having narrowing fma check for errors when non-narrowing does not (complicating the cases when narrowing fma can otherwise be an alias for a non-narrowing function), this patch does not attempt to check for errors from narrowing fma and set errno; the CHECK_NARROW_FMA macro is still present, but as a placeholder that does nothing, and this missing errno setting is considered to be covered by the existing bug rather than needing a separate open bug. missing-errno annotations are duly added to many of the auto-libm-test-in test inputs for fma. This completes adding all the new functions from TS 18661-1 to glibc, so will be followed by corresponding stdc-predef.h changes to define __STDC_IEC_60559_BFP__ and __STDC_IEC_60559_COMPLEX__, as the support for TS 18661-1 will be at a similar level to that for C standard floating-point facilities up to C11 (pragmas not implemented, but library functions done). (There are still further changes to be done to implement changes to the types of fromfp functions from N2548.) Tested as followed: natively with the full glibc testsuite for x86_64 (GCC 11, 7, 6) and x86 (GCC 11); with build-many-glibcs.py with GCC 11, 7 and 6; cross testing of math/ tests for powerpc64le, powerpc32 hard float, mips64 (all three ABIs, both hard and soft float). The different GCC versions are to cover the different cases in tgmath.h and tgmath.h tests properly (GCC 6 has _Float* only as typedefs in glibc headers, GCC 7 has proper _Float* support, GCC 8 adds __builtin_tgmath).
2021-09-22 21:25:31 +00:00
fma 0x1.fffffep-126 -0x1.fffffep25 -0x1.fffffep127 missing-errno xfail-rounding:ibm128-libgcc
fma 0x1.fffffffffffffp-1022 0x1.fffffffffffffp54 0x1.fffffffffffffp1023 missing-errno xfail-rounding:ibm128-libgcc
fma 0x1.fffffffffffffp-1022 -0x1.fffffffffffffp54 0x1.fffffffffffffp1023 missing-errno
fma 0x1.fffffffffffffp-1022 0x1.fffffffffffffp54 -0x1.fffffffffffffp1023 missing-errno
fma 0x1.fffffffffffffp-1022 -0x1.fffffffffffffp54 -0x1.fffffffffffffp1023 missing-errno xfail-rounding:ibm128-libgcc
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-14 17:15:06 +00:00
fma 0x1.fffffffffffffffep-16382 0x1.fffffffffffffffep65 0x1.fffffffffffffffep16383 missing-errno
Add narrowing fma functions This patch adds the narrowing fused multiply-add functions from TS 18661-1 / TS 18661-3 / C2X to glibc's libm: ffma, ffmal, dfmal, f32fmaf64, f32fmaf32x, f32xfmaf64 for all configurations; f32fmaf64x, f32fmaf128, f64fmaf64x, f64fmaf128, f32xfmaf64x, f32xfmaf128, f64xfmaf128 for configurations with _Float64x and _Float128; __f32fmaieee128 and __f64fmaieee128 aliases in the powerpc64le case (for calls to ffmal and dfmal when long double is IEEE binary128). Corresponding tgmath.h macro support is also added. The changes are mostly similar to those for the other narrowing functions previously added, especially that for sqrt, so the description of those generally applies to this patch as well. As with sqrt, I reused the same test inputs in auto-libm-test-in as for non-narrowing fma rather than adding extra or separate inputs for narrowing fma. The tests in libm-test-narrow-fma.inc also follow those for non-narrowing fma. The non-narrowing fma has a known bug (bug 6801) that it does not set errno on errors (overflow, underflow, Inf * 0, Inf - Inf). Rather than fixing this or having narrowing fma check for errors when non-narrowing does not (complicating the cases when narrowing fma can otherwise be an alias for a non-narrowing function), this patch does not attempt to check for errors from narrowing fma and set errno; the CHECK_NARROW_FMA macro is still present, but as a placeholder that does nothing, and this missing errno setting is considered to be covered by the existing bug rather than needing a separate open bug. missing-errno annotations are duly added to many of the auto-libm-test-in test inputs for fma. This completes adding all the new functions from TS 18661-1 to glibc, so will be followed by corresponding stdc-predef.h changes to define __STDC_IEC_60559_BFP__ and __STDC_IEC_60559_COMPLEX__, as the support for TS 18661-1 will be at a similar level to that for C standard floating-point facilities up to C11 (pragmas not implemented, but library functions done). (There are still further changes to be done to implement changes to the types of fromfp functions from N2548.) Tested as followed: natively with the full glibc testsuite for x86_64 (GCC 11, 7, 6) and x86 (GCC 11); with build-many-glibcs.py with GCC 11, 7 and 6; cross testing of math/ tests for powerpc64le, powerpc32 hard float, mips64 (all three ABIs, both hard and soft float). The different GCC versions are to cover the different cases in tgmath.h and tgmath.h tests properly (GCC 6 has _Float* only as typedefs in glibc headers, GCC 7 has proper _Float* support, GCC 8 adds __builtin_tgmath).
2021-09-22 21:25:31 +00:00
fma 0x1.fffffffffffffffep-16382 -0x1.fffffffffffffffep65 0x1.fffffffffffffffep16383 missing-errno
fma 0x1.fffffffffffffffep-16382 0x1.fffffffffffffffep65 -0x1.fffffffffffffffep16383 missing-errno
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-14 17:15:06 +00:00
fma 0x1.fffffffffffffffep-16382 -0x1.fffffffffffffffep65 -0x1.fffffffffffffffep16383 missing-errno
fma 0x1.ffffffffffffffffffffffffffffp-16382 0x1.ffffffffffffffffffffffffffffp114 0x1.ffffffffffffffffffffffffffffp16383 missing-errno
Add narrowing fma functions This patch adds the narrowing fused multiply-add functions from TS 18661-1 / TS 18661-3 / C2X to glibc's libm: ffma, ffmal, dfmal, f32fmaf64, f32fmaf32x, f32xfmaf64 for all configurations; f32fmaf64x, f32fmaf128, f64fmaf64x, f64fmaf128, f32xfmaf64x, f32xfmaf128, f64xfmaf128 for configurations with _Float64x and _Float128; __f32fmaieee128 and __f64fmaieee128 aliases in the powerpc64le case (for calls to ffmal and dfmal when long double is IEEE binary128). Corresponding tgmath.h macro support is also added. The changes are mostly similar to those for the other narrowing functions previously added, especially that for sqrt, so the description of those generally applies to this patch as well. As with sqrt, I reused the same test inputs in auto-libm-test-in as for non-narrowing fma rather than adding extra or separate inputs for narrowing fma. The tests in libm-test-narrow-fma.inc also follow those for non-narrowing fma. The non-narrowing fma has a known bug (bug 6801) that it does not set errno on errors (overflow, underflow, Inf * 0, Inf - Inf). Rather than fixing this or having narrowing fma check for errors when non-narrowing does not (complicating the cases when narrowing fma can otherwise be an alias for a non-narrowing function), this patch does not attempt to check for errors from narrowing fma and set errno; the CHECK_NARROW_FMA macro is still present, but as a placeholder that does nothing, and this missing errno setting is considered to be covered by the existing bug rather than needing a separate open bug. missing-errno annotations are duly added to many of the auto-libm-test-in test inputs for fma. This completes adding all the new functions from TS 18661-1 to glibc, so will be followed by corresponding stdc-predef.h changes to define __STDC_IEC_60559_BFP__ and __STDC_IEC_60559_COMPLEX__, as the support for TS 18661-1 will be at a similar level to that for C standard floating-point facilities up to C11 (pragmas not implemented, but library functions done). (There are still further changes to be done to implement changes to the types of fromfp functions from N2548.) Tested as followed: natively with the full glibc testsuite for x86_64 (GCC 11, 7, 6) and x86 (GCC 11); with build-many-glibcs.py with GCC 11, 7 and 6; cross testing of math/ tests for powerpc64le, powerpc32 hard float, mips64 (all three ABIs, both hard and soft float). The different GCC versions are to cover the different cases in tgmath.h and tgmath.h tests properly (GCC 6 has _Float* only as typedefs in glibc headers, GCC 7 has proper _Float* support, GCC 8 adds __builtin_tgmath).
2021-09-22 21:25:31 +00:00
fma 0x1.ffffffffffffffffffffffffffffp-16382 -0x1.ffffffffffffffffffffffffffffp114 0x1.ffffffffffffffffffffffffffffp16383 missing-errno
fma 0x1.ffffffffffffffffffffffffffffp-16382 0x1.ffffffffffffffffffffffffffffp114 -0x1.ffffffffffffffffffffffffffffp16383 missing-errno
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-14 17:15:06 +00:00
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
hypot 0x1.234566p-126 0x1.234566p-126
hypot 0x3p1021 0x4p1021
hypot 0x1p+0 0x0.3ep-1022
hypot 0x3p16381 0x4p16381
hypot 0x1p-149 0x1p-149
hypot 0x1p-1074 0x1p-1074
hypot 0x1p-16445 0x1p-16445
hypot 0x1p-16494 0x1p-16494
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
hypot 0x0.ffffffp-16382 0x0.fp-16386
hypot 0 min
hypot 0 min_subnorm
hypot 0 -min
hypot 0 -min_subnorm
hypot min 0
hypot min_subnorm 0
hypot -min 0
hypot -min_subnorm 0
hypot min min
hypot min_subnorm min_subnorm
hypot min min_subnorm
hypot 0x1.fp127 0x1.fp127
hypot 0x1.fp1023 0x1.fp1023
hypot 0x1.fp16383 0x1.fp16383 xfail-rounding:ibm128-libgcc
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-24 23:43:57 +00:00
hypot 0x1p-127 0x1p-149
hypot 0x1p-1023 0x1p-1074
hypot 0x1p-970 0x1p-1074
hypot 0x1p-16383 0x1p-16445
hypot 0x1p-16384 0x1p-16446
hypot 0x1p-16383 0x1p-16494
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-24 23:43:57 +00:00
hypot -0x1.fa7deap+0 0x1.a761bab383ac8p+0
# the following inputs yield an error of 1 ulp on x86_64 in binary32
hypot -0x1.003222p-20 -0x1.6a2d58p-32
j0 -1.0
j0 0.0
j0 -0
j0 min
j0 -min
j0 min_subnorm
j0 -min_subnorm
j0 0x1p-5
j0 0x1p-10
j0 0x1p-15
j0 0x1p-20
j0 0x1p-25
j0 0x1p-30
j0 0x1p-35
j0 0x1p-40
j0 0x1p-45
j0 0x1p-50
j0 0x1p-55
j0 0x1p-60
j0 0x1p-100
j0 0x1p-600
j0 0x1p-10000
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
# the next values yield large errors for binary32
# (cf BZ #27670 for the xfail entry)
j0 0x2.602774p+0 xfail-rounding:ibm128-libgcc
j0 0x1.04c39cp+6
j0 0x1.4b7066p+7
# the next value exercises the flt-32 code path for x >= 2^127
j0 0x8.2f4ecp+124
# the next values gave an error > 9 ulps with glibc-2.34 (flt-32)
j0 0x1.31ec02p+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.31e716p+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.31f51ep+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.320226p+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.31ed76p+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.32083cp+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.32614ep+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.32dc02p+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.32e304p+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.32e00cp+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.32e504p+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.32e12p+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.32dc22p+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.32dc24p+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.32eb18p+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.32fa0cp+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.335806p+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.335a0cp+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.336p+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.336c1cp+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.336336p+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.33712ep+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.339506p+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.33950cp+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.339d06p+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.33b402p+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.33b50ap+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.33c4p+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.33c202p+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.33c702p+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.33c50ap+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.33c312p+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.33c80ap+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.33cb04p+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.33cfp+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.33d1p+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.33d102p+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.33d10cp+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.33d116p+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.33d12cp+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.33d138p+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.33d146p+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.33d15p+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j0 0x1.33d152p+1 xfail:binary64 xfail:intel96 xfail:binary128 xfail:ibm128-libgcc
j1 -1.0
j1 0.0
j1 -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-5
j1 0x1p-10
j1 0x1p-15
j1 0x1p-20
j1 0x1p-25
j1 0x1p-30
j1 0x1p-35
j1 0x1p-40
j1 0x1p-45
j1 0x1p-50
j1 0x1p-55
j1 0x1p-60
j1 0x1p-100
j1 0x1p-600
j1 0x1p-10000
# the next values yield large errors in the binary32 format
# (cf BZ #27670 for the xfail entries)
j1 0x3.ae4b2p+0 xfail-rounding:ibm128-libgcc
j1 0x1.2f28eap+7 xfail-rounding:binary64 xfail-rounding:binary128 xfail-rounding:intel96 xfail-rounding:ibm128-libgcc
j1 0x1.a1d20ap+6 xfail-rounding:binary128 xfail-rounding:intel96 xfail-rounding:ibm128-libgcc
j1 min
j1 -min
j1 min_subnorm
j1 -min_subnorm
# jn (0, x) == j0 (x).
jn 0 -1.0
jn 0 0.0
jn 0 -0
jn 0 min
jn 0 -min
jn 0 min_subnorm
jn 0 -min_subnorm
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
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
jn 1 min
jn 1 -min
jn 1 min_subnorm
jn 1 -min_subnorm
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
jn -1 1
jn -2 1
jn -3 1
jn -4 1
jn -1 -1
jn -2 -1
jn -3 -1
jn -4 -1
jn 10 min
jn 10 -min
jn 10 min_subnorm
jn 10 -min_subnorm
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
# the next value generates larger error bounds on x86_64 (binary32)
lgamma -0x3.ec4298p+0
# Values +/- 10ulp from overflow threshold. (Values very close to
# overflow threshold produce results very close of that threshold,
# where a result inaccurate by a few ulp could differ from the ideal
# result in whether it overflows; +/- 10ulp is sufficient for overflow
# or its absence to be unambiguous under glibc's accuracy standards).
# This also means the ibm128 inputs are XFAILed for binary64 and
# the binary128 inputs for intel96 and m68k96, as too close to the
# threshold.
lgamma 0x3.12be0cp+120
lgamma 0x3.12be6p+120
lgamma 0x5.d53649e2d4674p+1012
lgamma 0x5.d53649e2d46c8p+1012 xfail-rounding:ibm128-libgcc
lgamma 0x5.d53649e2d469dbc1f01e99fd52p+1012 xfail:binary64 xfail-rounding:ibm128-libgcc
lgamma 0x5.d53649e2d469dbc1f01e99fd7cp+1012 xfail:binary64 xfail-rounding:ibm128-libgcc
lgamma 0x5.c6aa645fffef5f5p+16368
lgamma 0x5.c6aa645fffef5ff8p+16368
lgamma 0x5.c6aa645fffef5fa912b9b480f7acp+16368 xfail:intel96 xfail:m68k96
lgamma 0x5.c6aa645fffef5fa912b9b480f8p+16368 xfail:intel96 xfail:m68k96
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-10 22:27:58 +00: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-10 22:27:58 +00: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 binary128 (gen-auto-libm-tests will round these
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-10 22:27:58 +00:00
# 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-10 22:27:58 +00: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 0x1.000002p0
log 0x1.0000000000001p0
log 0x1.0000000000000002p0
log 0x1.000000000000000000000000008p0
log 0x1.0000000000000000000000000001p0
log 0x0.ffffffp0
log 0x0.fffffffffffff8p0
log 0x0.ffffffffffffffffp0
log 0x0.ffffffffffffffffffffffffffcp0
log 0x0.ffffffffffffffffffffffffffff8p0
log min
log min_subnorm
log max
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
# the next value generates larger error bounds on x86_64 (binary64)
log 0x1.d405118796bd8p-1
log10 1
log10 0.1
log10 10.0
log10 100.0
log10 10000.0
log10 e
log10 0.75
log10 0x1.000002p0
log10 0x1.0000000000001p0
log10 0x1.0000000000000002p0
log10 0x1.000000000000000000000000008p0
log10 0x1.0000000000000000000000000001p0
log10 0x0.ffffffp0
log10 0x0.fffffffffffff8p0
log10 0x0.ffffffffffffffffp0
log10 0x0.ffffffffffffffffffffffffffcp0
log10 0x0.ffffffffffffffffffffffffffff8p0
# the next value generates larger error bounds on x86_64 (binary128)
log10 0x1.6a291ea0aa11fb374f1df8b3ac6bp+0
log10 min
log10 min_subnorm
log10 max
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
log10p1 0
log10p1 -0
log10p1 e-1
log10p1 -0.25
log10p1 -0.875
log10p1 0x1p-5
log10p1 0x1p-10
log10p1 0x1p-15
log10p1 0x1p-20
log10p1 0x1p-25
log10p1 0x1p-30
log10p1 0x1p-35
log10p1 0x1p-40
log10p1 0x1p-45
log10p1 0x1p-50
log10p1 0x1p-55
log10p1 0x1p-60
log10p1 0x1p-100
log10p1 0x1p-600
log10p1 0x1p-10000
log10p1 min
log10p1 min_subnorm
log10p1 -min
log10p1 -min_subnorm
log10p1 0x1p10
log10p1 0x1p20
log10p1 0x1p30
log10p1 0x1p50
log10p1 0x1p60
log10p1 0x1p100
log10p1 0x1p1000
log10p1 0x6.a0cf42befce9ed4085ef59254b48p-4
log10p1 max
log10p1 0x1p-125
log10p1 0x1p-1021
log10p1 0x1p-16381
log10p1 -0x1p-125
log10p1 -0x1p-1021
log10p1 -0x1p-16381
log10p1 0x7.2a4368p-4
log10p1 0x6.d3a118p-4
log10p1 0x5.03f228p+0
log10p1 0x7.264963888ac9p-4
log10p1 0x8.786bdp-4
log10p1 0x7.89dc17790eeb4p-4
log10p1 0x9.81ccf8887c24a7bp-4
log10p1 0xa.5028608bd65f38dp-4
log10p1 0x5.bf78873e20a2d468p-4
log10p1 0x7.aa5198p-4
log10p1 0x2.564fap+0
log10p1 0x7.fc242a2235222ef8p-4
log10p1 -0x4.f37d3c9ce0b14bdd86eb157df5d4p-4
log10p1 0x7.2eca50c4d93196362b4f37f6e8dcp-4
log10p1 -0x6.3fef3067427e43dfcde9e48f74bcp-4
log10p1 0x6.af53d00fd2845d4772260ef5adc4p-4
# the next values generate large errors on x86_64 for binary32
log10p1 0x1.ce84ep+0
log10p1 -0x1.c9bc9cp-3
log10p1 0x1.3b8ad4p+106
log10p1 -0x1.2611b2p-8
# the next values generate large errors on x86_64 for binary64
log10p1 -0x1.4c2971893052fp-1
log10p1 -0x1.000196a3d9e18p-2
log10p1 -0x1.26975ba3e6553p-43
log10p1 0x1.00d67bdd93083p+53
# the next values generate large errors on x86_64 for intel96
log10p1 0x4.a486e7fa771f839p-4
log10p1 0x4.f974ef417a9fe778p-4
log10p1 0x5.006dfbf1945a6648p-4
log10p1 0x4.f6e989b93bb1cd78p-4
log10p1 0x4.ab40181dbc47cdfp-4
log10p1 0x5.2876604a22752338p-4
log10p1 0x4.a422197a61a14128p-4
log10p1 0x5.48bb2c181e72e838p-4
# the next values generate large errors on x86_64 for binary128
log10p1 -0x6.eec527c6a8d6e31ca9f0dcdd747cp-4
log10p1 0xc.42dd6485aeceeca7f23b39ad0518p-4
log10p1 0xa.78451e366c2303f4f67b1178e628p-4
log10p1 -0x6.fe3adf062a38696216fa72657104p-4
log1p 0
log1p -0 no-mathvec
log1p e-1
log1p -0.25
log1p -0.875
log1p 0x1p-5
log1p 0x1p-10
log1p 0x1p-15
log1p 0x1p-20
log1p 0x1p-25
log1p 0x1p-30
log1p 0x1p-35
log1p 0x1p-40
log1p 0x1p-45
log1p 0x1p-50
log1p 0x1p-55
log1p 0x1p-60
log1p 0x1p-100
log1p 0x1p-600
log1p 0x1p-10000
log1p min
log1p min_subnorm
log1p -min
log1p -min_subnorm
log1p 0x1p10
log1p 0x1p20
log1p 0x1p30
log1p 0x1p50
log1p 0x1p60
log1p 0x1p100
log1p 0x1p1000
# the next value generates larger error bounds on x86_64 (binary128)
log1p 0x6.a0cf42befce9ed4085ef59254b48p-4
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
log2 0x1.000002p0
log2 0x1.0000000000001p0
log2 0x1.0000000000000002p0
log2 0x1.000000000000000000000000008p0
log2 0x1.0000000000000000000000000001p0
log2 0x0.ffffffp0
log2 0x0.fffffffffffff8p0
log2 0x0.ffffffffffffffffp0
log2 0x0.ffffffffffffffffffffffffffcp0
log2 0x0.ffffffffffffffffffffffffffff8p0
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-24 23:06:28 +00: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
# the next value generates larger error bounds on x86_64 (binary128)
log2 0xb.54170d5cfa8fd72a47d6bda19068p-4
log2 min
log2 min_subnorm
log2 max
log2p1 0
log2p1 -0
log2p1 e-1
log2p1 -0.25
log2p1 -0.875
log2p1 0x1p-5
log2p1 0x1p-10
log2p1 0x1p-15
log2p1 0x1p-20
log2p1 0x1p-25
log2p1 0x1p-30
log2p1 0x1p-35
log2p1 0x1p-40
log2p1 0x1p-45
log2p1 0x1p-50
log2p1 0x1p-55
log2p1 0x1p-60
log2p1 0x1p-100
log2p1 0x1p-600
log2p1 0x1p-10000
log2p1 min
log2p1 min_subnorm
log2p1 -min
log2p1 -min_subnorm
log2p1 0x1p10
log2p1 0x1p20
log2p1 0x1p30
log2p1 0x1p50
log2p1 0x1p60
log2p1 0x1p100
log2p1 0x1p1000
log2p1 0x6.a0cf42befce9ed4085ef59254b48p-4
log2p1 max
# the following inputs yield large errors on x86_64 for binary32
log2p1 0x1.a69b4ap-2
log2p1 -0x1.2516d6p-2
log2p1 -0x1.5ffeaep-15
log2p1 0x1.fa9f4cp+63
# the following inputs yield large errors on x86_64 for binary64
log2p1 0x1.a7b725780ff2cp-2
log2p1 -0x1.2bcacac1db278p-2
log2p1 -0x1.61d589bf42045p-30
log2p1 0x1.f7b1d1fa54e5ep+1023
# the following inputs yield large errors on x86_64 for intel96
log2p1 0x5.dda3a1f4c4020ebp-4
log2p1 0x4.a90a8d35a43eef98p-4
log2p1 0x4.cd0c83636c3eec48p-4
log2p1 0x4.a438707de6d1ba58p-4
log2p1 0x5.843d01be597f38fp-4
log2p1 0x4.a4fa45b26be621b8p-4
log2p1 0x5.86a6205c56dda348p-4
log2p1 0x4.a45c98a3ade2dcb8p-4
# the following inputs yield large errors on x86_64 for binary128
log2p1 -0x7.fff3a57fdd2666bcecba33bd89f4p-4
log2p1 0xf.ffea148f0646fb70b8e8c4dae998p-4
log2p1 -0x7.ffdfd0a8ad0496b2ee0e1c8e382cp-4
log2p1 0x6.a9a5ea3f87fe4bc20f7a0e83cf2cp-4
log2p1 0x7.2a4368p-4
log2p1 0x6.d3a118p-4
log2p1 0x5.03f228p+0
log2p1 0x7.264963888ac9p-4
log2p1 0x8.786bdp-4
log2p1 0x7.89dc17790eeb4p-4
log2p1 0x9.81ccf8887c24a7bp-4
log2p1 0xa.5028608bd65f38dp-4
log2p1 0x5.bf78873e20a2d468p-4
log2p1 0x7.aa5198p-4
log2p1 0x2.564fap+0
log2p1 0x7.fc242a2235222ef8p-4
log2p1 -0x4.f37d3c9ce0b14bdd86eb157df5d4p-4
log2p1 0x7.2eca50c4d93196362b4f37f6e8dcp-4
log2p1 -0x6.3fef3067427e43dfcde9e48f74bcp-4
log2p1 0x6.af53d00fd2845d4772260ef5adc4p-4
Add narrowing multiply functions. This patch adds the narrowing multiply functions from TS 18661-1 to glibc's libm: fmul, fmull, dmull, f32mulf64, f32mulf32x, f32xmulf64 for all configurations; f32mulf64x, f32mulf128, f64mulf64x, f64mulf128, f32xmulf64x, f32xmulf128, f64xmulf128 for configurations with _Float64x and _Float128; __nldbl_dmull for ldbl-opt. The changes are mostly essentially the same as for the narrowing add functions, so the description of those generally applies to this patch as well. f32xmulf64 for i386 cannot use precision control as used for add and subtract, because that would result in double rounding for subnormal results, so that uses round-to-odd with long double intermediate result instead. The soft-fp support involves adding a new FP_TRUNC_COOKED since soft-fp multiplication uses cooked inputs and outputs. Tested for x86_64, x86, mips64 (all three ABIs, both hard and soft float) and powerpc, and with build-many-glibcs.py. * math/Makefile (libm-narrow-fns): Add mul. (libm-test-funcs-narrow): Likewise. * math/Versions (GLIBC_2.28): Add narrowing multiply functions. * math/bits/mathcalls-narrow.h (mul): Use __MATHCALL_NARROW. * math/gen-auto-libm-tests.c (test_functions): Add mul. * math/math-narrow.h (CHECK_NARROW_MUL): New macro. (NARROW_MUL_ROUND_TO_ODD): Likewise. (NARROW_MUL_TRIVIAL): Likewise. * soft-fp/op-common.h (FP_TRUNC_COOKED): Likewise. * sysdeps/ieee754/float128/float128_private.h (__fmull): New macro. (__dmull): Likewise. * sysdeps/ieee754/ldbl-opt/Makefile (libnldbl-calls): Add fmul and dmul. (CFLAGS-nldbl-dmul.c): New variable. (CFLAGS-nldbl-fmul.c): Likewise. * sysdeps/ieee754/ldbl-opt/Versions (GLIBC_2.28): Add __nldbl_dmull. * sysdeps/ieee754/ldbl-opt/nldbl-compat.h (__nldbl_dmull): New prototype. * manual/arith.texi (Misc FP Arithmetic): Document fmul, fmull, dmull, fMmulfN, fMmulfNx, fMxmulfN and fMxmulfNx. * math/auto-libm-test-in: Add tests of mul. * math/auto-libm-test-out-narrow-mul: New generated file. * math/libm-test-narrow-mul.inc: New file. * sysdeps/i386/fpu/s_f32xmulf64.c: Likewise. * sysdeps/ieee754/dbl-64/s_f32xmulf64.c: Likewise. * sysdeps/ieee754/dbl-64/s_fmul.c: Likewise. * sysdeps/ieee754/float128/s_f32mulf128.c: Likewise. * sysdeps/ieee754/float128/s_f64mulf128.c: Likewise. * sysdeps/ieee754/float128/s_f64xmulf128.c: Likewise. * sysdeps/ieee754/ldbl-128/s_dmull.c: Likewise. * sysdeps/ieee754/ldbl-128/s_f64xmulf128.c: Likewise. * sysdeps/ieee754/ldbl-128/s_fmull.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_dmull.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_fmull.c: Likewise. * sysdeps/ieee754/ldbl-96/s_dmull.c: Likewise. * sysdeps/ieee754/ldbl-96/s_fmull.c: Likewise. * sysdeps/ieee754/ldbl-opt/nldbl-dmul.c: Likewise. * sysdeps/ieee754/ldbl-opt/nldbl-fmul.c: Likewise. * sysdeps/ieee754/soft-fp/s_dmull.c: Likewise. * sysdeps/ieee754/soft-fp/s_fmul.c: Likewise. * sysdeps/ieee754/soft-fp/s_fmull.c: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * sysdeps/mach/hurd/i386/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/aarch64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/alpha/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/arm/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/hppa/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/i386/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/ia64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/microblaze/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/nios2/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/riscv/rv64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/sh/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise.
2018-05-16 00:05:28 +00:00
mul 0 0
mul 0 -0
mul -0 0
mul -0 -0
mul max max
mul max -max
mul -max max
mul -max -max
mul min min
mul min -min
mul -min min
mul -min -min
mul min_subnorm min_subnorm
mul min_subnorm -min_subnorm
mul -min_subnorm min_subnorm
mul -min_subnorm -min_subnorm
mul 1 2
mul 1 -2
mul -1 2
mul -1 -2
mul 100.5 0.75
mul 100.5 -0.75
mul -100.5 0.75
mul -100.5 -0.75
# Cases where the product of two values in a wider format is very
# close to half way between two representable values in a narrower
# format, so that double rounding would sometimes yield the wrong
# result. These examples have products of the form
# (2^a + 1)(2^b + 1)/2^(a+b), where a is the width of the narrower
# format, b is greater than the width of the wider format and factors
# have been rearranged between the terms so that both terms do fit
# within the wider format.
# a = 24, b = 54
mul 0x5000005p-24 0xccccccccccccdp-54
# a = 24, b = 65
mul 0x3000003p-24 0xaaaaaaaaaaaaaaabp-65
# a = 24, b = 114
mul 0x5000005p-24 0xcccccccccccccccccccccccccccdp-114
# a = 53, b = 65
mul 0x60000000000003p-53 0xaaaaaaaaaaaaaaabp-65
# a = 53, b = 114
mul 0xa0000000000005p-53 0xcccccccccccccccccccccccccccdp-114
# a = 64, b = 114
mul 0x50000000000000005p-64 0xcccccccccccccccccccccccccccdp-114
# Similar, for double rounding to 64 bit of a product of 53-bit values.
# This product equals 2^64 + 2^11 + 1.
mul 97689974585 188829449
# Cases where there is underflow before rounding (for some format) but
# might not be after rounding, depending on the rounding mode.
mul 0x0.ffffff8p-126 0x1.0000001p0
mul 0x0.ffffff8p-126 -0x1.0000001p0
mul -0x0.ffffff8p-126 0x1.0000001p0
mul -0x0.ffffff8p-126 -0x1.0000001p0
mul 0x0.fffffffffffffcp-1022 0x1.00000000000001p0 missing-underflow:arg-ibm128
mul 0x0.fffffffffffffcp-1022 -0x1.00000000000001p0 missing-underflow:arg-ibm128
mul -0x0.fffffffffffffcp-1022 0x1.00000000000001p0 missing-underflow:arg-ibm128
mul -0x0.fffffffffffffcp-1022 -0x1.00000000000001p0 missing-underflow:arg-ibm128
mul 0x0.ffffffffffffffff8p-16382 0x1.00000000000000001p0 missing-underflow:arg-ibm128
mul 0x0.ffffffffffffffff8p-16382 -0x1.00000000000000001p0 missing-underflow:arg-ibm128
mul -0x0.ffffffffffffffff8p-16382 0x1.00000000000000001p0 missing-underflow:arg-ibm128
mul -0x0.ffffffffffffffff8p-16382 -0x1.00000000000000001p0 missing-underflow:arg-ibm128
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 xfail-rounding:ibm128-libgcc
pow -0 0x1.ffffffffffffffffffffffffff8p+105 xfail-rounding:ibm128-libgcc
pow -0 0x1.ffffffffffffffffffffffffff8p+106 xfail-rounding:ibm128-libgcc
pow -0 0x1.ffffffffffffffffffffffffffffp+112 xfail-rounding:ibm128-libgcc
pow -0 0x1.ffffffffffffffffffffffffffffp+113 xfail-rounding:ibm128-libgcc
# 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 0.5
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 xfail-rounding:ibm128-libgcc
pow -1.0 -0x1.ffffffffffffffffffffffffff8p+105 xfail-rounding:ibm128-libgcc
pow -1.0 -0x1.ffffffffffffffffffffffffff8p+106 xfail-rounding:ibm128-libgcc
pow -1.0 -0x1.ffffffffffffffffffffffffffffp+112 xfail-rounding:ibm128-libgcc
pow -1.0 -0x1.ffffffffffffffffffffffffffffp+113 xfail-rounding:ibm128-libgcc
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 xfail-rounding:ibm128-libgcc
pow -1.0 0x1.ffffffffffffffffffffffffff8p+105 xfail-rounding:ibm128-libgcc
pow -1.0 0x1.ffffffffffffffffffffffffff8p+106 xfail-rounding:ibm128-libgcc
pow -1.0 0x1.ffffffffffffffffffffffffffffp+112 xfail-rounding:ibm128-libgcc
pow -1.0 0x1.ffffffffffffffffffffffffffffp+113 xfail-rounding:ibm128-libgcc
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-23 20:12:33 +00: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
Fix pow missing underflows (bug 18825). Similar to various other bugs in this area, pow 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, thereby concluding the fixes for known bugs with missing underflow exceptions currently filed in Bugzilla. Tested for x86_64, x86, mips64 and powerpc. [BZ #18825] * sysdeps/i386/fpu/i386-math-asm.h (FLT_NARROW_EVAL_UFLOW_NONNAN): New macro. (DBL_NARROW_EVAL_UFLOW_NONNAN): Likewise. (LDBL_CHECK_FORCE_UFLOW_NONNAN): Likewise. * sysdeps/i386/fpu/e_pow.S: Use DEFINE_DBL_MIN. (__ieee754_pow): Use DBL_NARROW_EVAL_UFLOW_NONNAN instead of DBL_NARROW_EVAL, reloading the PIC register as needed. * sysdeps/i386/fpu/e_powf.S: Use DEFINE_FLT_MIN. (__ieee754_powf): Use FLT_NARROW_EVAL_UFLOW_NONNAN instead of FLT_NARROW_EVAL. Use separate return path for case when first argument is NaN. * sysdeps/i386/fpu/e_powl.S: Include <i386-math-asm.h>. Use DEFINE_LDBL_MIN. (__ieee754_powl): Use LDBL_CHECK_FORCE_UFLOW_NONNAN, reloading the PIC register. * sysdeps/ieee754/dbl-64/e_pow.c (__ieee754_pow): Use math_check_force_underflow_nonneg. * sysdeps/ieee754/flt-32/e_powf.c (__ieee754_powf): Force underflow for subnormal result. * sysdeps/ieee754/ldbl-128/e_powl.c (__ieee754_powl): Likewise. * sysdeps/ieee754/ldbl-128ibm/e_powl.c (__ieee754_powl): Use math_check_force_underflow_nonneg. * sysdeps/x86/fpu/powl_helper.c (__powl_helper): Use math_check_force_underflow. * sysdeps/x86_64/fpu/x86_64-math-asm.h (LDBL_CHECK_FORCE_UFLOW_NONNAN): New macro. * sysdeps/x86_64/fpu/e_powl.S: Include <x86_64-math-asm.h>. Use DEFINE_LDBL_MIN. (__ieee754_powl): Use LDBL_CHECK_FORCE_UFLOW_NONNAN. * math/auto-libm-test-in: Add more tests of pow. * math/auto-libm-test-out: Regenerated.
2015-09-25 22:29:10 +00:00
pow 2 -126.125
pow 2 -126.25
pow 2 -126.375
pow 2 -126.5
pow 2 -126.625
pow 2 -126.75
pow 2 -126.875
pow 2 -969.125
pow 2 -969.25
pow 2 -969.375
pow 2 -969.5
pow 2 -969.625
pow 2 -969.75
pow 2 -969.875
pow 2 -1022.125
pow 2 -1022.25
pow 2 -1022.375
pow 2 -1022.5
pow 2 -1022.625
pow 2 -1022.75
pow 2 -1022.875
pow 2 -16382.125
pow 2 -16382.25
pow 2 -16382.375
pow 2 -16382.5
pow 2 -16382.625
pow 2 -16382.75
pow 2 -16382.875
pow 2 -16383.125
pow 2 -16383.25
pow 2 -16383.375
pow 2 -16383.5
pow 2 -16383.625
pow 2 -16383.75
pow 2 -16383.875
pow 0.5 126.125
pow 0.5 126.25
pow 0.5 126.375
pow 0.5 126.5
pow 0.5 126.625
pow 0.5 126.75
pow 0.5 126.875
pow 0.5 969.125
pow 0.5 969.25
pow 0.5 969.375
pow 0.5 969.5
pow 0.5 969.625
pow 0.5 969.75
pow 0.5 969.875
pow 0.5 1022.125
pow 0.5 1022.25
pow 0.5 1022.375
pow 0.5 1022.5
pow 0.5 1022.625
pow 0.5 1022.75
pow 0.5 1022.875
pow 0.5 16382.125
pow 0.5 16382.25
pow 0.5 16382.375
pow 0.5 16382.5
pow 0.5 16382.625
pow 0.5 16382.75
pow 0.5 16382.875
pow 0.5 16383.125
pow 0.5 16383.25
pow 0.5 16383.375
pow 0.5 16383.5
pow 0.5 16383.625
pow 0.5 16383.75
pow 0.5 16383.875
pow 0x1.00001p1 -126
pow -0x1.00002p1 -126
pow 0x1.00003p1 -126
pow -0x1.00004p1 -126
pow 0x1.00005p1 -126
pow -0x1.00006p1 -126
pow 0x1.00007p1 -126
pow 0x1.00001p1 -969
pow -0x1.00002p1 -969
pow 0x1.00003p1 -969
pow -0x1.00004p1 -969
pow 0x1.00005p1 -969
pow -0x1.00006p1 -969
pow 0x1.00007p1 -969
pow 0x1.00001p1 -1022
pow -0x1.00002p1 -1022
pow 0x1.00003p1 -1022
pow -0x1.00004p1 -1022
pow 0x1.00005p1 -1022
pow -0x1.00006p1 -1022
pow 0x1.00007p1 -1022
pow 0x1.00001p1 -16382
pow -0x1.00002p1 -16382
pow 0x1.00003p1 -16382
pow -0x1.00004p1 -16382
pow 0x1.00005p1 -16382
pow -0x1.00006p1 -16382
pow 0x1.00007p1 -16382
pow 0x1.00001p1 -16383
pow -0x1.00002p1 -16383
pow 0x1.00003p1 -16383
pow -0x1.00004p1 -16383
pow 0x1.00005p1 -16383
pow -0x1.00006p1 -16383
pow 0x1.00007p1 -16383
pow 0x0.ffff1p-1 126
pow -0x0.ffff2p-1 126
pow 0x0.ffff3p-1 126
pow -0x0.ffff4p-1 126
pow 0x0.ffff5p-1 126
pow -0x0.ffff6p-1 126
pow 0x0.ffff7p-1 126
pow 0x0.ffff1p-1 969
pow -0x0.ffff2p-1 969
pow 0x0.ffff3p-1 969
pow -0x0.ffff4p-1 969
pow 0x0.ffff5p-1 969
pow -0x0.ffff6p-1 969
pow 0x0.ffff7p-1 969
pow 0x0.ffff1p-1 1022
pow -0x0.ffff2p-1 1022
pow 0x0.ffff3p-1 1022
pow -0x0.ffff4p-1 1022
pow 0x0.ffff5p-1 1022
pow -0x0.ffff6p-1 1022
pow 0x0.ffff7p-1 1022
pow 0x0.ffff1p-1 16382
pow -0x0.ffff2p-1 16382
pow 0x0.ffff3p-1 16382
pow -0x0.ffff4p-1 16382
pow 0x0.ffff5p-1 16382
pow -0x0.ffff6p-1 16382
pow 0x0.ffff7p-1 16382
pow 0x0.ffff1p-1 16383
pow -0x0.ffff2p-1 16383
pow 0x0.ffff3p-1 16383
pow -0x0.ffff4p-1 16383
pow 0x0.ffff5p-1 16383
pow -0x0.ffff6p-1 16383
pow 0x0.ffff7p-1 16383
pow 0x2.000b3p0 -1022
pow 0x2.000582p0 -1022
pow 2 -0x3.fe513p+8
pow 2 -0x3.fe4e8p+8
pow 10 -1
pow 10 -2
pow 10 -3
pow 10 -4
pow 10 -5
pow 10 -6
pow 10 -7
pow 0x0.ffffffffffffffffp0 1
pow 0x0.ffffffffffffffffp0 2
pow 0x0.ffffffffffffffffp0 3
pow 0x0.ffffffffffffffffp0 4
pow 0x0.ffffffffffffffffp0 5
pow 0x0.ffffffffffffffffp0 6
pow 0x0.ffffffffffffffffp0 7
pow 0x0.ffffffffffffffffp0 -1
pow 0x0.ffffffffffffffffp0 -2
pow 0x0.ffffffffffffffffp0 -3
pow 0x0.ffffffffffffffffp0 -4
pow 0x0.ffffffffffffffffp0 -5
pow 0x0.ffffffffffffffffp0 -6
pow 0x0.ffffffffffffffffp0 -7
pow 0x1.0000000000000002p0 1
pow 0x1.0000000000000002p0 2
pow 0x1.0000000000000002p0 3
pow 0x1.0000000000000002p0 4
pow 0x1.0000000000000002p0 5
pow 0x1.0000000000000002p0 6
pow 0x1.0000000000000002p0 7
pow 0x1.0000000000000002p0 -1
pow 0x1.0000000000000002p0 -2
pow 0x1.0000000000000002p0 -3
pow 0x1.0000000000000002p0 -4
pow 0x1.0000000000000002p0 -5
pow 0x1.0000000000000002p0 -6
pow 0x1.0000000000000002p0 -7
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
pow 0xd.73035p-4 -0x1.47bb8p+8
pow 0x1.059c76p+0 0x1.ff80bep+11
pow 0x1.7ac7cp+5 23
pow -0x1.7ac7cp+5 23
sin 0
sin -0 no-mathvec
sin pi/6
sin -pi/6
sin pi/2
sin -pi/2
sin pi
sin -pi
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
# the next value generates larger error bounds on x86_64 (binary32)
sin 0x1.d12ed2p-12
# the next value generates larger error bounds on x86_64 (ldbl-96)
sin -0x6.e2368c006c018228p+16
# the next value generates larger error bounds on x86_64 (binary128)
sin 0x5.6a5005df4363833413fa44f74ae8p+64
sin max
sin -max
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-23 22:24:20 +00:00
sin min
sin -min
sin min_subnorm
sin -min_subnorm
sin 0x1.8475e5afd4481p+0
sincos 0
sincos -0
sincos pi/2
sincos pi/6
sincos pi/3
sincos pi
sincos -pi
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
sincos max
sincos -max
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-23 22:24:20 +00:00
sincos min
sincos -min
sincos min_subnorm
sincos -min_subnorm
sincos 0x1.8475e5afd4481p+0
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 13:36:10 +00: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
# the next value generates larger error bounds on x86_64 (ldbl-96)
sinh 0x2.c5d376167f4052f4p+12
sinh max
sinh -max
sinh min
sinh -min
sinh min_subnorm
sinh -min_subnorm
sinh 0x5.96a7ep+4
sinh 0x5.96a7e8p+4
sinh 0x2.c679d1f73f0fap+8
sinh 0x2.c679d1f73f0fcp+8
sinh 0x2.c679d1f73f0fb624d358b213a7p+8 xfail-rounding:ibm128-libgcc
sinh 0x2.c679d1f73f0fb624d358b213a8p+8 xfail-rounding:ibm128-libgcc
sinh 0x2.c5d37700c6bb03a4p+12
sinh 0x2.c5d37700c6bb03a8p+12
sinh 0x2.c5d37700c6bb03a6c24b6c9b494cp+12
sinh 0x2.c5d37700c6bb03a6c24b6c9b494ep+12
# the next value generates larger error bounds on x86_64 (binary64)
sinh -0x1.633c62890fa14p+9
Add narrowing subtract functions. This patch adds the narrowing subtract functions from TS 18661-1 to glibc's libm: fsub, fsubl, dsubl, f32subf64, f32subf32x, f32xsubf64 for all configurations; f32subf64x, f32subf128, f64subf64x, f64subf128, f32xsubf64x, f32xsubf128, f64xsubf128 for configurations with _Float64x and _Float128; __nldbl_dsubl for ldbl-opt. The changes are essentially the same as for the narrowing add functions, so the description of those generally applies to this patch as well. Tested for x86_64, x86, mips64 (all three ABIs, both hard and soft float) and powerpc, and with build-many-glibcs.py. * math/Makefile (libm-narrow-fns): Add sub. (libm-test-funcs-narrow): Likewise. * math/Versions (GLIBC_2.28): Add narrowing subtract functions. * math/bits/mathcalls-narrow.h (sub): Use __MATHCALL_NARROW. * math/gen-auto-libm-tests.c (test_functions): Add sub. * math/math-narrow.h (CHECK_NARROW_SUB): New macro. (NARROW_SUB_ROUND_TO_ODD): Likewise. (NARROW_SUB_TRIVIAL): Likewise. * sysdeps/ieee754/float128/float128_private.h (__fsubl): New macro. (__dsubl): Likewise. * sysdeps/ieee754/ldbl-opt/Makefile (libnldbl-calls): Add fsub and dsub. (CFLAGS-nldbl-dsub.c): New variable. (CFLAGS-nldbl-fsub.c): Likewise. * sysdeps/ieee754/ldbl-opt/Versions (GLIBC_2.28): Add __nldbl_dsubl. * sysdeps/ieee754/ldbl-opt/nldbl-compat.h (__nldbl_dsubl): New prototype. * manual/arith.texi (Misc FP Arithmetic): Document fsub, fsubl, dsubl, fMsubfN, fMsubfNx, fMxsubfN and fMxsubfNx. * math/auto-libm-test-in: Add tests of sub. * math/auto-libm-test-out-narrow-sub: New generated file. * math/libm-test-narrow-sub.inc: New file. * sysdeps/i386/fpu/s_f32xsubf64.c: Likewise. * sysdeps/ieee754/dbl-64/s_f32xsubf64.c: Likewise. * sysdeps/ieee754/dbl-64/s_fsub.c: Likewise. * sysdeps/ieee754/float128/s_f32subf128.c: Likewise. * sysdeps/ieee754/float128/s_f64subf128.c: Likewise. * sysdeps/ieee754/float128/s_f64xsubf128.c: Likewise. * sysdeps/ieee754/ldbl-128/s_dsubl.c: Likewise. * sysdeps/ieee754/ldbl-128/s_f64xsubf128.c: Likewise. * sysdeps/ieee754/ldbl-128/s_fsubl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_dsubl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_fsubl.c: Likewise. * sysdeps/ieee754/ldbl-96/s_dsubl.c: Likewise. * sysdeps/ieee754/ldbl-96/s_fsubl.c: Likewise. * sysdeps/ieee754/ldbl-opt/nldbl-dsub.c: Likewise. * sysdeps/ieee754/ldbl-opt/nldbl-fsub.c: Likewise. * sysdeps/ieee754/soft-fp/s_dsubl.c: Likewise. * sysdeps/ieee754/soft-fp/s_fsub.c: Likewise. * sysdeps/ieee754/soft-fp/s_fsubl.c: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Update. * sysdeps/mach/hurd/i386/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/aarch64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/alpha/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/arm/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/hppa/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/i386/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/ia64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/microblaze/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/nios2/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/riscv/rv64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/sh/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilegx32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilegx64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise.
2018-03-20 00:34:52 +00:00
sub 0 0
sub 0 -0
sub -0 0
sub -0 -0
sub max max
sub max -max
sub -max max
sub -max -max
sub min min missing-underflow:arg-ibm128
sub min -min missing-underflow:arg-ibm128
sub -min min missing-underflow:arg-ibm128
sub -min -min missing-underflow:arg-ibm128
sub min_subnorm min_subnorm missing-underflow:arg-ibm128
sub min_subnorm -min_subnorm missing-underflow:arg-ibm128
sub -min_subnorm min_subnorm missing-underflow:arg-ibm128
sub -min_subnorm -min_subnorm missing-underflow:arg-ibm128
sub 1 2
sub 1 -2
sub -1 2
sub -1 -2
sub 100.5 0.75
sub 100.5 -0.75
sub -100.5 0.75
sub -100.5 -0.75
sub 1 0x1p-23
sub 1 0x1.7fp-23
sub 1 0x1.8p-23
sub 1 0x1.81p-23
sub 1 0x1p-24
sub 1 0x1.1p-24
sub 1 0x0.fp-24
sub 1 min
sub 1 -min
sub 1 min_subnorm
sub 1 -min_subnorm
sub -1 min
sub -1 -min
sub -1 min_subnorm
sub -1 -min_subnorm
# Cases where larger argument is half way between two values of a
# floating-point format, so that double rounding would sometimes yield
# the wrong result.
sub 0x1.000001p0 min
sub 0x1.000001p0 -min
sub 0x1.000001p0 min_subnorm
sub 0x1.000001p0 -min_subnorm
sub -0x1.000001p0 min
sub -0x1.000001p0 -min
sub -0x1.000001p0 min_subnorm
sub -0x1.000001p0 -min_subnorm
sub 0x1.00000000000008p0 min
sub 0x1.00000000000008p0 -min
sub 0x1.00000000000008p0 min_subnorm
sub 0x1.00000000000008p0 -min_subnorm
sub -0x1.00000000000008p0 min
sub -0x1.00000000000008p0 -min
sub -0x1.00000000000008p0 min_subnorm
sub -0x1.00000000000008p0 -min_subnorm
sub 0x1.0000000000000001p0 min
sub 0x1.0000000000000001p0 -min
sub 0x1.0000000000000001p0 min_subnorm
sub 0x1.0000000000000001p0 -min_subnorm
sub -0x1.0000000000000001p0 min
sub -0x1.0000000000000001p0 -min
sub -0x1.0000000000000001p0 min_subnorm
sub -0x1.0000000000000001p0 -min_subnorm
# Two values representable in the same format with difference very
# close to half way between two representable values. In particular,
# verify that there is no intermediate rounding to 64 bits when
# subtracting two double values.
sub 1 0x1.000002p-24
sub 1 -0x1.000002p-24
sub 1 0x0.ffffffp-24
sub 1 -0x0.ffffffp-24
sub 0x1.000002p0 0x1.000002p-24
sub 0x1.000002p0 -0x1.000002p-24
sub 0x1.000002p0 0x0.ffffffp-24
sub 0x1.000002p0 -0x0.ffffffp-24
sub 1 0x1.0000000000001p-53
sub 1 -0x1.0000000000001p-53
sub 1 0x0.fffffffffffff8p-53
sub 1 -0x0.fffffffffffff8p-53
sub 0x1.0000000000001p0 0x1.0000000000001p-53
sub 0x1.0000000000001p0 -0x1.0000000000001p-53
sub 0x1.0000000000001p0 0x0.fffffffffffff8p-53
sub 0x1.0000000000001p0 -0x0.fffffffffffff8p-53
sub 1 0x1.0000000000000002p-64
sub 1 -0x1.0000000000000002p-64
sub 1 0x0.ffffffffffffffffp-64
sub 1 -0x0.ffffffffffffffffp-64
sub 0x1.0000000000000002p0 0x1.0000000000000002p-64
sub 0x1.0000000000000002p0 -0x1.0000000000000002p-64
sub 0x1.0000000000000002p0 0x0.ffffffffffffffffp-64
sub 0x1.0000000000000002p0 -0x0.ffffffffffffffffp-64
sqrt 0
sqrt -0
sqrt 2209
sqrt 4
sqrt 2
sqrt 0.25
sqrt 6642.25
sqrt 15190.5625
sqrt 0.75
2013-11-29 16:31:16 +00: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
sqrt max
sqrt min
sqrt min_subnorm
tan 0
tan -0 no-mathvec
tan pi/4
tan pi/2
tan -pi/2
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 1.57079697
tan -1.57079697
tan 0x1p-5
tan 0x1p-10
tan 0x1p-15
tan 0x1p-20
tan 0x1p-25
tan 0x1p-30
tan 0x1p-35
tan 0x1p-40
tan 0x1p-45
tan 0x1p-50
tan 0x1p-55
tan 0x1p-60
tan 0x1p-100
tan 0x1p-600
tan 0x1p-10000
tan max
tan -max
tan min
tan -min
tan min_subnorm
tan -min_subnorm
tanh 0
tanh -0 no-mathvec
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 0x1p-5
tanh 0x1p-10
tanh 0x1p-15
tanh 0x1p-20
tanh 0x1p-25
tanh 0x1p-30
tanh 0x1p-35
tanh 0x1p-40
tanh 0x1p-45
tanh 0x1p-50
tanh 0x1p-55
tanh 0x1p-60
tanh 0x1p-100
tanh 0x1p-600
tanh 0x1p-10000
# the next value generates larger error bounds on x86_64 (ldbl-96)
tanh 0x3.b9979a543d0fbfa8p-4
tanh max
tanh -max
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-29 23:29:35 +00: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:binary32
tgamma -0x1p-128
tgamma 0x1p-149
tgamma -0x1p-149
tgamma 0x1p-1023
tgamma -0x1p-1023
tgamma 0x1p-1024 spurious-overflow:binary64 spurious-overflow:ibm128
tgamma -0x1p-1024
tgamma 0x1p-1074
tgamma -0x1p-1074
tgamma 0x1p-16383
tgamma -0x1p-16383
tgamma 0x1p-16384 spurious-overflow:intel96 spurious-overflow:m68k96 spurious-overflow:binary128
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
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
# the next value generates larger error bounds on x86_64 (binary32)
tgamma -0x3.0aa534p+0
# the next values generate large error bounds on x86_64 (binary64)
tgamma -0x1.62b8c36c7180bp+4
tgamma -0x1.62c4d519e8677p+3
tgamma -0x1.c033cc426752fp+2
tgamma -0x1.62cfd0d34ade2p+3
tgamma -0x1.8814da6eb7dbp+5
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 0x1p-600
y0 0x1p-10000
# the next values yield large errors for binary32
# (cf BZ #16492 for the xfail entries)
y0 0xd.3432bp-4
y0 0x1.33eaacp+5 xfail:binary64 xfail:intel96 xfail-rounding:ibm128-libgcc
y0 0x1.a681cep-1 xfail-rounding:ibm128-libgcc
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 0x1p-600
y1 0x1p-10000
# the next three values yield the largest error in the binary32 format
# (cf BZ #27670 for the xfail entries)
y1 0x1.065194p+7 xfail-rounding:binary64 xfail-rounding:intel96 xfail-rounding:ibm128-libgcc
y1 0x1.c1badep+0 xfail-rounding:ibm128-libgcc
y1 0x1.c1bc2ep+0
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 3 0x1p-10
yn 3 0x1p-100
yn 3 0x1p-600
yn 3 0x1p-10000
# 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 2 0x1p-10
yn 2 0x1p-100
yn 2 0x1p-600
yn 2 0x1p-10000
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