From 10de07f5fdd9eaf3a808d4461401f5b661095614 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Wed, 1 May 2013 10:07:00 +0000 Subject: [PATCH] Fix catan, catanh spurious underflows (bug 15423). --- ChangeLog | 15 ++ NEWS | 2 +- math/libm-test.inc | 372 ++++++++++++++++++++++++++++++++++++++ math/s_catan.c | 42 +++-- math/s_catanf.c | 43 +++-- math/s_catanh.c | 41 +++-- math/s_catanhf.c | 42 +++-- math/s_catanhl.c | 43 +++-- math/s_catanl.c | 42 +++-- sysdeps/i386/fpu/libm-test-ulps | 144 +++++++++++++++ sysdeps/x86_64/fpu/libm-test-ulps | 232 ++++++++++++++++++++++++ 11 files changed, 920 insertions(+), 98 deletions(-) diff --git a/ChangeLog b/ChangeLog index c648855..b584840 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2013-05-01 Joseph Myers + + [BZ #15423] + * math/s_catan.c (__catan): Handle small real or imaginary part of + input specially to avoid spurious underflow. + * math/s_catanf.c (__catanf): Likewise. + * math/s_catanh.c (__catanh): Likewise. + * math/s_catanhf.c (__catanhf): Likewise. + * math/s_catanhl.c (__catanhl): Likewise. + * math/s_catanl.c (__catanl): Likewise. + * math/libm-test.inc (catan_test): Add more tests. + (catanh_test): Likewise. + * sysdeps/i386/fpu/libm-test-ulps: Update. + * sysdeps/x86_64/fpu/libm-test-ulps: Likewise. + 2013-04-30 Adhemerval Zanella * sysdeps/powerpc/fpu/libm-test-ulps: Update. diff --git a/NEWS b/NEWS index e1f63e4..505c716 100644 --- a/NEWS +++ b/NEWS @@ -15,7 +15,7 @@ Version 2.18 15006, 15007, 15020, 15023, 15036, 15054, 15055, 15062, 15078, 15084, 15085, 15086, 15160, 15214, 15221, 15232, 15234, 15283, 15285, 15287, 15304, 15305, 15307, 15309, 15327, 15330, 15335, 15336, 15337, 15342, - 15346, 15361, 15366, 15380, 15394, 15405, 15406, 15409, 15416. + 15346, 15361, 15366, 15380, 15394, 15405, 15406, 15409, 15416, 15423. * CVE-2013-0242 Buffer overrun in regexp matcher has been fixed (Bugzilla #15078). diff --git a/math/libm-test.inc b/math/libm-test.inc index d131ffa..8feb0a6 100644 --- a/math/libm-test.inc +++ b/math/libm-test.inc @@ -4611,6 +4611,192 @@ catan_test (void) TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-57L, 7.853981633974483096156608458198756849381e-1L, -3.469446951953614188823848962783813782817e-18L); TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-57L, -7.853981633974483096156608458198756849381e-1L, -3.469446951953614188823848962783813782817e-18L); #endif + TEST_c_c (catan, 1.0L, 0x1p-64L, 7.853981633974483096156608458198757210500e-1L, 2.710505431213761085018632002174854278563e-20L); + TEST_c_c (catan, 1.0L, -0x1p-64L, 7.853981633974483096156608458198757210500e-1L, -2.710505431213761085018632002174854278563e-20L); + TEST_c_c (catan, -1.0L, 0x1p-64L, -7.853981633974483096156608458198757210500e-1L, 2.710505431213761085018632002174854278563e-20L); + TEST_c_c (catan, -1.0L, -0x1p-64L, -7.853981633974483096156608458198757210500e-1L, -2.710505431213761085018632002174854278563e-20L); + TEST_c_c (catan, 0x1p-64L, 1.0L, 7.853981633974483096292133729759445264744e-1L, 2.252728336819822255606004394739073846245e1L); + TEST_c_c (catan, -0x1p-64L, 1.0L, -7.853981633974483096292133729759445264744e-1L, 2.252728336819822255606004394739073846245e1L); + TEST_c_c (catan, 0x1p-64L, -1.0L, 7.853981633974483096292133729759445264744e-1L, -2.252728336819822255606004394739073846245e1L); + TEST_c_c (catan, -0x1p-64L, -1.0L, -7.853981633974483096292133729759445264744e-1L, -2.252728336819822255606004394739073846245e1L); + TEST_c_c (catan, 1.0L, 0x1.3p-73L, 7.853981633974483096156608458198757210493e-1L, 6.286572655403010329022706059731717687100e-23L); + TEST_c_c (catan, 1.0L, -0x1.3p-73L, 7.853981633974483096156608458198757210493e-1L, -6.286572655403010329022706059731717687100e-23L); + TEST_c_c (catan, -1.0L, 0x1.3p-73L, -7.853981633974483096156608458198757210493e-1L, 6.286572655403010329022706059731717687100e-23L); + TEST_c_c (catan, -1.0L, -0x1.3p-73L, -7.853981633974483096156608458198757210493e-1L, -6.286572655403010329022706059731717687100e-23L); + TEST_c_c (catan, 0x1.3p-73L, 1.0L, 7.853981633974483096156922786831527361009e-1L, 2.556052055225464683726753902092495938633e1L); + TEST_c_c (catan, -0x1.3p-73L, 1.0L, -7.853981633974483096156922786831527361009e-1L, 2.556052055225464683726753902092495938633e1L); + TEST_c_c (catan, 0x1.3p-73L, -1.0L, 7.853981633974483096156922786831527361009e-1L, -2.556052055225464683726753902092495938633e1L); + TEST_c_c (catan, -0x1.3p-73L, -1.0L, -7.853981633974483096156922786831527361009e-1L, -2.556052055225464683726753902092495938633e1L); + TEST_c_c (catan, 1.0L, 0x1p-124L, 7.853981633974483096156608458198757210493e-1L, 2.350988701644575015937473074444491355637e-38L); + TEST_c_c (catan, 1.0L, -0x1p-124L, 7.853981633974483096156608458198757210493e-1L, -2.350988701644575015937473074444491355637e-38L); + TEST_c_c (catan, -1.0L, 0x1p-124L, -7.853981633974483096156608458198757210493e-1L, 2.350988701644575015937473074444491355637e-38L); + TEST_c_c (catan, -1.0L, -0x1p-124L, -7.853981633974483096156608458198757210493e-1L, -2.350988701644575015937473074444491355637e-38L); + TEST_c_c (catan, 0x1p-124L, 1.0L, 7.853981633974483096156608458198757210610e-1L, 4.332169878499658183857700759113603550472e1L); + TEST_c_c (catan, -0x1p-124L, 1.0L, -7.853981633974483096156608458198757210610e-1L, 4.332169878499658183857700759113603550472e1L); + TEST_c_c (catan, 0x1p-124L, -1.0L, 7.853981633974483096156608458198757210610e-1L, -4.332169878499658183857700759113603550472e1L); + TEST_c_c (catan, -0x1p-124L, -1.0L, -7.853981633974483096156608458198757210610e-1L, -4.332169878499658183857700759113603550472e1L); + TEST_c_c (catan, 0x1.000002p0L, 0x1p-126L, 7.853982230020895322927482174768220815493e-1L, 5.877471053462247139383742414506671233336e-39L, UNDERFLOW_EXCEPTION_FLOAT); + TEST_c_c (catan, 0x1.000002p0L, -0x1p-126L, 7.853982230020895322927482174768220815493e-1L, -5.877471053462247139383742414506671233336e-39L, UNDERFLOW_EXCEPTION_FLOAT); + TEST_c_c (catan, -0x1.000002p0L, 0x1p-126L, -7.853982230020895322927482174768220815493e-1L, 5.877471053462247139383742414506671233336e-39L, UNDERFLOW_EXCEPTION_FLOAT); + TEST_c_c (catan, -0x1.000002p0L, -0x1p-126L, -7.853982230020895322927482174768220815493e-1L, -5.877471053462247139383742414506671233336e-39L, UNDERFLOW_EXCEPTION_FLOAT); + TEST_c_c (catan, 0x1p-126L, 0x1.000002p0L, 1.570796326794896619231321691639702138295L, 8.317766196521665212523713550410777685446L); + TEST_c_c (catan, -0x1p-126L, 0x1.000002p0L, -1.570796326794896619231321691639702138295L, 8.317766196521665212523713550410777685446L); + TEST_c_c (catan, 0x1p-126L, -0x1.000002p0L, 1.570796326794896619231321691639702138295L, -8.317766196521665212523713550410777685446L); + TEST_c_c (catan, -0x1p-126L, -0x1.000002p0L, -1.570796326794896619231321691639702138295L, -8.317766196521665212523713550410777685446L); + TEST_c_c (catan, 0x0.ffffffp0L, 0x1p-126L, 7.853981335951250337419109991749089175724e-1L, 5.877472104436064061535099214664320916184e-39L, UNDERFLOW_EXCEPTION_FLOAT); + TEST_c_c (catan, 0x0.ffffffp0L, -0x1p-126L, 7.853981335951250337419109991749089175724e-1L, -5.877472104436064061535099214664320916184e-39L, UNDERFLOW_EXCEPTION_FLOAT); + TEST_c_c (catan, -0x0.ffffffp0L, 0x1p-126L, -7.853981335951250337419109991749089175724e-1L, 5.877472104436064061535099214664320916184e-39L, UNDERFLOW_EXCEPTION_FLOAT); + TEST_c_c (catan, -0x0.ffffffp0L, -0x1p-126L, -7.853981335951250337419109991749089175724e-1L, -5.877472104436064061535099214664320916184e-39L, UNDERFLOW_EXCEPTION_FLOAT); + TEST_c_c (catan, 0x1p-126L, 0x0.ffffffp0L, 9.860761609136244031334147100512154160097e-32L, 8.664339742098154951823135931565866792454L); + TEST_c_c (catan, -0x1p-126L, 0x0.ffffffp0L, -9.860761609136244031334147100512154160097e-32L, 8.664339742098154951823135931565866792454L); + TEST_c_c (catan, 0x1p-126L, -0x0.ffffffp0L, 9.860761609136244031334147100512154160097e-32L, -8.664339742098154951823135931565866792454L); + TEST_c_c (catan, -0x1p-126L, -0x0.ffffffp0L, -9.860761609136244031334147100512154160097e-32L, -8.664339742098154951823135931565866792454L); +#ifndef TEST_FLOAT + TEST_c_c (catan, 1.0L, 0x1p-512L, 7.853981633974483096156608458198757210493e-1L, 3.729170365600103371645482657731466918688e-155L); + TEST_c_c (catan, 1.0L, -0x1p-512L, 7.853981633974483096156608458198757210493e-1L, -3.729170365600103371645482657731466918688e-155L); + TEST_c_c (catan, -1.0L, 0x1p-512L, -7.853981633974483096156608458198757210493e-1L, 3.729170365600103371645482657731466918688e-155L); + TEST_c_c (catan, -1.0L, -0x1p-512L, -7.853981633974483096156608458198757210493e-1L, -3.729170365600103371645482657731466918688e-155L); + TEST_c_c (catan, 0x1p-512L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 1.777922518136259718655200391540222897114e2L); + TEST_c_c (catan, -0x1p-512L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 1.777922518136259718655200391540222897114e2L); + TEST_c_c (catan, 0x1p-512L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -1.777922518136259718655200391540222897114e2L); + TEST_c_c (catan, -0x1p-512L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -1.777922518136259718655200391540222897114e2L); + TEST_c_c (catan, 1.0L, 0x1.3p-536L, 7.853981633974483096156608458198757210493e-1L, 2.639526015013529511588222179446290115084e-162L); + TEST_c_c (catan, 1.0L, -0x1.3p-536L, 7.853981633974483096156608458198757210493e-1L, -2.639526015013529511588222179446290115084e-162L); + TEST_c_c (catan, -1.0L, 0x1.3p-536L, -7.853981633974483096156608458198757210493e-1L, 2.639526015013529511588222179446290115084e-162L); + TEST_c_c (catan, -1.0L, -0x1.3p-536L, -7.853981633974483096156608458198757210493e-1L, -2.639526015013529511588222179446290115084e-162L); + TEST_c_c (catan, 0x1.3p-536L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 1.860240928518819859673567751384928348958e2L); + TEST_c_c (catan, -0x1.3p-536L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 1.860240928518819859673567751384928348958e2L); + TEST_c_c (catan, 0x1.3p-536L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -1.860240928518819859673567751384928348958e2L); + TEST_c_c (catan, -0x1.3p-536L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -1.860240928518819859673567751384928348958e2L); + TEST_c_c (catan, 1.0L, 0x1p-1020L, 7.853981633974483096156608458198757210493e-1L, 4.450147717014402766180465434664808128438e-308L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM); + TEST_c_c (catan, 1.0L, -0x1p-1020L, 7.853981633974483096156608458198757210493e-1L, -4.450147717014402766180465434664808128438e-308L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM); + TEST_c_c (catan, -1.0L, 0x1p-1020L, -7.853981633974483096156608458198757210493e-1L, 4.450147717014402766180465434664808128438e-308L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM); + TEST_c_c (catan, -1.0L, -0x1p-1020L, -7.853981633974483096156608458198757210493e-1L, -4.450147717014402766180465434664808128438e-308L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM); + TEST_c_c (catan, 0x1p-1020L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 3.538516356758520804574969980043991380025e2L); + TEST_c_c (catan, -0x1p-1020L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 3.538516356758520804574969980043991380025e2L); + TEST_c_c (catan, 0x1p-1020L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -3.538516356758520804574969980043991380025e2L); + TEST_c_c (catan, -0x1p-1020L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -3.538516356758520804574969980043991380025e2L); + TEST_c_c (catan, 0x1.0000000000001p0L, 0x1p-1022L, 7.853981633974484206379633083355174374608e-1L, 1.112536929253600444512293438042957369978e-308L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catan, 0x1.0000000000001p0L, -0x1p-1022L, 7.853981633974484206379633083355174374608e-1L, -1.112536929253600444512293438042957369978e-308L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catan, -0x1.0000000000001p0L, 0x1p-1022L, -7.853981633974484206379633083355174374608e-1L, 1.112536929253600444512293438042957369978e-308L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catan, -0x1.0000000000001p0L, -0x1p-1022L, -7.853981633974484206379633083355174374608e-1L, -1.112536929253600444512293438042957369978e-308L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catan, 0x1p-1022L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 1.836840028483855075506780244989950299369e1L); + TEST_c_c (catan, -0x1p-1022L, 0x1.0000000000001p0L, -1.570796326794896619231321691639751442099L, 1.836840028483855075506780244989950299369e1L); + TEST_c_c (catan, 0x1p-1022L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -1.836840028483855075506780244989950299369e1L); + TEST_c_c (catan, -0x1p-1022L, -0x1.0000000000001p0L, -1.570796326794896619231321691639751442099L, -1.836840028483855075506780244989950299369e1L); + TEST_c_c (catan, 0x0.fffffffffffff8p0L, 0x1p-1022L, 7.853981633974482541045096145620456183798e-1L, 1.112536929253600815061527818977844932790e-308L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catan, 0x0.fffffffffffff8p0L, -0x1p-1022L, 7.853981633974482541045096145620456183798e-1L, -1.112536929253600815061527818977844932790e-308L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catan, -0x0.fffffffffffff8p0L, 0x1p-1022L, -7.853981633974482541045096145620456183798e-1L, 1.112536929253600815061527818977844932790e-308L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catan, -0x0.fffffffffffff8p0L, -0x1p-1022L, -7.853981633974482541045096145620456183798e-1L, -1.112536929253600815061527818977844932790e-308L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catan, 0x1p-1022L, 0x0.fffffffffffff8p0L, 1.002084180004486444624900488355118689113e-292L, 1.871497387511852332650969166374185305708e1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM); + TEST_c_c (catan, -0x1p-1022L, 0x0.fffffffffffff8p0L, -1.002084180004486444624900488355118689113e-292L, 1.871497387511852332650969166374185305708e1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM); + TEST_c_c (catan, 0x1p-1022L, -0x0.fffffffffffff8p0L, 1.002084180004486444624900488355118689113e-292L, -1.871497387511852332650969166374185305708e1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM); + TEST_c_c (catan, -0x1p-1022L, -0x0.fffffffffffff8p0L, -1.002084180004486444624900488355118689113e-292L, -1.871497387511852332650969166374185305708e1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM); +#endif +#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64 + TEST_c_c (catan, 0x1.0000000000000002p0L, 0x1p-1022L, 7.853981633974483096698709544441509427467e-1L, 1.112536929253600691424494863099491450042e-308L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catan, 0x1.0000000000000002p0L, -0x1p-1022L, 7.853981633974483096698709544441509427467e-1L, -1.112536929253600691424494863099491450042e-308L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catan, -0x1.0000000000000002p0L, 0x1p-1022L, -7.853981633974483096698709544441509427467e-1L, 1.112536929253600691424494863099491450042e-308L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catan, -0x1.0000000000000002p0L, -0x1p-1022L, -7.853981633974483096698709544441509427467e-1L, -1.112536929253600691424494863099491450042e-308L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catan, 0x1p-1022L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 2.218070977791824990137853294097378778927e1L); + TEST_c_c (catan, -0x1p-1022L, 0x1.0000000000000002p0L, -1.570796326794896619231321691639751442099L, 2.218070977791824990137853294097378778927e1L); + TEST_c_c (catan, 0x1p-1022L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -2.218070977791824990137853294097378778927e1L); + TEST_c_c (catan, -0x1p-1022L, -0x1.0000000000000002p0L, -1.570796326794896619231321691639751442099L, -2.218070977791824990137853294097378778927e1L); + TEST_c_c (catan, 0x0.ffffffffffffffffp0L, 0x1p-1022L, 7.853981633974483095885557915077381101984e-1L, 1.112536929253600691605427106449557323148e-308L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catan, 0x0.ffffffffffffffffp0L, -0x1p-1022L, 7.853981633974483095885557915077381101984e-1L, -1.112536929253600691605427106449557323148e-308L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catan, -0x0.ffffffffffffffffp0L, 0x1p-1022L, -7.853981633974483095885557915077381101984e-1L, 1.112536929253600691605427106449557323148e-308L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catan, -0x0.ffffffffffffffffp0L, -0x1p-1022L, -7.853981633974483095885557915077381101984e-1L, -1.112536929253600691605427106449557323148e-308L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catan, 0x1p-1022L, 0x0.ffffffffffffffffp0L, 2.052268400649188124723641491045245971623e-289L, 2.252728336819822255604649142023466965703e1L); + TEST_c_c (catan, -0x1p-1022L, 0x0.ffffffffffffffffp0L, -2.052268400649188124723641491045245971623e-289L, 2.252728336819822255604649142023466965703e1L); + TEST_c_c (catan, 0x1p-1022L, -0x0.ffffffffffffffffp0L, 2.052268400649188124723641491045245971623e-289L, -2.252728336819822255604649142023466965703e1L); + TEST_c_c (catan, -0x1p-1022L, -0x0.ffffffffffffffffp0L, -2.052268400649188124723641491045245971623e-289L, -2.252728336819822255604649142023466965703e1L); +#endif +#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106 + TEST_c_c (catan, 0x1.000000000000000000000000008p0L, 0x1p-1022L, 7.853981633974483096156608458198880470009e-1L, 1.112536929253600691545116358666174605957e-308L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catan, 0x1.000000000000000000000000008p0L, -0x1p-1022L, 7.853981633974483096156608458198880470009e-1L, -1.112536929253600691545116358666174605957e-308L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catan, -0x1.000000000000000000000000008p0L, 0x1p-1022L, -7.853981633974483096156608458198880470009e-1L, 1.112536929253600691545116358666174605957e-308L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catan, -0x1.000000000000000000000000008p0L, -0x1p-1022L, -7.853981633974483096156608458198880470009e-1L, -1.112536929253600691545116358666174605957e-308L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catan, 0x1p-1022L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 3.673680056967710139911330243728336427098e1L); + TEST_c_c (catan, -0x1p-1022L, 0x1.000000000000000000000000008p0L, -1.570796326794896619231321691639751442099L, 3.673680056967710139911330243728336427098e1L); + TEST_c_c (catan, 0x1p-1022L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -3.673680056967710139911330243728336427098e1L); + TEST_c_c (catan, -0x1p-1022L, -0x1.000000000000000000000000008p0L, -1.570796326794896619231321691639751442099L, -3.673680056967710139911330243728336427098e1L); + TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-1022L, 7.853981633974483096156608458198695580735e-1L, 1.112536929253600691545116358666215745186e-308L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-1022L, 7.853981633974483096156608458198695580735e-1L, -1.112536929253600691545116358666215745186e-308L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-1022L, -7.853981633974483096156608458198695580735e-1L, 1.112536929253600691545116358666215745186e-308L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-1022L, -7.853981633974483096156608458198695580735e-1L, -1.112536929253600691545116358666215745186e-308L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catan, 0x1p-1022L, 0x0.ffffffffffffffffffffffffffcp0L, 9.025971879324147880346310405868788320726e-277L, 3.708337415995707405382191849801244331055e1L); + TEST_c_c (catan, -0x1p-1022L, 0x0.ffffffffffffffffffffffffffcp0L, -9.025971879324147880346310405868788320726e-277L, 3.708337415995707405382191849801244331055e1L); + TEST_c_c (catan, 0x1p-1022L, -0x0.ffffffffffffffffffffffffffcp0L, 9.025971879324147880346310405868788320726e-277L, -3.708337415995707405382191849801244331055e1L); + TEST_c_c (catan, -0x1p-1022L, -0x0.ffffffffffffffffffffffffffcp0L, -9.025971879324147880346310405868788320726e-277L, -3.708337415995707405382191849801244331055e1L); +#endif +#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384 + TEST_c_c (catan, 1.0L, 0x1p-8192L, 7.853981633974483096156608458198757210493e-1L, 4.584009668887117914053530980121207914891e-2467L); + TEST_c_c (catan, 1.0L, -0x1p-8192L, 7.853981633974483096156608458198757210493e-1L, -4.584009668887117914053530980121207914891e-2467L); + TEST_c_c (catan, -1.0L, 0x1p-8192L, -7.853981633974483096156608458198757210493e-1L, 4.584009668887117914053530980121207914891e-2467L); + TEST_c_c (catan, -1.0L, -0x1p-8192L, -7.853981633974483096156608458198757210493e-1L, -4.584009668887117914053530980121207914891e-2467L); + TEST_c_c (catan, 0x1p-8192L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 2.839477425163815960027691385553420311121e3L); + TEST_c_c (catan, -0x1p-8192L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 2.839477425163815960027691385553420311121e3L); + TEST_c_c (catan, 0x1p-8192L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -2.839477425163815960027691385553420311121e3L); + TEST_c_c (catan, -0x1p-8192L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -2.839477425163815960027691385553420311121e3L); + TEST_c_c (catan, 1.0L, 0x1.3p-8221L, 7.853981633974483096156608458198757210493e-1L, 1.013933025636421986471594877335044443409e-2475L); + TEST_c_c (catan, 1.0L, -0x1.3p-8221L, 7.853981633974483096156608458198757210493e-1L, -1.013933025636421986471594877335044443409e-2475L); + TEST_c_c (catan, -1.0L, 0x1.3p-8221L, -7.853981633974483096156608458198757210493e-1L, 1.013933025636421986471594877335044443409e-2475L); + TEST_c_c (catan, -1.0L, -0x1.3p-8221L, -7.853981633974483096156608458198757210493e-1L, -1.013933025636421986471594877335044443409e-2475L); + TEST_c_c (catan, 0x1.3p-8221L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 2.849442134153471837403071201841536297726e3L); + TEST_c_c (catan, -0x1.3p-8221L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 2.849442134153471837403071201841536297726e3L); + TEST_c_c (catan, 0x1.3p-8221L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -2.849442134153471837403071201841536297726e3L); + TEST_c_c (catan, -0x1.3p-8221L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -2.849442134153471837403071201841536297726e3L); + TEST_c_c (catan, 1.0L, 0x1.3p-8246L, 7.853981633974483096156608458198757210493e-1L, 3.021755890954798419688924781486524472858e-2483L); + TEST_c_c (catan, 1.0L, -0x1.3p-8246L, 7.853981633974483096156608458198757210493e-1L, -3.021755890954798419688924781486524472858e-2483L); + TEST_c_c (catan, -1.0L, 0x1.3p-8246L, -7.853981633974483096156608458198757210493e-1L, 3.021755890954798419688924781486524472858e-2483L); + TEST_c_c (catan, -1.0L, -0x1.3p-8246L, -7.853981633974483096156608458198757210493e-1L, -3.021755890954798419688924781486524472858e-2483L); + TEST_c_c (catan, 0x1.3p-8246L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 2.858106473910471153770786603359763504827e3L); + TEST_c_c (catan, -0x1.3p-8246L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 2.858106473910471153770786603359763504827e3L); + TEST_c_c (catan, 0x1.3p-8246L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -2.858106473910471153770786603359763504827e3L); + TEST_c_c (catan, -0x1.3p-8246L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -2.858106473910471153770786603359763504827e3L); + TEST_c_c (catan, 1.0L, 0x1p-16380L, 7.853981633974483096156608458198757210493e-1L, 6.724206286224187012525355634643505205196e-4932L); + TEST_c_c (catan, 1.0L, -0x1p-16380L, 7.853981633974483096156608458198757210493e-1L, -6.724206286224187012525355634643505205196e-4932L); + TEST_c_c (catan, -1.0L, 0x1p-16380L, -7.853981633974483096156608458198757210493e-1L, 6.724206286224187012525355634643505205196e-4932L); + TEST_c_c (catan, -1.0L, -0x1p-16380L, -7.853981633974483096156608458198757210493e-1L, -6.724206286224187012525355634643505205196e-4932L); + TEST_c_c (catan, 0x1p-16380L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 5.677221982376232056781839690803195180822e3L); + TEST_c_c (catan, -0x1p-16380L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 5.677221982376232056781839690803195180822e3L); + TEST_c_c (catan, 0x1p-16380L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -5.677221982376232056781839690803195180822e3L); + TEST_c_c (catan, -0x1p-16380L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -5.677221982376232056781839690803195180822e3L); + TEST_c_c (catan, 0x1.0000000000000002p0L, 0x1p-16382L, 7.853981633974483096698709544441509427467e-1L, 1.681051571556046752949078932066752571182e-4932L, UNDERFLOW_EXCEPTION); + TEST_c_c (catan, 0x1.0000000000000002p0L, -0x1p-16382L, 7.853981633974483096698709544441509427467e-1L, -1.681051571556046752949078932066752571182e-4932L, UNDERFLOW_EXCEPTION); + TEST_c_c (catan, -0x1.0000000000000002p0L, 0x1p-16382L, -7.853981633974483096698709544441509427467e-1L, 1.681051571556046752949078932066752571182e-4932L, UNDERFLOW_EXCEPTION); + TEST_c_c (catan, -0x1.0000000000000002p0L, -0x1p-16382L, -7.853981633974483096698709544441509427467e-1L, -1.681051571556046752949078932066752571182e-4932L, UNDERFLOW_EXCEPTION); + TEST_c_c (catan, 0x1p-16382L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 2.218070977791824990137853294097378778927e1L); + TEST_c_c (catan, -0x1p-16382L, 0x1.0000000000000002p0L, -1.570796326794896619231321691639751442099L, 2.218070977791824990137853294097378778927e1L); + TEST_c_c (catan, 0x1p-16382L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -2.218070977791824990137853294097378778927e1L); + TEST_c_c (catan, -0x1p-16382L, -0x1.0000000000000002p0L, -1.570796326794896619231321691639751442099L, -2.218070977791824990137853294097378778927e1L); + TEST_c_c (catan, 0x0.ffffffffffffffffp0L, 0x1p-16382L, 7.853981633974483095885557915077381101984e-1L, 1.681051571556046753222468896957938166365e-4932L, UNDERFLOW_EXCEPTION); + TEST_c_c (catan, 0x0.ffffffffffffffffp0L, -0x1p-16382L, 7.853981633974483095885557915077381101984e-1L, -1.681051571556046753222468896957938166365e-4932L, UNDERFLOW_EXCEPTION); + TEST_c_c (catan, -0x0.ffffffffffffffffp0L, 0x1p-16382L, -7.853981633974483095885557915077381101984e-1L, 1.681051571556046753222468896957938166365e-4932L, UNDERFLOW_EXCEPTION); + TEST_c_c (catan, -0x0.ffffffffffffffffp0L, -0x1p-16382L, -7.853981633974483095885557915077381101984e-1L, -1.681051571556046753222468896957938166365e-4932L, UNDERFLOW_EXCEPTION); + TEST_c_c (catan, 0x1p-16382L, 0x0.ffffffffffffffffp0L, 3.100992811520163369065387859792822623745e-4913L, 2.252728336819822255604649142023466965703e1L); + TEST_c_c (catan, -0x1p-16382L, 0x0.ffffffffffffffffp0L, -3.100992811520163369065387859792822623745e-4913L, 2.252728336819822255604649142023466965703e1L); + TEST_c_c (catan, 0x1p-16382L, -0x0.ffffffffffffffffp0L, 3.100992811520163369065387859792822623745e-4913L, -2.252728336819822255604649142023466965703e1L); + TEST_c_c (catan, -0x1p-16382L, -0x0.ffffffffffffffffp0L, -3.100992811520163369065387859792822623745e-4913L, -2.252728336819822255604649142023466965703e1L); +# if LDBL_MANT_DIG >= 113 + TEST_c_c (catan, 0x1.0000000000000000000000000001p0L, 0x1p-16382L, 7.853981633974483096156608458198758173458e-1L, 1.681051571556046753131338908660875977540e-4932L, UNDERFLOW_EXCEPTION); + TEST_c_c (catan, 0x1.0000000000000000000000000001p0L, -0x1p-16382L, 7.853981633974483096156608458198758173458e-1L, -1.681051571556046753131338908660875977540e-4932L, UNDERFLOW_EXCEPTION); + TEST_c_c (catan, -0x1.0000000000000000000000000001p0L, 0x1p-16382L, -7.853981633974483096156608458198758173458e-1L, 1.681051571556046753131338908660875977540e-4932L, UNDERFLOW_EXCEPTION); + TEST_c_c (catan, -0x1.0000000000000000000000000001p0L, -0x1p-16382L, -7.853981633974483096156608458198758173458e-1L, -1.681051571556046753131338908660875977540e-4932L, UNDERFLOW_EXCEPTION); + TEST_c_c (catan, 0x1p-16382L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 3.916281570163690998207361486238697614441e1L); + TEST_c_c (catan, -0x1p-16382L, 0x1.0000000000000000000000000001p0L, -1.570796326794896619231321691639751442099L, 3.916281570163690998207361486238697614441e1L); + TEST_c_c (catan, 0x1p-16382L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -3.916281570163690998207361486238697614441e1L); + TEST_c_c (catan, -0x1p-16382L, -0x1.0000000000000000000000000001p0L, -1.570796326794896619231321691639751442099L, -3.916281570163690998207361486238697614441e1L); + TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-16382L, 7.853981633974483096156608458198756729010e-1L, 1.681051571556046753131338908660876463178e-4932L, UNDERFLOW_EXCEPTION); + TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-16382L, 7.853981633974483096156608458198756729010e-1L, -1.681051571556046753131338908660876463178e-4932L, UNDERFLOW_EXCEPTION); + TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-16382L, -7.853981633974483096156608458198756729010e-1L, 1.681051571556046753131338908660876463178e-4932L, UNDERFLOW_EXCEPTION); + TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-16382L, -7.853981633974483096156608458198756729010e-1L, -1.681051571556046753131338908660876463178e-4932L, UNDERFLOW_EXCEPTION); + TEST_c_c (catan, 0x1p-16382L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.745703758805099310527547423749501866998e-4898L, 3.950938929191688263678223092311606435623e1L); + TEST_c_c (catan, -0x1p-16382L, 0x0.ffffffffffffffffffffffffffff8p0L, -1.745703758805099310527547423749501866998e-4898L, 3.950938929191688263678223092311606435623e1L); + TEST_c_c (catan, 0x1p-16382L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.745703758805099310527547423749501866998e-4898L, -3.950938929191688263678223092311606435623e1L); + TEST_c_c (catan, -0x1p-16382L, -0x0.ffffffffffffffffffffffffffff8p0L, -1.745703758805099310527547423749501866998e-4898L, -3.950938929191688263678223092311606435623e1L); +# endif +#endif TEST_c_c (catan, 0.75L, 1.25L, 1.10714871779409050301706546017853704L, 0.549306144334054845697622618461262852L); TEST_c_c (catan, -2, -3, -1.4099210495965755225306193844604208L, -0.22907268296853876629588180294200276L); @@ -4935,6 +5121,192 @@ catanh_test (void) TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-57L, 2.010126823623841397309973152228712040498e1L, -7.853981633974483044114904178894544378135e-1L); TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-57L, -2.010126823623841397309973152228712040498e1L, -7.853981633974483044114904178894544378135e-1L); #endif + TEST_c_c (catanh, 1.0L, 0x1p-64L, 2.252728336819822255606004394739073846245e1L, 7.853981633974483096292133729759445264744e-1L); + TEST_c_c (catanh, 1.0L, -0x1p-64L, 2.252728336819822255606004394739073846245e1L, -7.853981633974483096292133729759445264744e-1L); + TEST_c_c (catanh, -1.0L, 0x1p-64L, -2.252728336819822255606004394739073846245e1L, 7.853981633974483096292133729759445264744e-1L); + TEST_c_c (catanh, -1.0L, -0x1p-64L, -2.252728336819822255606004394739073846245e1L, -7.853981633974483096292133729759445264744e-1L); + TEST_c_c (catanh, 0x1p-64L, 1.0L, 2.710505431213761085018632002174854278563e-20L, 7.853981633974483096156608458198757210500e-1L); + TEST_c_c (catanh, -0x1p-64L, 1.0L, -2.710505431213761085018632002174854278563e-20L, 7.853981633974483096156608458198757210500e-1L); + TEST_c_c (catanh, 0x1p-64L, -1.0L, 2.710505431213761085018632002174854278563e-20L, -7.853981633974483096156608458198757210500e-1L); + TEST_c_c (catanh, -0x1p-64L, -1.0L, -2.710505431213761085018632002174854278563e-20L, -7.853981633974483096156608458198757210500e-1L); + TEST_c_c (catanh, 1.0L, 0x1.3p-73L, 2.556052055225464683726753902092495938633e1L, 7.853981633974483096156922786831527361009e-1L); + TEST_c_c (catanh, 1.0L, -0x1.3p-73L, 2.556052055225464683726753902092495938633e1L, -7.853981633974483096156922786831527361009e-1L); + TEST_c_c (catanh, -1.0L, 0x1.3p-73L, -2.556052055225464683726753902092495938633e1L, 7.853981633974483096156922786831527361009e-1L); + TEST_c_c (catanh, -1.0L, -0x1.3p-73L, -2.556052055225464683726753902092495938633e1L, -7.853981633974483096156922786831527361009e-1L); + TEST_c_c (catanh, 0x1.3p-73L, 1.0L, 6.286572655403010329022706059731717687100e-23L, 7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, -0x1.3p-73L, 1.0L, -6.286572655403010329022706059731717687100e-23L, 7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, 0x1.3p-73L, -1.0L, 6.286572655403010329022706059731717687100e-23L, -7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, -0x1.3p-73L, -1.0L, -6.286572655403010329022706059731717687100e-23L, -7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, 1.0L, 0x1p-124L, 4.332169878499658183857700759113603550472e1L, 7.853981633974483096156608458198757210610e-1L); + TEST_c_c (catanh, 1.0L, -0x1p-124L, 4.332169878499658183857700759113603550472e1L, -7.853981633974483096156608458198757210610e-1L); + TEST_c_c (catanh, -1.0L, 0x1p-124L, -4.332169878499658183857700759113603550472e1L, 7.853981633974483096156608458198757210610e-1L); + TEST_c_c (catanh, -1.0L, -0x1p-124L, -4.332169878499658183857700759113603550472e1L, -7.853981633974483096156608458198757210610e-1L); + TEST_c_c (catanh, 0x1p-124L, 1.0L, 2.350988701644575015937473074444491355637e-38L, 7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, -0x1p-124L, 1.0L, -2.350988701644575015937473074444491355637e-38L, 7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, 0x1p-124L, -1.0L, 2.350988701644575015937473074444491355637e-38L, -7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, -0x1p-124L, -1.0L, -2.350988701644575015937473074444491355637e-38L, -7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, 0x1.000002p0L, 0x1p-126L, 8.317766196521665212523713550410777685446L, 1.570796326794896619231321691639702138295L); + TEST_c_c (catanh, 0x1.000002p0L, -0x1p-126L, 8.317766196521665212523713550410777685446L, -1.570796326794896619231321691639702138295L); + TEST_c_c (catanh, -0x1.000002p0L, 0x1p-126L, -8.317766196521665212523713550410777685446L, 1.570796326794896619231321691639702138295L); + TEST_c_c (catanh, -0x1.000002p0L, -0x1p-126L, -8.317766196521665212523713550410777685446L, -1.570796326794896619231321691639702138295L); + TEST_c_c (catanh, 0x1p-126L, 0x1.000002p0L, 5.877471053462247139383742414506671233336e-39L, 7.853982230020895322927482174768220815493e-1L, UNDERFLOW_EXCEPTION_FLOAT); + TEST_c_c (catanh, -0x1p-126L, 0x1.000002p0L, -5.877471053462247139383742414506671233336e-39L, 7.853982230020895322927482174768220815493e-1L, UNDERFLOW_EXCEPTION_FLOAT); + TEST_c_c (catanh, 0x1p-126L, -0x1.000002p0L, 5.877471053462247139383742414506671233336e-39L, -7.853982230020895322927482174768220815493e-1L, UNDERFLOW_EXCEPTION_FLOAT); + TEST_c_c (catanh, -0x1p-126L, -0x1.000002p0L, -5.877471053462247139383742414506671233336e-39L, -7.853982230020895322927482174768220815493e-1L, UNDERFLOW_EXCEPTION_FLOAT); + TEST_c_c (catanh, 0x0.ffffffp0L, 0x1p-126L, 8.664339742098154951823135931565866792454L, 9.860761609136244031334147100512154160097e-32L); + TEST_c_c (catanh, 0x0.ffffffp0L, -0x1p-126L, 8.664339742098154951823135931565866792454L, -9.860761609136244031334147100512154160097e-32L); + TEST_c_c (catanh, -0x0.ffffffp0L, 0x1p-126L, -8.664339742098154951823135931565866792454L, 9.860761609136244031334147100512154160097e-32L); + TEST_c_c (catanh, -0x0.ffffffp0L, -0x1p-126L, -8.664339742098154951823135931565866792454L, -9.860761609136244031334147100512154160097e-32L); + TEST_c_c (catanh, 0x1p-126L, 0x0.ffffffp0L, 5.877472104436064061535099214664320916184e-39L, 7.853981335951250337419109991749089175724e-1L, UNDERFLOW_EXCEPTION_FLOAT); + TEST_c_c (catanh, -0x1p-126L, 0x0.ffffffp0L, -5.877472104436064061535099214664320916184e-39L, 7.853981335951250337419109991749089175724e-1L, UNDERFLOW_EXCEPTION_FLOAT); + TEST_c_c (catanh, 0x1p-126L, -0x0.ffffffp0L, 5.877472104436064061535099214664320916184e-39L, -7.853981335951250337419109991749089175724e-1L, UNDERFLOW_EXCEPTION_FLOAT); + TEST_c_c (catanh, -0x1p-126L, -0x0.ffffffp0L, -5.877472104436064061535099214664320916184e-39L, -7.853981335951250337419109991749089175724e-1L, UNDERFLOW_EXCEPTION_FLOAT); +#ifndef TEST_FLOAT + TEST_c_c (catanh, 1.0L, 0x1p-512L, 1.777922518136259718655200391540222897114e2L, 7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, 1.0L, -0x1p-512L, 1.777922518136259718655200391540222897114e2L, -7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, -1.0L, 0x1p-512L, -1.777922518136259718655200391540222897114e2L, 7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, -1.0L, -0x1p-512L, -1.777922518136259718655200391540222897114e2L, -7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, 0x1p-512L, 1.0L, 3.729170365600103371645482657731466918688e-155L, 7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, -0x1p-512L, 1.0L, -3.729170365600103371645482657731466918688e-155L, 7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, 0x1p-512L, -1.0L, 3.729170365600103371645482657731466918688e-155L, -7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, -0x1p-512L, -1.0L, -3.729170365600103371645482657731466918688e-155L, -7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, 1.0L, 0x1.3p-536L, 1.860240928518819859673567751384928348958e2L, 7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, 1.0L, -0x1.3p-536L, 1.860240928518819859673567751384928348958e2L, -7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, -1.0L, 0x1.3p-536L, -1.860240928518819859673567751384928348958e2L, 7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, -1.0L, -0x1.3p-536L, -1.860240928518819859673567751384928348958e2L, -7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, 0x1.3p-536L, 1.0L, 2.639526015013529511588222179446290115084e-162L, 7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, -0x1.3p-536L, 1.0L, -2.639526015013529511588222179446290115084e-162L, 7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, 0x1.3p-536L, -1.0L, 2.639526015013529511588222179446290115084e-162L, -7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, -0x1.3p-536L, -1.0L, -2.639526015013529511588222179446290115084e-162L, -7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, 1.0L, 0x1p-1020L, 3.538516356758520804574969980043991380025e2L, 7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, 1.0L, -0x1p-1020L, 3.538516356758520804574969980043991380025e2L, -7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, -1.0L, 0x1p-1020L, -3.538516356758520804574969980043991380025e2L, 7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, -1.0L, -0x1p-1020L, -3.538516356758520804574969980043991380025e2L, -7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, 0x1p-1020L, 1.0L, 4.450147717014402766180465434664808128438e-308L, 7.853981633974483096156608458198757210493e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM); + TEST_c_c (catanh, -0x1p-1020L, 1.0L, -4.450147717014402766180465434664808128438e-308L, 7.853981633974483096156608458198757210493e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM); + TEST_c_c (catanh, 0x1p-1020L, -1.0L, 4.450147717014402766180465434664808128438e-308L, -7.853981633974483096156608458198757210493e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM); + TEST_c_c (catanh, -0x1p-1020L, -1.0L, -4.450147717014402766180465434664808128438e-308L, -7.853981633974483096156608458198757210493e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM); + TEST_c_c (catanh, 0x1.0000000000001p0L, 0x1p-1022L, 1.836840028483855075506780244989950299369e1L, 1.570796326794896619231321691639751442099L); + TEST_c_c (catanh, 0x1.0000000000001p0L, -0x1p-1022L, 1.836840028483855075506780244989950299369e1L, -1.570796326794896619231321691639751442099L); + TEST_c_c (catanh, -0x1.0000000000001p0L, 0x1p-1022L, -1.836840028483855075506780244989950299369e1L, 1.570796326794896619231321691639751442099L); + TEST_c_c (catanh, -0x1.0000000000001p0L, -0x1p-1022L, -1.836840028483855075506780244989950299369e1L, -1.570796326794896619231321691639751442099L); + TEST_c_c (catanh, 0x1p-1022L, 0x1.0000000000001p0L, 1.112536929253600444512293438042957369978e-308L, 7.853981633974484206379633083355174374608e-1L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catanh, -0x1p-1022L, 0x1.0000000000001p0L, -1.112536929253600444512293438042957369978e-308L, 7.853981633974484206379633083355174374608e-1L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catanh, 0x1p-1022L, -0x1.0000000000001p0L, 1.112536929253600444512293438042957369978e-308L, -7.853981633974484206379633083355174374608e-1L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catanh, -0x1p-1022L, -0x1.0000000000001p0L, -1.112536929253600444512293438042957369978e-308L, -7.853981633974484206379633083355174374608e-1L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catanh, 0x0.fffffffffffff8p0L, 0x1p-1022L, 1.871497387511852332650969166374185305708e1L, 1.002084180004486444624900488355118689113e-292L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM); + TEST_c_c (catanh, 0x0.fffffffffffff8p0L, -0x1p-1022L, 1.871497387511852332650969166374185305708e1L, -1.002084180004486444624900488355118689113e-292L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM); + TEST_c_c (catanh, -0x0.fffffffffffff8p0L, 0x1p-1022L, -1.871497387511852332650969166374185305708e1L, 1.002084180004486444624900488355118689113e-292L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM); + TEST_c_c (catanh, -0x0.fffffffffffff8p0L, -0x1p-1022L, -1.871497387511852332650969166374185305708e1L, -1.002084180004486444624900488355118689113e-292L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM); + TEST_c_c (catanh, 0x1p-1022L, 0x0.fffffffffffff8p0L, 1.112536929253600815061527818977844932790e-308L, 7.853981633974482541045096145620456183798e-1L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catanh, -0x1p-1022L, 0x0.fffffffffffff8p0L, -1.112536929253600815061527818977844932790e-308L, 7.853981633974482541045096145620456183798e-1L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catanh, 0x1p-1022L, -0x0.fffffffffffff8p0L, 1.112536929253600815061527818977844932790e-308L, -7.853981633974482541045096145620456183798e-1L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catanh, -0x1p-1022L, -0x0.fffffffffffff8p0L, -1.112536929253600815061527818977844932790e-308L, -7.853981633974482541045096145620456183798e-1L, UNDERFLOW_EXCEPTION_DOUBLE); +#endif +#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64 + TEST_c_c (catanh, 0x1.0000000000000002p0L, 0x1p-1022L, 2.218070977791824990137853294097378778927e1L, 1.570796326794896619231321691639751442099L); + TEST_c_c (catanh, 0x1.0000000000000002p0L, -0x1p-1022L, 2.218070977791824990137853294097378778927e1L, -1.570796326794896619231321691639751442099L); + TEST_c_c (catanh, -0x1.0000000000000002p0L, 0x1p-1022L, -2.218070977791824990137853294097378778927e1L, 1.570796326794896619231321691639751442099L); + TEST_c_c (catanh, -0x1.0000000000000002p0L, -0x1p-1022L, -2.218070977791824990137853294097378778927e1L, -1.570796326794896619231321691639751442099L); + TEST_c_c (catanh, 0x1p-1022L, 0x1.0000000000000002p0L, 1.112536929253600691424494863099491450042e-308L, 7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catanh, -0x1p-1022L, 0x1.0000000000000002p0L, -1.112536929253600691424494863099491450042e-308L, 7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catanh, 0x1p-1022L, -0x1.0000000000000002p0L, 1.112536929253600691424494863099491450042e-308L, -7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catanh, -0x1p-1022L, -0x1.0000000000000002p0L, -1.112536929253600691424494863099491450042e-308L, -7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, 0x1p-1022L, 2.252728336819822255604649142023466965703e1L, 2.052268400649188124723641491045245971623e-289L); + TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, -0x1p-1022L, 2.252728336819822255604649142023466965703e1L, -2.052268400649188124723641491045245971623e-289L); + TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, 0x1p-1022L, -2.252728336819822255604649142023466965703e1L, 2.052268400649188124723641491045245971623e-289L); + TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, -0x1p-1022L, -2.252728336819822255604649142023466965703e1L, -2.052268400649188124723641491045245971623e-289L); + TEST_c_c (catanh, 0x1p-1022L, 0x0.ffffffffffffffffp0L, 1.112536929253600691605427106449557323148e-308L, 7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catanh, -0x1p-1022L, 0x0.ffffffffffffffffp0L, -1.112536929253600691605427106449557323148e-308L, 7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catanh, 0x1p-1022L, -0x0.ffffffffffffffffp0L, 1.112536929253600691605427106449557323148e-308L, -7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catanh, -0x1p-1022L, -0x0.ffffffffffffffffp0L, -1.112536929253600691605427106449557323148e-308L, -7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION_DOUBLE); +#endif +#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106 + TEST_c_c (catanh, 0x1.000000000000000000000000008p0L, 0x1p-1022L, 3.673680056967710139911330243728336427098e1L, 1.570796326794896619231321691639751442099L); + TEST_c_c (catanh, 0x1.000000000000000000000000008p0L, -0x1p-1022L, 3.673680056967710139911330243728336427098e1L, -1.570796326794896619231321691639751442099L); + TEST_c_c (catanh, -0x1.000000000000000000000000008p0L, 0x1p-1022L, -3.673680056967710139911330243728336427098e1L, 1.570796326794896619231321691639751442099L); + TEST_c_c (catanh, -0x1.000000000000000000000000008p0L, -0x1p-1022L, -3.673680056967710139911330243728336427098e1L, -1.570796326794896619231321691639751442099L); + TEST_c_c (catanh, 0x1p-1022L, 0x1.000000000000000000000000008p0L, 1.112536929253600691545116358666174605957e-308L, 7.853981633974483096156608458198880470009e-1L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catanh, -0x1p-1022L, 0x1.000000000000000000000000008p0L, -1.112536929253600691545116358666174605957e-308L, 7.853981633974483096156608458198880470009e-1L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catanh, 0x1p-1022L, -0x1.000000000000000000000000008p0L, 1.112536929253600691545116358666174605957e-308L, -7.853981633974483096156608458198880470009e-1L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catanh, -0x1p-1022L, -0x1.000000000000000000000000008p0L, -1.112536929253600691545116358666174605957e-308L, -7.853981633974483096156608458198880470009e-1L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-1022L, 3.708337415995707405382191849801244331055e1L, 9.025971879324147880346310405868788320726e-277L); + TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-1022L, 3.708337415995707405382191849801244331055e1L, -9.025971879324147880346310405868788320726e-277L); + TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-1022L, -3.708337415995707405382191849801244331055e1L, 9.025971879324147880346310405868788320726e-277L); + TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-1022L, -3.708337415995707405382191849801244331055e1L, -9.025971879324147880346310405868788320726e-277L); + TEST_c_c (catanh, 0x1p-1022L, 0x0.ffffffffffffffffffffffffffcp0L, 1.112536929253600691545116358666215745186e-308L, 7.853981633974483096156608458198695580735e-1L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catanh, -0x1p-1022L, 0x0.ffffffffffffffffffffffffffcp0L, -1.112536929253600691545116358666215745186e-308L, 7.853981633974483096156608458198695580735e-1L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catanh, 0x1p-1022L, -0x0.ffffffffffffffffffffffffffcp0L, 1.112536929253600691545116358666215745186e-308L, -7.853981633974483096156608458198695580735e-1L, UNDERFLOW_EXCEPTION_DOUBLE); + TEST_c_c (catanh, -0x1p-1022L, -0x0.ffffffffffffffffffffffffffcp0L, -1.112536929253600691545116358666215745186e-308L, -7.853981633974483096156608458198695580735e-1L, UNDERFLOW_EXCEPTION_DOUBLE); +#endif +#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384 + TEST_c_c (catanh, 1.0L, 0x1p-8192L, 2.839477425163815960027691385553420311121e3L, 7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, 1.0L, -0x1p-8192L, 2.839477425163815960027691385553420311121e3L, -7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, -1.0L, 0x1p-8192L, -2.839477425163815960027691385553420311121e3L, 7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, -1.0L, -0x1p-8192L, -2.839477425163815960027691385553420311121e3L, -7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, 0x1p-8192L, 1.0L, 4.584009668887117914053530980121207914891e-2467L, 7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, -0x1p-8192L, 1.0L, -4.584009668887117914053530980121207914891e-2467L, 7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, 0x1p-8192L, -1.0L, 4.584009668887117914053530980121207914891e-2467L, -7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, -0x1p-8192L, -1.0L, -4.584009668887117914053530980121207914891e-2467L, -7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, 1.0L, 0x1.3p-8221L, 2.849442134153471837403071201841536297726e3L, 7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, 1.0L, -0x1.3p-8221L, 2.849442134153471837403071201841536297726e3L, -7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, -1.0L, 0x1.3p-8221L, -2.849442134153471837403071201841536297726e3L, 7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, -1.0L, -0x1.3p-8221L, -2.849442134153471837403071201841536297726e3L, -7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, 0x1.3p-8221L, 1.0L, 1.013933025636421986471594877335044443409e-2475L, 7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, -0x1.3p-8221L, 1.0L, -1.013933025636421986471594877335044443409e-2475L, 7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, 0x1.3p-8221L, -1.0L, 1.013933025636421986471594877335044443409e-2475L, -7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, -0x1.3p-8221L, -1.0L, -1.013933025636421986471594877335044443409e-2475L, -7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, 1.0L, 0x1.3p-8246L, 2.858106473910471153770786603359763504827e3L, 7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, 1.0L, -0x1.3p-8246L, 2.858106473910471153770786603359763504827e3L, -7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, -1.0L, 0x1.3p-8246L, -2.858106473910471153770786603359763504827e3L, 7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, -1.0L, -0x1.3p-8246L, -2.858106473910471153770786603359763504827e3L, -7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, 0x1.3p-8246L, 1.0L, 3.021755890954798419688924781486524472858e-2483L, 7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, -0x1.3p-8246L, 1.0L, -3.021755890954798419688924781486524472858e-2483L, 7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, 0x1.3p-8246L, -1.0L, 3.021755890954798419688924781486524472858e-2483L, -7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, -0x1.3p-8246L, -1.0L, -3.021755890954798419688924781486524472858e-2483L, -7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, 1.0L, 0x1p-16380L, 5.677221982376232056781839690803195180822e3L, 7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, 1.0L, -0x1p-16380L, 5.677221982376232056781839690803195180822e3L, -7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, -1.0L, 0x1p-16380L, -5.677221982376232056781839690803195180822e3L, 7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, -1.0L, -0x1p-16380L, -5.677221982376232056781839690803195180822e3L, -7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, 0x1p-16380L, 1.0L, 6.724206286224187012525355634643505205196e-4932L, 7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, -0x1p-16380L, 1.0L, -6.724206286224187012525355634643505205196e-4932L, 7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, 0x1p-16380L, -1.0L, 6.724206286224187012525355634643505205196e-4932L, -7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, -0x1p-16380L, -1.0L, -6.724206286224187012525355634643505205196e-4932L, -7.853981633974483096156608458198757210493e-1L); + TEST_c_c (catanh, 0x1.0000000000000002p0L, 0x1p-16382L, 2.218070977791824990137853294097378778927e1L, 1.570796326794896619231321691639751442099L); + TEST_c_c (catanh, 0x1.0000000000000002p0L, -0x1p-16382L, 2.218070977791824990137853294097378778927e1L, -1.570796326794896619231321691639751442099L); + TEST_c_c (catanh, -0x1.0000000000000002p0L, 0x1p-16382L, -2.218070977791824990137853294097378778927e1L, 1.570796326794896619231321691639751442099L); + TEST_c_c (catanh, -0x1.0000000000000002p0L, -0x1p-16382L, -2.218070977791824990137853294097378778927e1L, -1.570796326794896619231321691639751442099L); + TEST_c_c (catanh, 0x1p-16382L, 0x1.0000000000000002p0L, 1.681051571556046752949078932066752571182e-4932L, 7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION); + TEST_c_c (catanh, -0x1p-16382L, 0x1.0000000000000002p0L, -1.681051571556046752949078932066752571182e-4932L, 7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION); + TEST_c_c (catanh, 0x1p-16382L, -0x1.0000000000000002p0L, 1.681051571556046752949078932066752571182e-4932L, -7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION); + TEST_c_c (catanh, -0x1p-16382L, -0x1.0000000000000002p0L, -1.681051571556046752949078932066752571182e-4932L, -7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION); + TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, 0x1p-16382L, 2.252728336819822255604649142023466965703e1L, 3.100992811520163369065387859792822623745e-4913L); + TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, -0x1p-16382L, 2.252728336819822255604649142023466965703e1L, -3.100992811520163369065387859792822623745e-4913L); + TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, 0x1p-16382L, -2.252728336819822255604649142023466965703e1L, 3.100992811520163369065387859792822623745e-4913L); + TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, -0x1p-16382L, -2.252728336819822255604649142023466965703e1L, -3.100992811520163369065387859792822623745e-4913L); + TEST_c_c (catanh, 0x1p-16382L, 0x0.ffffffffffffffffp0L, 1.681051571556046753222468896957938166365e-4932L, 7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION); + TEST_c_c (catanh, -0x1p-16382L, 0x0.ffffffffffffffffp0L, -1.681051571556046753222468896957938166365e-4932L, 7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION); + TEST_c_c (catanh, 0x1p-16382L, -0x0.ffffffffffffffffp0L, 1.681051571556046753222468896957938166365e-4932L, -7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION); + TEST_c_c (catanh, -0x1p-16382L, -0x0.ffffffffffffffffp0L, -1.681051571556046753222468896957938166365e-4932L, -7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION); +# if LDBL_MANT_DIG >= 113 + TEST_c_c (catanh, 0x1.0000000000000000000000000001p0L, 0x1p-16382L, 3.916281570163690998207361486238697614441e1L, 1.570796326794896619231321691639751442099L); + TEST_c_c (catanh, 0x1.0000000000000000000000000001p0L, -0x1p-16382L, 3.916281570163690998207361486238697614441e1L, -1.570796326794896619231321691639751442099L); + TEST_c_c (catanh, -0x1.0000000000000000000000000001p0L, 0x1p-16382L, -3.916281570163690998207361486238697614441e1L, 1.570796326794896619231321691639751442099L); + TEST_c_c (catanh, -0x1.0000000000000000000000000001p0L, -0x1p-16382L, -3.916281570163690998207361486238697614441e1L, -1.570796326794896619231321691639751442099L); + TEST_c_c (catanh, 0x1p-16382L, 0x1.0000000000000000000000000001p0L, 1.681051571556046753131338908660875977540e-4932L, 7.853981633974483096156608458198758173458e-1L, UNDERFLOW_EXCEPTION); + TEST_c_c (catanh, -0x1p-16382L, 0x1.0000000000000000000000000001p0L, -1.681051571556046753131338908660875977540e-4932L, 7.853981633974483096156608458198758173458e-1L, UNDERFLOW_EXCEPTION); + TEST_c_c (catanh, 0x1p-16382L, -0x1.0000000000000000000000000001p0L, 1.681051571556046753131338908660875977540e-4932L, -7.853981633974483096156608458198758173458e-1L, UNDERFLOW_EXCEPTION); + TEST_c_c (catanh, -0x1p-16382L, -0x1.0000000000000000000000000001p0L, -1.681051571556046753131338908660875977540e-4932L, -7.853981633974483096156608458198758173458e-1L, UNDERFLOW_EXCEPTION); + TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-16382L, 3.950938929191688263678223092311606435623e1L, 1.745703758805099310527547423749501866998e-4898L); + TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-16382L, 3.950938929191688263678223092311606435623e1L, -1.745703758805099310527547423749501866998e-4898L); + TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-16382L, -3.950938929191688263678223092311606435623e1L, 1.745703758805099310527547423749501866998e-4898L); + TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-16382L, -3.950938929191688263678223092311606435623e1L, -1.745703758805099310527547423749501866998e-4898L); + TEST_c_c (catanh, 0x1p-16382L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.681051571556046753131338908660876463178e-4932L, 7.853981633974483096156608458198756729010e-1L, UNDERFLOW_EXCEPTION); + TEST_c_c (catanh, -0x1p-16382L, 0x0.ffffffffffffffffffffffffffff8p0L, -1.681051571556046753131338908660876463178e-4932L, 7.853981633974483096156608458198756729010e-1L, UNDERFLOW_EXCEPTION); + TEST_c_c (catanh, 0x1p-16382L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.681051571556046753131338908660876463178e-4932L, -7.853981633974483096156608458198756729010e-1L, UNDERFLOW_EXCEPTION); + TEST_c_c (catanh, -0x1p-16382L, -0x0.ffffffffffffffffffffffffffff8p0L, -1.681051571556046753131338908660876463178e-4932L, -7.853981633974483096156608458198756729010e-1L, UNDERFLOW_EXCEPTION); +# endif +#endif TEST_c_c (catanh, 0.75L, 1.25L, 0.261492138795671927078652057366532140L, 0.996825126463918666098902241310446708L); TEST_c_c (catanh, -2, -3, -0.14694666622552975204743278515471595L, -1.3389725222944935611241935759091443L); diff --git a/math/s_catan.c b/math/s_catan.c index 3a041f2..4da0a0d 100644 --- a/math/s_catan.c +++ b/math/s_catan.c @@ -77,7 +77,7 @@ __catan (__complex__ double x) } else { - double r2, num, den, f, absx, absy; + double den, absx, absy; absx = fabs (__real__ x); absy = fabs (__imag__ x); @@ -88,10 +88,10 @@ __catan (__complex__ double x) absy = t; } - if (absx >= 1.0) - den = (1.0 - absx) * (1.0 + absx) - absy * absy; - else if (absx >= 0.75 && absy < DBL_EPSILON / 2.0) + if (absy < DBL_EPSILON / 2.0) den = (1.0 - absx) * (1.0 + absx); + else if (absx >= 1.0) + den = (1.0 - absx) * (1.0 + absx) - absy * absy; else if (absx >= 0.75 || absy >= 0.5) den = -__x2y2m1 (absx, absy); else @@ -99,21 +99,31 @@ __catan (__complex__ double x) __real__ res = 0.5 * __ieee754_atan2 (2.0 * __real__ x, den); - r2 = __real__ x * __real__ x; + if (fabs (__imag__ x) == 1.0 + && fabs (__real__ x) < DBL_EPSILON * DBL_EPSILON) + __imag__ res = (__copysign (0.5, __imag__ x) + * (M_LN2 - __ieee754_log (fabs (__real__ x)))); + else + { + double r2 = 0.0, num, f; - num = __imag__ x + 1.0; - num = r2 + num * num; + if (fabs (__real__ x) >= DBL_EPSILON * DBL_EPSILON) + r2 = __real__ x * __real__ x; - den = __imag__ x - 1.0; - den = r2 + den * den; + num = __imag__ x + 1.0; + num = r2 + num * num; - f = num / den; - if (f < 0.5) - __imag__ res = 0.25 * __ieee754_log (f); - else - { - num = 4.0 * __imag__ x; - __imag__ res = 0.25 * __log1p (num / den); + den = __imag__ x - 1.0; + den = r2 + den * den; + + f = num / den; + if (f < 0.5) + __imag__ res = 0.25 * __ieee754_log (f); + else + { + num = 4.0 * __imag__ x; + __imag__ res = 0.25 * __log1p (num / den); + } } } diff --git a/math/s_catanf.c b/math/s_catanf.c index 698e2af..0713565 100644 --- a/math/s_catanf.c +++ b/math/s_catanf.c @@ -78,7 +78,7 @@ __catanf (__complex__ float x) } else { - float r2, num, den, f, absx, absy; + float den, absx, absy; absx = fabsf (__real__ x); absy = fabsf (__imag__ x); @@ -89,10 +89,10 @@ __catanf (__complex__ float x) absy = t; } - if (absx >= 1.0f) - den = (1.0f - absx) * (1.0f + absx) - absy * absy; - else if (absx >= 0.75f && absy < FLT_EPSILON / 2.0f) + if (absy < FLT_EPSILON / 2.0f) den = (1.0f - absx) * (1.0f + absx); + else if (absx >= 1.0f) + den = (1.0f - absx) * (1.0f + absx) - absy * absy; else if (absx >= 0.75f || absy >= 0.5f) den = -__x2y2m1f (absx, absy); else @@ -100,21 +100,32 @@ __catanf (__complex__ float x) __real__ res = 0.5f * __ieee754_atan2f (2.0f * __real__ x, den); - r2 = __real__ x * __real__ x; + if (fabsf (__imag__ x) == 1.0f + && fabsf (__real__ x) < FLT_EPSILON * FLT_EPSILON) + __imag__ res = (__copysignf (0.5f, __imag__ x) + * ((float) M_LN2 + - __ieee754_logf (fabsf (__real__ x)))); + else + { + float r2 = 0.0f, num, f; - num = __imag__ x + 1.0f; - num = r2 + num * num; + if (fabsf (__real__ x) >= FLT_EPSILON * FLT_EPSILON) + r2 = __real__ x * __real__ x; - den = __imag__ x - 1.0f; - den = r2 + den * den; + num = __imag__ x + 1.0f; + num = r2 + num * num; - f = num / den; - if (f < 0.5f) - __imag__ res = 0.25f * __ieee754_logf (f); - else - { - num = 4.0f * __imag__ x; - __imag__ res = 0.25f * __log1pf (num / den); + den = __imag__ x - 1.0f; + den = r2 + den * den; + + f = num / den; + if (f < 0.5f) + __imag__ res = 0.25f * __ieee754_logf (f); + else + { + num = 4.0f * __imag__ x; + __imag__ res = 0.25f * __log1pf (num / den); + } } } diff --git a/math/s_catanh.c b/math/s_catanh.c index 5248cbc..54be9f9 100644 --- a/math/s_catanh.c +++ b/math/s_catanh.c @@ -72,24 +72,33 @@ __catanh (__complex__ double x) } else { - double i2 = __imag__ x * __imag__ x; + if (fabs (__real__ x) == 1.0 + && fabs (__imag__ x) < DBL_EPSILON * DBL_EPSILON) + __real__ res = (__copysign (0.5, __real__ x) + * (M_LN2 - __ieee754_log (fabs (__imag__ x)))); + else + { + double i2 = 0.0; + if (fabs (__imag__ x) >= DBL_EPSILON * DBL_EPSILON) + i2 = __imag__ x * __imag__ x; - double num = 1.0 + __real__ x; - num = i2 + num * num; + double num = 1.0 + __real__ x; + num = i2 + num * num; - double den = 1.0 - __real__ x; - den = i2 + den * den; + double den = 1.0 - __real__ x; + den = i2 + den * den; - double f = num / den; - if (f < 0.5) - __real__ res = 0.25 * __ieee754_log (f); - else - { - num = 4.0 * __real__ x; - __real__ res = 0.25 * __log1p (num / den); + double f = num / den; + if (f < 0.5) + __real__ res = 0.25 * __ieee754_log (f); + else + { + num = 4.0 * __real__ x; + __real__ res = 0.25 * __log1p (num / den); + } } - double absx, absy; + double absx, absy, den; absx = fabs (__real__ x); absy = fabs (__imag__ x); @@ -100,10 +109,10 @@ __catanh (__complex__ double x) absy = t; } - if (absx >= 1.0) - den = (1.0 - absx) * (1.0 + absx) - absy * absy; - else if (absx >= 0.75 && absy < DBL_EPSILON / 2.0) + if (absy < DBL_EPSILON / 2.0) den = (1.0 - absx) * (1.0 + absx); + else if (absx >= 1.0) + den = (1.0 - absx) * (1.0 + absx) - absy * absy; else if (absx >= 0.75 || absy >= 0.5) den = -__x2y2m1 (absx, absy); else diff --git a/math/s_catanhf.c b/math/s_catanhf.c index 249deb5..0a08b95 100644 --- a/math/s_catanhf.c +++ b/math/s_catanhf.c @@ -73,24 +73,34 @@ __catanhf (__complex__ float x) } else { - float i2 = __imag__ x * __imag__ x; + if (fabsf (__real__ x) == 1.0f + && fabsf (__imag__ x) < FLT_EPSILON * FLT_EPSILON) + __real__ res = (__copysignf (0.5f, __real__ x) + * ((float) M_LN2 + - __ieee754_logf (fabsf (__imag__ x)))); + else + { + float i2 = 0.0f; + if (fabsf (__imag__ x) >= FLT_EPSILON * FLT_EPSILON) + i2 = __imag__ x * __imag__ x; - float num = 1.0f + __real__ x; - num = i2 + num * num; + float num = 1.0f + __real__ x; + num = i2 + num * num; - float den = 1.0f - __real__ x; - den = i2 + den * den; + float den = 1.0f - __real__ x; + den = i2 + den * den; - float f = num / den; - if (f < 0.5f) - __real__ res = 0.25f * __ieee754_logf (f); - else - { - num = 4.0f * __real__ x; - __real__ res = 0.25f * __log1pf (num / den); + float f = num / den; + if (f < 0.5f) + __real__ res = 0.25f * __ieee754_logf (f); + else + { + num = 4.0f * __real__ x; + __real__ res = 0.25f * __log1pf (num / den); + } } - float absx, absy; + float absx, absy, den; absx = fabsf (__real__ x); absy = fabsf (__imag__ x); @@ -101,10 +111,10 @@ __catanhf (__complex__ float x) absy = t; } - if (absx >= 1.0f) - den = (1.0f - absx) * (1.0f + absx) - absy * absy; - else if (absx >= 0.75f && absy < FLT_EPSILON / 2.0f) + if (absy < FLT_EPSILON / 2.0f) den = (1.0f - absx) * (1.0f + absx); + else if (absx >= 1.0f) + den = (1.0f - absx) * (1.0f + absx) - absy * absy; else if (absx >= 0.75f || absy >= 0.5f) den = -__x2y2m1f (absx, absy); else diff --git a/math/s_catanhl.c b/math/s_catanhl.c index ab75b80..8c4b894 100644 --- a/math/s_catanhl.c +++ b/math/s_catanhl.c @@ -80,24 +80,33 @@ __catanhl (__complex__ long double x) } else { - long double i2 = __imag__ x * __imag__ x; - - long double num = 1.0L + __real__ x; - num = i2 + num * num; - - long double den = 1.0L - __real__ x; - den = i2 + den * den; - - long double f = num / den; - if (f < 0.5L) - __real__ res = 0.25L * __ieee754_logl (f); + if (fabsl (__real__ x) == 1.0L + && fabsl (__imag__ x) < LDBL_EPSILON * LDBL_EPSILON) + __real__ res = (__copysignl (0.5L, __real__ x) + * (M_LN2l - __ieee754_logl (fabsl (__imag__ x)))); else { - num = 4.0L * __real__ x; - __real__ res = 0.25L * __log1pl (num / den); + long double i2 = 0.0; + if (fabsl (__imag__ x) >= LDBL_EPSILON * LDBL_EPSILON) + i2 = __imag__ x * __imag__ x; + + long double num = 1.0L + __real__ x; + num = i2 + num * num; + + long double den = 1.0L - __real__ x; + den = i2 + den * den; + + long double f = num / den; + if (f < 0.5L) + __real__ res = 0.25L * __ieee754_logl (f); + else + { + num = 4.0L * __real__ x; + __real__ res = 0.25L * __log1pl (num / den); + } } - long double absx, absy; + long double absx, absy, den; absx = fabsl (__real__ x); absy = fabsl (__imag__ x); @@ -108,10 +117,10 @@ __catanhl (__complex__ long double x) absy = t; } - if (absx >= 1.0L) - den = (1.0L - absx) * (1.0L + absx) - absy * absy; - else if (absx >= 0.75 && absy < LDBL_EPSILON / 2.0L) + if (absy < LDBL_EPSILON / 2.0L) den = (1.0L - absx) * (1.0L + absx); + else if (absx >= 1.0L) + den = (1.0L - absx) * (1.0L + absx) - absy * absy; else if (absx >= 0.75L || absy >= 0.5L) den = -__x2y2m1l (absx, absy); else diff --git a/math/s_catanl.c b/math/s_catanl.c index 1a815ad..9bb5e01 100644 --- a/math/s_catanl.c +++ b/math/s_catanl.c @@ -85,7 +85,7 @@ __catanl (__complex__ long double x) } else { - long double r2, num, den, f, absx, absy; + long double den, absx, absy; absx = fabsl (__real__ x); absy = fabsl (__imag__ x); @@ -96,10 +96,10 @@ __catanl (__complex__ long double x) absy = t; } - if (absx >= 1.0L) - den = (1.0L - absx) * (1.0L + absx) - absy * absy; - else if (absx >= 0.75L && absy < LDBL_EPSILON / 2.0L) + if (absy < LDBL_EPSILON / 2.0L) den = (1.0L - absx) * (1.0L + absx); + else if (absx >= 1.0L) + den = (1.0L - absx) * (1.0L + absx) - absy * absy; else if (absx >= 0.75L || absy >= 0.5L) den = -__x2y2m1l (absx, absy); else @@ -107,21 +107,31 @@ __catanl (__complex__ long double x) __real__ res = 0.5L * __ieee754_atan2l (2.0L * __real__ x, den); - r2 = __real__ x * __real__ x; + if (fabsl (__imag__ x) == 1.0L + && fabsl (__real__ x) < LDBL_EPSILON * LDBL_EPSILON) + __imag__ res = (__copysignl (0.5L, __imag__ x) + * (M_LN2l - __ieee754_logl (fabsl (__real__ x)))); + else + { + long double r2 = 0.0L, num, f; - num = __imag__ x + 1.0L; - num = r2 + num * num; + if (fabsl (__real__ x) >= LDBL_EPSILON * LDBL_EPSILON) + r2 = __real__ x * __real__ x; - den = __imag__ x - 1.0L; - den = r2 + den * den; + num = __imag__ x + 1.0L; + num = r2 + num * num; - f = num / den; - if (f < 0.5L) - __imag__ res = 0.25L * __ieee754_logl (f); - else - { - num = 4.0L * __imag__ x; - __imag__ res = 0.25L * __log1pl (num / den); + den = __imag__ x - 1.0L; + den = r2 + den * den; + + f = num / den; + if (f < 0.5L) + __imag__ res = 0.25L * __ieee754_logl (f); + else + { + num = 4.0L * __imag__ x; + __imag__ res = 0.25L * __log1pl (num / den); + } } } diff --git a/sysdeps/i386/fpu/libm-test-ulps b/sysdeps/i386/fpu/libm-test-ulps index a3f5844..0815592 100644 --- a/sysdeps/i386/fpu/libm-test-ulps +++ b/sysdeps/i386/fpu/libm-test-ulps @@ -3497,6 +3497,12 @@ ldouble: 1 Test "Imaginary part of: catan (-0x1.000002p0 - 0x1p-13 i) == -7.853982267273793866654490522673596014524e-1 - 6.103514882246036852433556327261700380577e-5 i": double: 1 idouble: 1 +Test "Imaginary part of: catan (-0x1.3p-73 + 1.0 i) == -7.853981633974483096156922786831527361009e-1 + 2.556052055225464683726753902092495938633e1 i": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (-0x1.3p-73 - 1.0 i) == -7.853981633974483096156922786831527361009e-1 - 2.556052055225464683726753902092495938633e1 i": +ildouble: 1 +ldouble: 1 Test "Imaginary part of: catan (-0x1.fp1023 + 0x1.fp1023 i) == -1.570796326794896619231321691639751442099 + 2.871063043235098558826106732041811695767e-309 i": ildouble: 1 ldouble: 1 @@ -3509,15 +3515,45 @@ ldouble: 1 Test "Imaginary part of: catan (-0x1.fp127 - 0x1.fp127 i) == -1.570796326794896619231321691639751442097 - 1.516766904286822590927401983512575068153e-39 i": ildouble: 1 ldouble: 1 +Test "Imaginary part of: catan (-0x1p-1020 + 1.0 i) == -7.853981633974483096156608458198757210493e-1 + 3.538516356758520804574969980043991380025e2 i": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (-0x1p-1020 - 1.0 i) == -7.853981633974483096156608458198757210493e-1 - 3.538516356758520804574969980043991380025e2 i": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (-0x1p-1022 + 0x0.ffffffffffffffffp0 i) == -2.052268400649188124723641491045245971623e-289 + 2.252728336819822255604649142023466965703e1 i": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (-0x1p-1022 - 0x0.ffffffffffffffffp0 i) == -2.052268400649188124723641491045245971623e-289 - 2.252728336819822255604649142023466965703e1 i": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (-0x1p-16382 + 0x0.ffffffffffffffffp0 i) == -3.100992811520163369065387859792822623745e-4913 + 2.252728336819822255604649142023466965703e1 i": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (-0x1p-16382 - 0x0.ffffffffffffffffp0 i) == -3.100992811520163369065387859792822623745e-4913 - 2.252728336819822255604649142023466965703e1 i": +ildouble: 1 +ldouble: 1 Test "Imaginary part of: catan (-0x1p-33 + 0x0.ffffffffffffffffp0 i) == -7.853981631937214964185249205444919953948e-1 + 1.178350206951907026002603046195591193050e1 i": ildouble: 1 ldouble: 1 Test "Imaginary part of: catan (-0x1p-33 - 0x0.ffffffffffffffffp0 i) == -7.853981631937214964185249205444919953948e-1 - 1.178350206951907026002603046195591193050e1 i": ildouble: 1 ldouble: 1 +Test "Imaginary part of: catan (-0x1p-64 + 1.0 i) == -7.853981633974483096292133729759445264744e-1 + 2.252728336819822255606004394739073846245e1 i": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (-0x1p-64 - 1.0 i) == -7.853981633974483096292133729759445264744e-1 - 2.252728336819822255606004394739073846245e1 i": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (-1.0 + 0x1p-64 i) == -7.853981633974483096156608458198757210500e-1 + 2.710505431213761085018632002174854278563e-20 i": +ildouble: 1 +ldouble: 1 Test "Imaginary part of: catan (-1.0 - 0x1p-13 i) == -7.853981671227386080775748393881580082970e-1 - 6.103515609841754902688560615027452023669e-5 i": ildouble: 1 ldouble: 1 +Test "Imaginary part of: catan (-1.0 - 0x1p-64 i) == -7.853981633974483096156608458198757210500e-1 - 2.710505431213761085018632002174854278563e-20 i": +ildouble: 1 +ldouble: 1 Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i": double: 1 float: 1 @@ -3540,6 +3576,12 @@ ldouble: 1 Test "Imaginary part of: catan (0x1.000002p0 - 0x1p-13 i) == 7.853982267273793866654490522673596014524e-1 - 6.103514882246036852433556327261700380577e-5 i": double: 1 idouble: 1 +Test "Imaginary part of: catan (0x1.3p-73 + 1.0 i) == 7.853981633974483096156922786831527361009e-1 + 2.556052055225464683726753902092495938633e1 i": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (0x1.3p-73 - 1.0 i) == 7.853981633974483096156922786831527361009e-1 - 2.556052055225464683726753902092495938633e1 i": +ildouble: 1 +ldouble: 1 Test "Imaginary part of: catan (0x1.fp1023 + 0x1.fp1023 i) == 1.570796326794896619231321691639751442099 + 2.871063043235098558826106732041811695767e-309 i": ildouble: 1 ldouble: 1 @@ -3552,20 +3594,62 @@ ldouble: 1 Test "Imaginary part of: catan (0x1.fp127 - 0x1.fp127 i) == 1.570796326794896619231321691639751442097 - 1.516766904286822590927401983512575068153e-39 i": ildouble: 1 ldouble: 1 +Test "Imaginary part of: catan (0x1p-1020 + 1.0 i) == 7.853981633974483096156608458198757210493e-1 + 3.538516356758520804574969980043991380025e2 i": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (0x1p-1020 - 1.0 i) == 7.853981633974483096156608458198757210493e-1 - 3.538516356758520804574969980043991380025e2 i": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (0x1p-1022 + 0x0.ffffffffffffffffp0 i) == 2.052268400649188124723641491045245971623e-289 + 2.252728336819822255604649142023466965703e1 i": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (0x1p-1022 - 0x0.ffffffffffffffffp0 i) == 2.052268400649188124723641491045245971623e-289 - 2.252728336819822255604649142023466965703e1 i": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (0x1p-16382 + 0x0.ffffffffffffffffp0 i) == 3.100992811520163369065387859792822623745e-4913 + 2.252728336819822255604649142023466965703e1 i": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (0x1p-16382 - 0x0.ffffffffffffffffp0 i) == 3.100992811520163369065387859792822623745e-4913 - 2.252728336819822255604649142023466965703e1 i": +ildouble: 1 +ldouble: 1 Test "Imaginary part of: catan (0x1p-33 + 0x0.ffffffffffffffffp0 i) == 7.853981631937214964185249205444919953948e-1 + 1.178350206951907026002603046195591193050e1 i": ildouble: 1 ldouble: 1 Test "Imaginary part of: catan (0x1p-33 - 0x0.ffffffffffffffffp0 i) == 7.853981631937214964185249205444919953948e-1 - 1.178350206951907026002603046195591193050e1 i": ildouble: 1 ldouble: 1 +Test "Imaginary part of: catan (0x1p-64 + 1.0 i) == 7.853981633974483096292133729759445264744e-1 + 2.252728336819822255606004394739073846245e1 i": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (0x1p-64 - 1.0 i) == 7.853981633974483096292133729759445264744e-1 - 2.252728336819822255606004394739073846245e1 i": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (1.0 + 0x1p-64 i) == 7.853981633974483096156608458198757210500e-1 + 2.710505431213761085018632002174854278563e-20 i": +ildouble: 1 +ldouble: 1 Test "Imaginary part of: catan (1.0 - 0x1p-13 i) == 7.853981671227386080775748393881580082970e-1 - 6.103515609841754902688560615027452023669e-5 i": ildouble: 1 ldouble: 1 +Test "Imaginary part of: catan (1.0 - 0x1p-64 i) == 7.853981633974483096156608458198757210500e-1 - 2.710505431213761085018632002174854278563e-20 i": +ildouble: 1 +ldouble: 1 # catanh +Test "Real part of: catanh (-0x0.ffffffffffffffffp0 + 0x1p-1022 i) == -2.252728336819822255604649142023466965703e1 + 2.052268400649188124723641491045245971623e-289 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (-0x0.ffffffffffffffffp0 + 0x1p-16382 i) == -2.252728336819822255604649142023466965703e1 + 3.100992811520163369065387859792822623745e-4913 i": +ildouble: 1 +ldouble: 1 Test "Real part of: catanh (-0x0.ffffffffffffffffp0 + 0x1p-33 i) == -1.178350206951907026002603046195591193050e1 + 7.853981631937214964185249205444919953948e-1 i": ildouble: 1 ldouble: 1 +Test "Real part of: catanh (-0x0.ffffffffffffffffp0 - 0x1p-1022 i) == -2.252728336819822255604649142023466965703e1 - 2.052268400649188124723641491045245971623e-289 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (-0x0.ffffffffffffffffp0 - 0x1p-16382 i) == -2.252728336819822255604649142023466965703e1 - 3.100992811520163369065387859792822623745e-4913 i": +ildouble: 1 +ldouble: 1 Test "Real part of: catanh (-0x0.ffffffffffffffffp0 - 0x1p-33 i) == -1.178350206951907026002603046195591193050e1 - 7.853981631937214964185249205444919953948e-1 i": ildouble: 1 ldouble: 1 @@ -3593,6 +3677,30 @@ idouble: 1 Test "Real part of: catanh (-0x1p-13 - 1.0 i) == -6.103515609841754902688560615027452023669e-5 - 7.853981671227386080775748393881580082970e-1 i": ildouble: 1 ldouble: 1 +Test "Real part of: catanh (-0x1p-64 + 1.0 i) == -2.710505431213761085018632002174854278563e-20 + 7.853981633974483096156608458198757210500e-1 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (-0x1p-64 - 1.0 i) == -2.710505431213761085018632002174854278563e-20 - 7.853981633974483096156608458198757210500e-1 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (-1.0 + 0x1.3p-73 i) == -2.556052055225464683726753902092495938633e1 + 7.853981633974483096156922786831527361009e-1 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (-1.0 + 0x1p-1020 i) == -3.538516356758520804574969980043991380025e2 + 7.853981633974483096156608458198757210493e-1 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (-1.0 + 0x1p-64 i) == -2.252728336819822255606004394739073846245e1 + 7.853981633974483096292133729759445264744e-1 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (-1.0 - 0x1.3p-73 i) == -2.556052055225464683726753902092495938633e1 - 7.853981633974483096156922786831527361009e-1 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (-1.0 - 0x1p-1020 i) == -3.538516356758520804574969980043991380025e2 - 7.853981633974483096156608458198757210493e-1 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (-1.0 - 0x1p-64 i) == -2.252728336819822255606004394739073846245e1 - 7.853981633974483096292133729759445264744e-1 i": +ildouble: 1 +ldouble: 1 Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i": double: 2 float: 1 @@ -3605,9 +3713,21 @@ double: 1 idouble: 1 ildouble: 1 ldouble: 1 +Test "Real part of: catanh (0x0.ffffffffffffffffp0 + 0x1p-1022 i) == 2.252728336819822255604649142023466965703e1 + 2.052268400649188124723641491045245971623e-289 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (0x0.ffffffffffffffffp0 + 0x1p-16382 i) == 2.252728336819822255604649142023466965703e1 + 3.100992811520163369065387859792822623745e-4913 i": +ildouble: 1 +ldouble: 1 Test "Real part of: catanh (0x0.ffffffffffffffffp0 + 0x1p-33 i) == 1.178350206951907026002603046195591193050e1 + 7.853981631937214964185249205444919953948e-1 i": ildouble: 1 ldouble: 1 +Test "Real part of: catanh (0x0.ffffffffffffffffp0 - 0x1p-1022 i) == 2.252728336819822255604649142023466965703e1 - 2.052268400649188124723641491045245971623e-289 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (0x0.ffffffffffffffffp0 - 0x1p-16382 i) == 2.252728336819822255604649142023466965703e1 - 3.100992811520163369065387859792822623745e-4913 i": +ildouble: 1 +ldouble: 1 Test "Real part of: catanh (0x0.ffffffffffffffffp0 - 0x1p-33 i) == 1.178350206951907026002603046195591193050e1 - 7.853981631937214964185249205444919953948e-1 i": ildouble: 1 ldouble: 1 @@ -3651,6 +3771,30 @@ ldouble: 1 Test "Real part of: catanh (0x1p-33 - 0x0.ffffffffffffffffp0 i) == 5.820766091346740722958646680334721192083e-11 - 7.853981633974483095919439232967553115548e-1 i": ildouble: 1 ldouble: 1 +Test "Real part of: catanh (0x1p-64 + 1.0 i) == 2.710505431213761085018632002174854278563e-20 + 7.853981633974483096156608458198757210500e-1 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (0x1p-64 - 1.0 i) == 2.710505431213761085018632002174854278563e-20 - 7.853981633974483096156608458198757210500e-1 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (1.0 + 0x1.3p-73 i) == 2.556052055225464683726753902092495938633e1 + 7.853981633974483096156922786831527361009e-1 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (1.0 + 0x1p-1020 i) == 3.538516356758520804574969980043991380025e2 + 7.853981633974483096156608458198757210493e-1 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (1.0 + 0x1p-64 i) == 2.252728336819822255606004394739073846245e1 + 7.853981633974483096292133729759445264744e-1 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (1.0 - 0x1.3p-73 i) == 2.556052055225464683726753902092495938633e1 - 7.853981633974483096156922786831527361009e-1 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (1.0 - 0x1p-1020 i) == 3.538516356758520804574969980043991380025e2 - 7.853981633974483096156608458198757210493e-1 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (1.0 - 0x1p-64 i) == 2.252728336819822255606004394739073846245e1 - 7.853981633974483096292133729759445264744e-1 i": +ildouble: 1 +ldouble: 1 # cbrt Test "cbrt (-27.0) == -3.0": diff --git a/sysdeps/x86_64/fpu/libm-test-ulps b/sysdeps/x86_64/fpu/libm-test-ulps index 7ef2832..d84a898 100644 --- a/sysdeps/x86_64/fpu/libm-test-ulps +++ b/sysdeps/x86_64/fpu/libm-test-ulps @@ -4222,15 +4222,27 @@ ldouble: 1 Test "Imaginary part of: catan (-0x1.0000000000001p0 - 0x1p-27 i) == -7.853981633974484345157511161499711112683e-1 - 3.725290298461913200853528590596263270474e-9 i": double: 1 idouble: 1 +Test "Real part of: catan (-0x1.000002p0 + 0x1p-126 i) == -7.853982230020895322927482174768220815493e-1 + 5.877471053462247139383742414506671233336e-39 i": +float: 1 +ifloat: 1 Test "Real part of: catan (-0x1.000002p0 + 0x1p-13 i) == -7.853982267273793866654490522673596014524e-1 + 6.103514882246036852433556327261700380577e-5 i": float: 1 ifloat: 1 +Test "Real part of: catan (-0x1.000002p0 - 0x1p-126 i) == -7.853982230020895322927482174768220815493e-1 - 5.877471053462247139383742414506671233336e-39 i": +float: 1 +ifloat: 1 Test "Real part of: catan (-0x1.000002p0 - 0x1p-13 i) == -7.853982267273793866654490522673596014524e-1 - 6.103514882246036852433556327261700380577e-5 i": float: 1 ifloat: 1 Test "Imaginary part of: catan (-0x1.000002p0 - 0x1p-13 i) == -7.853982267273793866654490522673596014524e-1 - 6.103514882246036852433556327261700380577e-5 i": double: 1 idouble: 1 +Test "Imaginary part of: catan (-0x1.3p-73 + 1.0 i) == -7.853981633974483096156922786831527361009e-1 + 2.556052055225464683726753902092495938633e1 i": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (-0x1.3p-73 - 1.0 i) == -7.853981633974483096156922786831527361009e-1 - 2.556052055225464683726753902092495938633e1 i": +ildouble: 1 +ldouble: 1 Test "Imaginary part of: catan (-0x1.fp1023 + 0x1.fp1023 i) == -1.570796326794896619231321691639751442099 + 2.871063043235098558826106732041811695767e-309 i": double: 1 idouble: 1 @@ -4251,6 +4263,22 @@ double: 1 idouble: 1 ildouble: 1 ldouble: 1 +Test "Imaginary part of: catan (-0x1p-1020 + 1.0 i) == -7.853981633974483096156608458198757210493e-1 + 3.538516356758520804574969980043991380025e2 i": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (-0x1p-1020 - 1.0 i) == -7.853981633974483096156608458198757210493e-1 - 3.538516356758520804574969980043991380025e2 i": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (-0x1p-1022 + 0x0.ffffffffffffffffp0 i) == -2.052268400649188124723641491045245971623e-289 + 2.252728336819822255604649142023466965703e1 i": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (-0x1p-1022 - 0x0.ffffffffffffffffp0 i) == -2.052268400649188124723641491045245971623e-289 - 2.252728336819822255604649142023466965703e1 i": +ildouble: 1 +ldouble: 1 Test "Real part of: catan (-0x1p-13 + 0x1.000002p0 i) == -7.859169620684960844300240092596908675974e-1 + 4.852030056234795712498957387213592193975 i": float: 1 ifloat: 1 @@ -4266,6 +4294,12 @@ ifloat: 1 Test "Real part of: catan (-0x1p-13 - 1.0 i) == -7.854286809755354140031716771044626356262e-1 - 4.852030264850939738801379894163661227127 i": float: 1 ifloat: 1 +Test "Imaginary part of: catan (-0x1p-16382 + 0x0.ffffffffffffffffp0 i) == -3.100992811520163369065387859792822623745e-4913 + 2.252728336819822255604649142023466965703e1 i": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (-0x1p-16382 - 0x0.ffffffffffffffffp0 i) == -3.100992811520163369065387859792822623745e-4913 - 2.252728336819822255604649142023466965703e1 i": +ildouble: 1 +ldouble: 1 Test "Real part of: catan (-0x1p-27 + 1.0 i) == -7.853981652600934588466178684534110069553e-1 + 9.704060527839234335310696652368086117807 i": float: 1 ifloat: 1 @@ -4287,15 +4321,33 @@ ifloat: 1 Test "Real part of: catan (-0x1p-54 + 1.0 i) == -7.853981633974483234934486536343324763447e-1 + 1.906154746539849600897388334009985581467e1 i": float: 1 ifloat: 1 +Test "Imaginary part of: catan (-0x1p-54 + 1.0 i) == -7.853981633974483234934486536343324763447e-1 + 1.906154746539849600897388334009985581467e1 i": +float: 1 +ifloat: 1 Test "Real part of: catan (-0x1p-54 - 1.0 i) == -7.853981633974483234934486536343324763447e-1 - 1.906154746539849600897388334009985581467e1 i": float: 1 ifloat: 1 +Test "Imaginary part of: catan (-0x1p-54 - 1.0 i) == -7.853981633974483234934486536343324763447e-1 - 1.906154746539849600897388334009985581467e1 i": +float: 1 +ifloat: 1 Test "Real part of: catan (-0x1p-57 + 1.0 i) == -7.853981633974483113503843217966828154612e-1 + 2.010126823623841397309973152228712047720e1 i": float: 1 ifloat: 1 +Test "Imaginary part of: catan (-0x1p-57 + 1.0 i) == -7.853981633974483113503843217966828154612e-1 + 2.010126823623841397309973152228712047720e1 i": +float: 1 +ifloat: 1 Test "Real part of: catan (-0x1p-57 - 1.0 i) == -7.853981633974483113503843217966828154612e-1 - 2.010126823623841397309973152228712047720e1 i": float: 1 ifloat: 1 +Test "Imaginary part of: catan (-0x1p-57 - 1.0 i) == -7.853981633974483113503843217966828154612e-1 - 2.010126823623841397309973152228712047720e1 i": +float: 1 +ifloat: 1 +Test "Imaginary part of: catan (-0x1p-64 + 1.0 i) == -7.853981633974483096292133729759445264744e-1 + 2.252728336819822255606004394739073846245e1 i": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (-0x1p-64 - 1.0 i) == -7.853981633974483096292133729759445264744e-1 - 2.252728336819822255606004394739073846245e1 i": +ildouble: 1 +ldouble: 1 Test "Real part of: catan (-1.0 + 0x1p-13 i) == -7.853981671227386080775748393881580082970e-1 + 6.103515609841754902688560615027452023669e-5 i": float: 1 ifloat: 1 @@ -4311,6 +4363,9 @@ ifloat: 1 Test "Real part of: catan (-1.0 + 0x1p-57 i) == -7.853981633974483096156608458198757330864e-1 + 3.469446951953614188823848962783813448721e-18 i": float: 1 ifloat: 1 +Test "Imaginary part of: catan (-1.0 + 0x1p-64 i) == -7.853981633974483096156608458198757210500e-1 + 2.710505431213761085018632002174854278563e-20 i": +ildouble: 1 +ldouble: 1 Test "Real part of: catan (-1.0 - 0x1p-13 i) == -7.853981671227386080775748393881580082970e-1 - 6.103515609841754902688560615027452023669e-5 i": float: 1 ifloat: 1 @@ -4329,6 +4384,9 @@ ifloat: 1 Test "Real part of: catan (-1.0 - 0x1p-57 i) == -7.853981633974483096156608458198757330864e-1 - 3.469446951953614188823848962783813448721e-18 i": float: 1 ifloat: 1 +Test "Imaginary part of: catan (-1.0 - 0x1p-64 i) == -7.853981633974483096156608458198757210500e-1 - 2.710505431213761085018632002174854278563e-20 i": +ildouble: 1 +ldouble: 1 Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i": float: 3 ifloat: 3 @@ -4357,15 +4415,27 @@ ldouble: 1 Test "Imaginary part of: catan (0x1.0000000000001p0 - 0x1p-27 i) == 7.853981633974484345157511161499711112683e-1 - 3.725290298461913200853528590596263270474e-9 i": double: 1 idouble: 1 +Test "Real part of: catan (0x1.000002p0 + 0x1p-126 i) == 7.853982230020895322927482174768220815493e-1 + 5.877471053462247139383742414506671233336e-39 i": +float: 1 +ifloat: 1 Test "Real part of: catan (0x1.000002p0 + 0x1p-13 i) == 7.853982267273793866654490522673596014524e-1 + 6.103514882246036852433556327261700380577e-5 i": float: 1 ifloat: 1 +Test "Real part of: catan (0x1.000002p0 - 0x1p-126 i) == 7.853982230020895322927482174768220815493e-1 - 5.877471053462247139383742414506671233336e-39 i": +float: 1 +ifloat: 1 Test "Real part of: catan (0x1.000002p0 - 0x1p-13 i) == 7.853982267273793866654490522673596014524e-1 - 6.103514882246036852433556327261700380577e-5 i": float: 1 ifloat: 1 Test "Imaginary part of: catan (0x1.000002p0 - 0x1p-13 i) == 7.853982267273793866654490522673596014524e-1 - 6.103514882246036852433556327261700380577e-5 i": double: 1 idouble: 1 +Test "Imaginary part of: catan (0x1.3p-73 + 1.0 i) == 7.853981633974483096156922786831527361009e-1 + 2.556052055225464683726753902092495938633e1 i": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (0x1.3p-73 - 1.0 i) == 7.853981633974483096156922786831527361009e-1 - 2.556052055225464683726753902092495938633e1 i": +ildouble: 1 +ldouble: 1 Test "Imaginary part of: catan (0x1.fp1023 + 0x1.fp1023 i) == 1.570796326794896619231321691639751442099 + 2.871063043235098558826106732041811695767e-309 i": double: 1 idouble: 1 @@ -4386,6 +4456,22 @@ double: 1 idouble: 1 ildouble: 1 ldouble: 1 +Test "Imaginary part of: catan (0x1p-1020 + 1.0 i) == 7.853981633974483096156608458198757210493e-1 + 3.538516356758520804574969980043991380025e2 i": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (0x1p-1020 - 1.0 i) == 7.853981633974483096156608458198757210493e-1 - 3.538516356758520804574969980043991380025e2 i": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (0x1p-1022 + 0x0.ffffffffffffffffp0 i) == 2.052268400649188124723641491045245971623e-289 + 2.252728336819822255604649142023466965703e1 i": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (0x1p-1022 - 0x0.ffffffffffffffffp0 i) == 2.052268400649188124723641491045245971623e-289 - 2.252728336819822255604649142023466965703e1 i": +ildouble: 1 +ldouble: 1 Test "Real part of: catan (0x1p-13 + 0x1.000002p0 i) == 7.859169620684960844300240092596908675974e-1 + 4.852030056234795712498957387213592193975 i": float: 1 ifloat: 1 @@ -4401,6 +4487,12 @@ ifloat: 1 Test "Real part of: catan (0x1p-13 - 1.0 i) == 7.854286809755354140031716771044626356262e-1 - 4.852030264850939738801379894163661227127 i": float: 1 ifloat: 1 +Test "Imaginary part of: catan (0x1p-16382 + 0x0.ffffffffffffffffp0 i) == 3.100992811520163369065387859792822623745e-4913 + 2.252728336819822255604649142023466965703e1 i": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (0x1p-16382 - 0x0.ffffffffffffffffp0 i) == 3.100992811520163369065387859792822623745e-4913 - 2.252728336819822255604649142023466965703e1 i": +ildouble: 1 +ldouble: 1 Test "Real part of: catan (0x1p-27 + 1.0 i) == 7.853981652600934588466178684534110069553e-1 + 9.704060527839234335310696652368086117807 i": float: 1 ifloat: 1 @@ -4422,15 +4514,33 @@ ifloat: 1 Test "Real part of: catan (0x1p-54 + 1.0 i) == 7.853981633974483234934486536343324763447e-1 + 1.906154746539849600897388334009985581467e1 i": float: 1 ifloat: 1 +Test "Imaginary part of: catan (0x1p-54 + 1.0 i) == 7.853981633974483234934486536343324763447e-1 + 1.906154746539849600897388334009985581467e1 i": +float: 1 +ifloat: 1 Test "Real part of: catan (0x1p-54 - 1.0 i) == 7.853981633974483234934486536343324763447e-1 - 1.906154746539849600897388334009985581467e1 i": float: 1 ifloat: 1 +Test "Imaginary part of: catan (0x1p-54 - 1.0 i) == 7.853981633974483234934486536343324763447e-1 - 1.906154746539849600897388334009985581467e1 i": +float: 1 +ifloat: 1 Test "Real part of: catan (0x1p-57 + 1.0 i) == 7.853981633974483113503843217966828154612e-1 + 2.010126823623841397309973152228712047720e1 i": float: 1 ifloat: 1 +Test "Imaginary part of: catan (0x1p-57 + 1.0 i) == 7.853981633974483113503843217966828154612e-1 + 2.010126823623841397309973152228712047720e1 i": +float: 1 +ifloat: 1 Test "Real part of: catan (0x1p-57 - 1.0 i) == 7.853981633974483113503843217966828154612e-1 - 2.010126823623841397309973152228712047720e1 i": float: 1 ifloat: 1 +Test "Imaginary part of: catan (0x1p-57 - 1.0 i) == 7.853981633974483113503843217966828154612e-1 - 2.010126823623841397309973152228712047720e1 i": +float: 1 +ifloat: 1 +Test "Imaginary part of: catan (0x1p-64 + 1.0 i) == 7.853981633974483096292133729759445264744e-1 + 2.252728336819822255606004394739073846245e1 i": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (0x1p-64 - 1.0 i) == 7.853981633974483096292133729759445264744e-1 - 2.252728336819822255606004394739073846245e1 i": +ildouble: 1 +ldouble: 1 Test "Real part of: catan (1.0 + 0x1p-13 i) == 7.853981671227386080775748393881580082970e-1 + 6.103515609841754902688560615027452023669e-5 i": float: 1 ifloat: 1 @@ -4446,6 +4556,9 @@ ifloat: 1 Test "Real part of: catan (1.0 + 0x1p-57 i) == 7.853981633974483096156608458198757330864e-1 + 3.469446951953614188823848962783813448721e-18 i": float: 1 ifloat: 1 +Test "Imaginary part of: catan (1.0 + 0x1p-64 i) == 7.853981633974483096156608458198757210500e-1 + 2.710505431213761085018632002174854278563e-20 i": +ildouble: 1 +ldouble: 1 Test "Real part of: catan (1.0 - 0x1p-13 i) == 7.853981671227386080775748393881580082970e-1 - 6.103515609841754902688560615027452023669e-5 i": float: 1 ifloat: 1 @@ -4464,11 +4577,26 @@ ifloat: 1 Test "Real part of: catan (1.0 - 0x1p-57 i) == 7.853981633974483096156608458198757330864e-1 - 3.469446951953614188823848962783813448721e-18 i": float: 1 ifloat: 1 +Test "Imaginary part of: catan (1.0 - 0x1p-64 i) == 7.853981633974483096156608458198757210500e-1 - 2.710505431213761085018632002174854278563e-20 i": +ildouble: 1 +ldouble: 1 # catanh +Test "Real part of: catanh (-0x0.ffffffffffffffffp0 + 0x1p-1022 i) == -2.252728336819822255604649142023466965703e1 + 2.052268400649188124723641491045245971623e-289 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (-0x0.ffffffffffffffffp0 + 0x1p-16382 i) == -2.252728336819822255604649142023466965703e1 + 3.100992811520163369065387859792822623745e-4913 i": +ildouble: 1 +ldouble: 1 Test "Real part of: catanh (-0x0.ffffffffffffffffp0 + 0x1p-33 i) == -1.178350206951907026002603046195591193050e1 + 7.853981631937214964185249205444919953948e-1 i": ildouble: 1 ldouble: 1 +Test "Real part of: catanh (-0x0.ffffffffffffffffp0 - 0x1p-1022 i) == -2.252728336819822255604649142023466965703e1 - 2.052268400649188124723641491045245971623e-289 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (-0x0.ffffffffffffffffp0 - 0x1p-16382 i) == -2.252728336819822255604649142023466965703e1 - 3.100992811520163369065387859792822623745e-4913 i": +ildouble: 1 +ldouble: 1 Test "Real part of: catanh (-0x0.ffffffffffffffffp0 - 0x1p-33 i) == -1.178350206951907026002603046195591193050e1 - 7.853981631937214964185249205444919953948e-1 i": ildouble: 1 ldouble: 1 @@ -4504,6 +4632,12 @@ double: 1 idouble: 1 ildouble: 1 ldouble: 1 +Test "Imaginary part of: catanh (-0x1p-126 + 0x1.000002p0 i) == -5.877471053462247139383742414506671233336e-39 + 7.853982230020895322927482174768220815493e-1 i": +float: 1 +ifloat: 1 +Test "Imaginary part of: catanh (-0x1p-126 - 0x1.000002p0 i) == -5.877471053462247139383742414506671233336e-39 - 7.853982230020895322927482174768220815493e-1 i": +float: 1 +ifloat: 1 Test "Real part of: catanh (-0x1p-13 + 0x1.000002p0 i) == -6.103514882246036852433556327261700380577e-5 + 7.853982267273793866654490522673596014524e-1 i": double: 1 idouble: 1 @@ -4558,6 +4692,20 @@ ifloat: 1 Test "Imaginary part of: catanh (-0x1p-57 - 1.0 i) == -3.469446951953614188823848962783813448721e-18 - 7.853981633974483096156608458198757330864e-1 i": float: 1 ifloat: 1 +Test "Real part of: catanh (-0x1p-64 + 1.0 i) == -2.710505431213761085018632002174854278563e-20 + 7.853981633974483096156608458198757210500e-1 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (-0x1p-64 - 1.0 i) == -2.710505431213761085018632002174854278563e-20 - 7.853981633974483096156608458198757210500e-1 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (-1.0 + 0x1.3p-73 i) == -2.556052055225464683726753902092495938633e1 + 7.853981633974483096156922786831527361009e-1 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (-1.0 + 0x1p-1020 i) == -3.538516356758520804574969980043991380025e2 + 7.853981633974483096156608458198757210493e-1 i": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 Test "Imaginary part of: catanh (-1.0 + 0x1p-13 i) == -4.852030264850939738801379894163661227127 + 7.854286809755354140031716771044626356262e-1 i": float: 1 ifloat: 1 @@ -4567,12 +4715,29 @@ ifloat: 1 Test "Imaginary part of: catanh (-1.0 + 0x1p-33 i) == -1.178350206951907026009379309773625595762e1 + 7.853981634265521400723945494331241018449e-1 i": float: 1 ifloat: 1 +Test "Real part of: catanh (-1.0 + 0x1p-54 i) == -1.906154746539849600897388334009985581467e1 + 7.853981633974483234934486536343324763447e-1 i": +float: 1 +ifloat: 1 Test "Imaginary part of: catanh (-1.0 + 0x1p-54 i) == -1.906154746539849600897388334009985581467e1 + 7.853981633974483234934486536343324763447e-1 i": float: 1 ifloat: 1 +Test "Real part of: catanh (-1.0 + 0x1p-57 i) == -2.010126823623841397309973152228712047720e1 + 7.853981633974483113503843217966828154612e-1 i": +float: 1 +ifloat: 1 Test "Imaginary part of: catanh (-1.0 + 0x1p-57 i) == -2.010126823623841397309973152228712047720e1 + 7.853981633974483113503843217966828154612e-1 i": float: 1 ifloat: 1 +Test "Real part of: catanh (-1.0 + 0x1p-64 i) == -2.252728336819822255606004394739073846245e1 + 7.853981633974483096292133729759445264744e-1 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (-1.0 - 0x1.3p-73 i) == -2.556052055225464683726753902092495938633e1 - 7.853981633974483096156922786831527361009e-1 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (-1.0 - 0x1p-1020 i) == -3.538516356758520804574969980043991380025e2 - 7.853981633974483096156608458198757210493e-1 i": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 Test "Imaginary part of: catanh (-1.0 - 0x1p-13 i) == -4.852030264850939738801379894163661227127 - 7.854286809755354140031716771044626356262e-1 i": float: 1 ifloat: 1 @@ -4582,12 +4747,21 @@ ifloat: 1 Test "Imaginary part of: catanh (-1.0 - 0x1p-33 i) == -1.178350206951907026009379309773625595762e1 - 7.853981634265521400723945494331241018449e-1 i": float: 1 ifloat: 1 +Test "Real part of: catanh (-1.0 - 0x1p-54 i) == -1.906154746539849600897388334009985581467e1 - 7.853981633974483234934486536343324763447e-1 i": +float: 1 +ifloat: 1 Test "Imaginary part of: catanh (-1.0 - 0x1p-54 i) == -1.906154746539849600897388334009985581467e1 - 7.853981633974483234934486536343324763447e-1 i": float: 1 ifloat: 1 +Test "Real part of: catanh (-1.0 - 0x1p-57 i) == -2.010126823623841397309973152228712047720e1 - 7.853981633974483113503843217966828154612e-1 i": +float: 1 +ifloat: 1 Test "Imaginary part of: catanh (-1.0 - 0x1p-57 i) == -2.010126823623841397309973152228712047720e1 - 7.853981633974483113503843217966828154612e-1 i": float: 1 ifloat: 1 +Test "Real part of: catanh (-1.0 - 0x1p-64 i) == -2.252728336819822255606004394739073846245e1 - 7.853981633974483096292133729759445264744e-1 i": +ildouble: 1 +ldouble: 1 Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i": double: 4 idouble: 4 @@ -4604,9 +4778,21 @@ ldouble: 1 Test "Imaginary part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i": float: 6 ifloat: 6 +Test "Real part of: catanh (0x0.ffffffffffffffffp0 + 0x1p-1022 i) == 2.252728336819822255604649142023466965703e1 + 2.052268400649188124723641491045245971623e-289 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (0x0.ffffffffffffffffp0 + 0x1p-16382 i) == 2.252728336819822255604649142023466965703e1 + 3.100992811520163369065387859792822623745e-4913 i": +ildouble: 1 +ldouble: 1 Test "Real part of: catanh (0x0.ffffffffffffffffp0 + 0x1p-33 i) == 1.178350206951907026002603046195591193050e1 + 7.853981631937214964185249205444919953948e-1 i": ildouble: 1 ldouble: 1 +Test "Real part of: catanh (0x0.ffffffffffffffffp0 - 0x1p-1022 i) == 2.252728336819822255604649142023466965703e1 - 2.052268400649188124723641491045245971623e-289 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (0x0.ffffffffffffffffp0 - 0x1p-16382 i) == 2.252728336819822255604649142023466965703e1 - 3.100992811520163369065387859792822623745e-4913 i": +ildouble: 1 +ldouble: 1 Test "Real part of: catanh (0x0.ffffffffffffffffp0 - 0x1p-33 i) == 1.178350206951907026002603046195591193050e1 - 7.853981631937214964185249205444919953948e-1 i": ildouble: 1 ldouble: 1 @@ -4636,6 +4822,12 @@ double: 1 idouble: 1 ildouble: 1 ldouble: 1 +Test "Imaginary part of: catanh (0x1p-126 + 0x1.000002p0 i) == 5.877471053462247139383742414506671233336e-39 + 7.853982230020895322927482174768220815493e-1 i": +float: 1 +ifloat: 1 +Test "Imaginary part of: catanh (0x1p-126 - 0x1.000002p0 i) == 5.877471053462247139383742414506671233336e-39 - 7.853982230020895322927482174768220815493e-1 i": +float: 1 +ifloat: 1 Test "Real part of: catanh (0x1p-13 + 0x0.ffffffp0 i) == 6.103515973639646453881721999956617260502e-5 + 7.853981373204155542484315721351697277336e-1 i": double: 1 float: 1 @@ -4700,6 +4892,20 @@ ifloat: 1 Test "Imaginary part of: catanh (0x1p-57 - 1.0 i) == 3.469446951953614188823848962783813448721e-18 - 7.853981633974483096156608458198757330864e-1 i": float: 1 ifloat: 1 +Test "Real part of: catanh (0x1p-64 + 1.0 i) == 2.710505431213761085018632002174854278563e-20 + 7.853981633974483096156608458198757210500e-1 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (0x1p-64 - 1.0 i) == 2.710505431213761085018632002174854278563e-20 - 7.853981633974483096156608458198757210500e-1 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (1.0 + 0x1.3p-73 i) == 2.556052055225464683726753902092495938633e1 + 7.853981633974483096156922786831527361009e-1 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (1.0 + 0x1p-1020 i) == 3.538516356758520804574969980043991380025e2 + 7.853981633974483096156608458198757210493e-1 i": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 Test "Imaginary part of: catanh (1.0 + 0x1p-13 i) == 4.852030264850939738801379894163661227127 + 7.854286809755354140031716771044626356262e-1 i": float: 1 ifloat: 1 @@ -4709,12 +4915,29 @@ ifloat: 1 Test "Imaginary part of: catanh (1.0 + 0x1p-33 i) == 1.178350206951907026009379309773625595762e1 + 7.853981634265521400723945494331241018449e-1 i": float: 1 ifloat: 1 +Test "Real part of: catanh (1.0 + 0x1p-54 i) == 1.906154746539849600897388334009985581467e1 + 7.853981633974483234934486536343324763447e-1 i": +float: 1 +ifloat: 1 Test "Imaginary part of: catanh (1.0 + 0x1p-54 i) == 1.906154746539849600897388334009985581467e1 + 7.853981633974483234934486536343324763447e-1 i": float: 1 ifloat: 1 +Test "Real part of: catanh (1.0 + 0x1p-57 i) == 2.010126823623841397309973152228712047720e1 + 7.853981633974483113503843217966828154612e-1 i": +float: 1 +ifloat: 1 Test "Imaginary part of: catanh (1.0 + 0x1p-57 i) == 2.010126823623841397309973152228712047720e1 + 7.853981633974483113503843217966828154612e-1 i": float: 1 ifloat: 1 +Test "Real part of: catanh (1.0 + 0x1p-64 i) == 2.252728336819822255606004394739073846245e1 + 7.853981633974483096292133729759445264744e-1 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (1.0 - 0x1.3p-73 i) == 2.556052055225464683726753902092495938633e1 - 7.853981633974483096156922786831527361009e-1 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (1.0 - 0x1p-1020 i) == 3.538516356758520804574969980043991380025e2 - 7.853981633974483096156608458198757210493e-1 i": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 Test "Imaginary part of: catanh (1.0 - 0x1p-13 i) == 4.852030264850939738801379894163661227127 - 7.854286809755354140031716771044626356262e-1 i": float: 1 ifloat: 1 @@ -4724,12 +4947,21 @@ ifloat: 1 Test "Imaginary part of: catanh (1.0 - 0x1p-33 i) == 1.178350206951907026009379309773625595762e1 - 7.853981634265521400723945494331241018449e-1 i": float: 1 ifloat: 1 +Test "Real part of: catanh (1.0 - 0x1p-54 i) == 1.906154746539849600897388334009985581467e1 - 7.853981633974483234934486536343324763447e-1 i": +float: 1 +ifloat: 1 Test "Imaginary part of: catanh (1.0 - 0x1p-54 i) == 1.906154746539849600897388334009985581467e1 - 7.853981633974483234934486536343324763447e-1 i": float: 1 ifloat: 1 +Test "Real part of: catanh (1.0 - 0x1p-57 i) == 2.010126823623841397309973152228712047720e1 - 7.853981633974483113503843217966828154612e-1 i": +float: 1 +ifloat: 1 Test "Imaginary part of: catanh (1.0 - 0x1p-57 i) == 2.010126823623841397309973152228712047720e1 - 7.853981633974483113503843217966828154612e-1 i": float: 1 ifloat: 1 +Test "Real part of: catanh (1.0 - 0x1p-64 i) == 2.252728336819822255606004394739073846245e1 - 7.853981633974483096292133729759445264744e-1 i": +ildouble: 1 +ldouble: 1 # cbrt Test "cbrt (-0.001) == -0.1": -- 2.7.4