[prev in list] [next in list] [prev in thread] [next in thread] 

List:       glibc-cvs
Subject:    GNU C Library master sources branch master updated. glibc-2.17-584-gcaf8431
From:       jsm28 () sourceware ! org
Date:       2013-04-30 11:27:50
Message-ID: 20130430112750.1499.qmail () sourceware ! org
[Download RAW message or body]

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  caf84319c1614d8aa867d8db80219f4e9b1bf735 (commit)
      from  6dbe713d85fecc1bee99713d745413106af200b7 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=caf84319c1614d8aa867d8db80219f4e9b1bf735


commit caf84319c1614d8aa867d8db80219f4e9b1bf735
Author: Joseph Myers <joseph@codesourcery.com>
Date:   Tue Apr 30 11:27:35 2013 +0000

    Fix catan, catanh inaccuracy from atan2 denominators near 0 (bug 15416).

diff --git a/ChangeLog b/ChangeLog
index 9a9be01..0da2472 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2013-04-30  Joseph Myers  <joseph@codesourcery.com>
+
+	[BZ #15416]
+	* math/s_catan.c (__catan): Compute expressions 1 - x^2 - y^2 more
+	accurately for denominator in atan2.
+	* 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  Siddhesh Poyarekar  <siddhesh@redhat.com>
 
 	* sysdeps/ieee754/dbl-64/s_sin.c: Format code.
diff --git a/math/libm-test.inc b/math/libm-test.inc
index b82c592..d131ffa 100644
--- a/math/libm-test.inc
+++ b/math/libm-test.inc
@@ -4483,6 +4483,134 @@ catan_test (void)
   TEST_c_c (catan, -0x1.fp16383L, 0x1.fp16383L, \
-1.570796326794896619231321691639751442099L, \
4.338197604015604524209906861060325938836e-4933L, UNDERFLOW_EXCEPTION);  TEST_c_c \
(catan, -0x1.fp16383L, -0x1.fp16383L, -1.570796326794896619231321691639751442099L, \
-4.338197604015604524209906861060325938836e-4933L, UNDERFLOW_EXCEPTION);  #endif
+  TEST_c_c (catan, 0x1p-13L, 1.0L, 7.854286809755354140031716771044626356262e-1L, \
4.852030264850939738801379894163661227127L); +  TEST_c_c (catan, 0x1p-13L, -1.0L, \
7.854286809755354140031716771044626356262e-1L, \
-4.852030264850939738801379894163661227127L); +  TEST_c_c (catan, -0x1p-13L, 1.0L, \
-7.854286809755354140031716771044626356262e-1L, \
4.852030264850939738801379894163661227127L); +  TEST_c_c (catan, -0x1p-13L, -1.0L, \
-7.854286809755354140031716771044626356262e-1L, \
-4.852030264850939738801379894163661227127L); +  TEST_c_c (catan, 1.0L, 0x1p-13L, \
7.853981671227386080775748393881580082970e-1L, \
6.103515609841754902688560615027452023669e-5L); +  TEST_c_c (catan, -1.0L, 0x1p-13L, \
-7.853981671227386080775748393881580082970e-1L, \
6.103515609841754902688560615027452023669e-5L); +  TEST_c_c (catan, 1.0L, -0x1p-13L, \
7.853981671227386080775748393881580082970e-1L, \
-6.103515609841754902688560615027452023669e-5L); +  TEST_c_c (catan, -1.0L, \
-0x1p-13L, -7.853981671227386080775748393881580082970e-1L, \
-6.103515609841754902688560615027452023669e-5L); +  TEST_c_c (catan, 0x1p-27L, 1.0L, \
7.853981652600934588466178684534110069553e-1L, \
9.704060527839234335310696652368086117807L); +  TEST_c_c (catan, 0x1p-27L, -1.0L, \
7.853981652600934588466178684534110069553e-1L, \
-9.704060527839234335310696652368086117807L); +  TEST_c_c (catan, -0x1p-27L, 1.0L, \
-7.853981652600934588466178684534110069553e-1L, \
9.704060527839234335310696652368086117807L); +  TEST_c_c (catan, -0x1p-27L, -1.0L, \
-7.853981652600934588466178684534110069553e-1L, \
-9.704060527839234335310696652368086117807L); +  TEST_c_c (catan, 1.0L, 0x1p-27L, \
7.853981633974483234934486536343324763447e-1L, \
3.725290298461914028034141143623846306386e-9L); +  TEST_c_c (catan, -1.0L, 0x1p-27L, \
-7.853981633974483234934486536343324763447e-1L, \
3.725290298461914028034141143623846306386e-9L); +  TEST_c_c (catan, 1.0L, -0x1p-27L, \
7.853981633974483234934486536343324763447e-1L, \
-3.725290298461914028034141143623846306386e-9L); +  TEST_c_c (catan, -1.0L, \
-0x1p-27L, -7.853981633974483234934486536343324763447e-1L, \
-3.725290298461914028034141143623846306386e-9L); +  TEST_c_c (catan, 0x1p-33L, 1.0L, \
7.853981634265521400723945494331241018449e-1L, \
1.178350206951907026009379309773625595762e1L); +  TEST_c_c (catan, 0x1p-33L, -1.0L, \
7.853981634265521400723945494331241018449e-1L, \
-1.178350206951907026009379309773625595762e1L); +  TEST_c_c (catan, -0x1p-33L, 1.0L, \
-7.853981634265521400723945494331241018449e-1L, \
1.178350206951907026009379309773625595762e1L); +  TEST_c_c (catan, -0x1p-33L, -1.0L, \
-7.853981634265521400723945494331241018449e-1L, \
-1.178350206951907026009379309773625595762e1L); +  TEST_c_c (catan, 1.0L, 0x1p-33L, \
7.853981633974483096190489776088929224056e-1L, \
5.820766091346740722643102318246316469910e-11L); +  TEST_c_c (catan, -1.0L, 0x1p-33L, \
-7.853981633974483096190489776088929224056e-1L, \
5.820766091346740722643102318246316469910e-11L); +  TEST_c_c (catan, 1.0L, -0x1p-33L, \
7.853981633974483096190489776088929224056e-1L, \
-5.820766091346740722643102318246316469910e-11L); +  TEST_c_c (catan, -1.0L, \
-0x1p-33L, -7.853981633974483096190489776088929224056e-1L, \
-5.820766091346740722643102318246316469910e-11L); +  TEST_c_c (catan, 0x1p-54L, 1.0L, \
7.853981633974483234934486536343324763447e-1L, \
1.906154746539849600897388334009985581467e1L); +  TEST_c_c (catan, 0x1p-54L, -1.0L, \
7.853981633974483234934486536343324763447e-1L, \
-1.906154746539849600897388334009985581467e1L); +  TEST_c_c (catan, -0x1p-54L, 1.0L, \
-7.853981633974483234934486536343324763447e-1L, \
1.906154746539849600897388334009985581467e1L); +  TEST_c_c (catan, -0x1p-54L, -1.0L, \
-7.853981633974483234934486536343324763447e-1L, \
-1.906154746539849600897388334009985581467e1L); +  TEST_c_c (catan, 1.0L, 0x1p-54L, \
7.853981633974483096156608458198764914213e-1L, \
2.775557561562891351059079170227049355775e-17L); +  TEST_c_c (catan, -1.0L, 0x1p-54L, \
-7.853981633974483096156608458198764914213e-1L, \
2.775557561562891351059079170227049355775e-17L); +  TEST_c_c (catan, 1.0L, -0x1p-54L, \
7.853981633974483096156608458198764914213e-1L, \
-2.775557561562891351059079170227049355775e-17L); +  TEST_c_c (catan, -1.0L, \
-0x1p-54L, -7.853981633974483096156608458198764914213e-1L, \
-2.775557561562891351059079170227049355775e-17L); +  TEST_c_c (catan, 0x1p-57L, 1.0L, \
7.853981633974483113503843217966828154612e-1L, \
2.010126823623841397309973152228712047720e1L); +  TEST_c_c (catan, 0x1p-57L, -1.0L, \
7.853981633974483113503843217966828154612e-1L, \
-2.010126823623841397309973152228712047720e1L); +  TEST_c_c (catan, -0x1p-57L, 1.0L, \
-7.853981633974483113503843217966828154612e-1L, \
2.010126823623841397309973152228712047720e1L); +  TEST_c_c (catan, -0x1p-57L, -1.0L, \
-7.853981633974483113503843217966828154612e-1L, \
-2.010126823623841397309973152228712047720e1L); +  TEST_c_c (catan, 1.0L, 0x1p-57L, \
7.853981633974483096156608458198757330864e-1L, \
3.469446951953614188823848962783813448721e-18L); +  TEST_c_c (catan, -1.0L, 0x1p-57L, \
-7.853981633974483096156608458198757330864e-1L, \
3.469446951953614188823848962783813448721e-18L); +  TEST_c_c (catan, 1.0L, -0x1p-57L, \
7.853981633974483096156608458198757330864e-1L, \
-3.469446951953614188823848962783813448721e-18L); +  TEST_c_c (catan, -1.0L, \
-0x1p-57L, -7.853981633974483096156608458198757330864e-1L, \
-3.469446951953614188823848962783813448721e-18L); +  TEST_c_c (catan, 0x1p-13L, \
0x1.000002p0L, 7.859169620684960844300240092596908675974e-1L, \
4.852030056234795712498957387213592193975L); +  TEST_c_c (catan, 0x1p-13L, \
-0x1.000002p0L, 7.859169620684960844300240092596908675974e-1L, \
-4.852030056234795712498957387213592193975L); +  TEST_c_c (catan, -0x1p-13L, \
0x1.000002p0L, -7.859169620684960844300240092596908675974e-1L, \
4.852030056234795712498957387213592193975L); +  TEST_c_c (catan, -0x1p-13L, \
-0x1.000002p0L, -7.859169620684960844300240092596908675974e-1L, \
-4.852030056234795712498957387213592193975L); +  TEST_c_c (catan, 0x1.000002p0L, \
0x1p-13L, 7.853982267273793866654490522673596014524e-1L, \
6.103514882246036852433556327261700380577e-5L); +  TEST_c_c (catan, -0x1.000002p0L, \
0x1p-13L, -7.853982267273793866654490522673596014524e-1L, \
6.103514882246036852433556327261700380577e-5L); +  TEST_c_c (catan, 0x1.000002p0L, \
-0x1p-13L, 7.853982267273793866654490522673596014524e-1L, \
-6.103514882246036852433556327261700380577e-5L); +  TEST_c_c (catan, -0x1.000002p0L, \
-0x1p-13L, -7.853982267273793866654490522673596014524e-1L, \
-6.103514882246036852433556327261700380577e-5L); +  TEST_c_c (catan, 0x1p-13L, \
0x0.ffffffp0L, 7.851845403708474595909269086711426246675e-1L, \
4.852030190345140708455871037447717761868L); +  TEST_c_c (catan, 0x1p-13L, \
-0x0.ffffffp0L, 7.851845403708474595909269086711426246675e-1L, \
-4.852030190345140708455871037447717761868L); +  TEST_c_c (catan, -0x1p-13L, \
0x0.ffffffp0L, -7.851845403708474595909269086711426246675e-1L, \
4.852030190345140708455871037447717761868L); +  TEST_c_c (catan, -0x1p-13L, \
-0x0.ffffffp0L, -7.851845403708474595909269086711426246675e-1L, \
-4.852030190345140708455871037447717761868L); +  TEST_c_c (catan, 0x0.ffffffp0L, \
0x1p-13L, 7.853981373204155542484315721351697277336e-1L, \
6.103515973639646453881721999956617260502e-5L); +  TEST_c_c (catan, -0x0.ffffffp0L, \
0x1p-13L, -7.853981373204155542484315721351697277336e-1L, \
6.103515973639646453881721999956617260502e-5L); +  TEST_c_c (catan, 0x0.ffffffp0L, \
-0x1p-13L, 7.853981373204155542484315721351697277336e-1L, \
-6.103515973639646453881721999956617260502e-5L); +  TEST_c_c (catan, -0x0.ffffffp0L, \
-0x1p-13L, -7.853981373204155542484315721351697277336e-1L, \
-6.103515973639646453881721999956617260502e-5L); +#ifndef TEST_FLOAT
+  TEST_c_c (catan, 0x1p-27L, 0x1.0000000000001p0L, \
7.853981801612546526942695000283242525531e-1L, \
9.704060527839234168777242958594699810015L); +  TEST_c_c (catan, 0x1p-27L, \
-0x1.0000000000001p0L, 7.853981801612546526942695000283242525531e-1L, \
-9.704060527839234168777242958594699810015L); +  TEST_c_c (catan, -0x1p-27L, \
0x1.0000000000001p0L, -7.853981801612546526942695000283242525531e-1L, \
9.704060527839234168777242958594699810015L); +  TEST_c_c (catan, -0x1p-27L, \
-0x1.0000000000001p0L, -7.853981801612546526942695000283242525531e-1L, \
-9.704060527839234168777242958594699810015L); +  TEST_c_c (catan, \
0x1.0000000000001p0L, 0x1p-27L, 7.853981633974484345157511161499711112683e-1L, \
3.725290298461913200853528590596263270474e-9L); +  TEST_c_c (catan, \
-0x1.0000000000001p0L, 0x1p-27L, -7.853981633974484345157511161499711112683e-1L, \
3.725290298461913200853528590596263270474e-9L); +  TEST_c_c (catan, \
0x1.0000000000001p0L, -0x1p-27L, 7.853981633974484345157511161499711112683e-1L, \
-3.725290298461913200853528590596263270474e-9L); +  TEST_c_c (catan, \
-0x1.0000000000001p0L, -0x1p-27L, -7.853981633974484345157511161499711112683e-1L, \
-3.725290298461913200853528590596263270474e-9L); +  TEST_c_c (catan, 0x1p-27L, \
0x0.fffffffffffff8p0L, 7.853981578095128619227903983047292781021e-1L, \
9.704060527839234252043969805481351363824L); +  TEST_c_c (catan, 0x1p-27L, \
-0x0.fffffffffffff8p0L, 7.853981578095128619227903983047292781021e-1L, \
-9.704060527839234252043969805481351363824L); +  TEST_c_c (catan, -0x1p-27L, \
0x0.fffffffffffff8p0L, -7.853981578095128619227903983047292781021e-1L, \
9.704060527839234252043969805481351363824L); +  TEST_c_c (catan, -0x1p-27L, \
-0x0.fffffffffffff8p0L, -7.853981578095128619227903983047292781021e-1L, \
-9.704060527839234252043969805481351363824L); +  TEST_c_c (catan, \
0x0.fffffffffffff8p0L, 0x1p-27L, 7.853981633974482679822974223765039144191e-1L, \
3.725290298461914441624447420137706700965e-9L); +  TEST_c_c (catan, \
-0x0.fffffffffffff8p0L, 0x1p-27L, -7.853981633974482679822974223765039144191e-1L, \
3.725290298461914441624447420137706700965e-9L); +  TEST_c_c (catan, \
0x0.fffffffffffff8p0L, -0x1p-27L, 7.853981633974482679822974223765039144191e-1L, \
-3.725290298461914441624447420137706700965e-9L); +  TEST_c_c (catan, \
-0x0.fffffffffffff8p0L, -0x1p-27L, -7.853981633974482679822974223765039144191e-1L, \
-3.725290298461914441624447420137706700965e-9L); +#endif
+#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
+  TEST_c_c (catan, 0x1p-33L, 0x1.0000000000000002p0L, \
7.853981638922134273801338071094141188767e-1L, \
1.178350206951907025990405771755129268176e1L); +  TEST_c_c (catan, 0x1p-33L, \
-0x1.0000000000000002p0L, 7.853981638922134273801338071094141188767e-1L, \
-1.178350206951907025990405771755129268176e1L); +  TEST_c_c (catan, -0x1p-33L, \
0x1.0000000000000002p0L, -7.853981638922134273801338071094141188767e-1L, \
1.178350206951907025990405771755129268176e1L); +  TEST_c_c (catan, -0x1p-33L, \
-0x1.0000000000000002p0L, -7.853981638922134273801338071094141188767e-1L, \
-1.178350206951907025990405771755129268176e1L); +  TEST_c_c (catan, \
0x1.0000000000000002p0L, 0x1p-33L, 7.853981633974483096732590862331681441026e-1L, \
5.820766091346740722012013594069507025615e-11L); +  TEST_c_c (catan, \
-0x1.0000000000000002p0L, 0x1p-33L, -7.853981633974483096732590862331681441026e-1L, \
5.820766091346740722012013594069507025615e-11L); +  TEST_c_c (catan, \
0x1.0000000000000002p0L, -0x1p-33L, 7.853981633974483096732590862331681441026e-1L, \
-5.820766091346740722012013594069507025615e-11L); +  TEST_c_c (catan, \
-0x1.0000000000000002p0L, -0x1p-33L, -7.853981633974483096732590862331681441026e-1L, \
-5.820766091346740722012013594069507025615e-11L); +  TEST_c_c (catan, 0x1p-33L, \
0x0.ffffffffffffffffp0L, 7.853981631937214964185249205444919953948e-1L, \
1.178350206951907026002603046195591193050e1L); +  TEST_c_c (catan, 0x1p-33L, \
-0x0.ffffffffffffffffp0L, 7.853981631937214964185249205444919953948e-1L, \
-1.178350206951907026002603046195591193050e1L); +  TEST_c_c (catan, -0x1p-33L, \
0x0.ffffffffffffffffp0L, -7.853981631937214964185249205444919953948e-1L, \
1.178350206951907026002603046195591193050e1L); +  TEST_c_c (catan, -0x1p-33L, \
-0x0.ffffffffffffffffp0L, -7.853981631937214964185249205444919953948e-1L, \
-1.178350206951907026002603046195591193050e1L); +  TEST_c_c (catan, \
0x0.ffffffffffffffffp0L, 0x1p-33L, 7.853981633974483095919439232967553115548e-1L, \
5.820766091346740722958646680334721192083e-11L); +  TEST_c_c (catan, \
-0x0.ffffffffffffffffp0L, 0x1p-33L, -7.853981633974483095919439232967553115548e-1L, \
5.820766091346740722958646680334721192083e-11L); +  TEST_c_c (catan, \
0x0.ffffffffffffffffp0L, -0x1p-33L, 7.853981633974483095919439232967553115548e-1L, \
-5.820766091346740722958646680334721192083e-11L); +  TEST_c_c (catan, \
-0x0.ffffffffffffffffp0L, -0x1p-33L, -7.853981633974483095919439232967553115548e-1L, \
-5.820766091346740722958646680334721192083e-11L); +#endif
+#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
+  TEST_c_c (catan, 0x1p-54L, 0x1.000000000000000000000000008p0L, \
7.853981633974485455380535786656405610710e-1L, \
1.906154746539849600897388334009981267384e1L); +  TEST_c_c (catan, 0x1p-54L, \
-0x1.000000000000000000000000008p0L, 7.853981633974485455380535786656405610710e-1L, \
-1.906154746539849600897388334009981267384e1L); +  TEST_c_c (catan, -0x1p-54L, \
0x1.000000000000000000000000008p0L, -7.853981633974485455380535786656405610710e-1L, \
1.906154746539849600897388334009981267384e1L); +  TEST_c_c (catan, -0x1p-54L, \
-0x1.000000000000000000000000008p0L, -7.853981633974485455380535786656405610710e-1L, \
-1.906154746539849600897388334009981267384e1L); +  TEST_c_c (catan, \
0x1.000000000000000000000000008p0L, 0x1p-54L, \
7.853981633974483096156608458198888173729e-1L, \
2.775557561562891351059079170226980932999e-17L); +  TEST_c_c (catan, \
-0x1.000000000000000000000000008p0L, 0x1p-54L, \
-7.853981633974483096156608458198888173729e-1L, \
2.775557561562891351059079170226980932999e-17L); +  TEST_c_c (catan, \
0x1.000000000000000000000000008p0L, -0x1p-54L, \
7.853981633974483096156608458198888173729e-1L, \
-2.775557561562891351059079170226980932999e-17L); +  TEST_c_c (catan, \
-0x1.000000000000000000000000008p0L, -0x1p-54L, \
-7.853981633974483096156608458198888173729e-1L, \
-2.775557561562891351059079170226980932999e-17L); +  TEST_c_c (catan, 0x1p-54L, \
0x0.ffffffffffffffffffffffffffcp0L, 7.853981633974482124711461911186784339815e-1L, \
1.906154746539849600897388334009984040723e1L); +  TEST_c_c (catan, 0x1p-54L, \
-0x0.ffffffffffffffffffffffffffcp0L, 7.853981633974482124711461911186784339815e-1L, \
-1.906154746539849600897388334009984040723e1L); +  TEST_c_c (catan, -0x1p-54L, \
0x0.ffffffffffffffffffffffffffcp0L, -7.853981633974482124711461911186784339815e-1L, \
1.906154746539849600897388334009984040723e1L); +  TEST_c_c (catan, -0x1p-54L, \
-0x0.ffffffffffffffffffffffffffcp0L, -7.853981633974482124711461911186784339815e-1L, \
-1.906154746539849600897388334009984040723e1L); +  TEST_c_c (catan, \
0x0.ffffffffffffffffffffffffffcp0L, 0x1p-54L, \
7.853981633974483096156608458198703284454e-1L, \
2.775557561562891351059079170227083567164e-17L); +  TEST_c_c (catan, \
-0x0.ffffffffffffffffffffffffffcp0L, 0x1p-54L, \
-7.853981633974483096156608458198703284454e-1L, \
2.775557561562891351059079170227083567164e-17L); +  TEST_c_c (catan, \
0x0.ffffffffffffffffffffffffffcp0L, -0x1p-54L, \
7.853981633974483096156608458198703284454e-1L, \
-2.775557561562891351059079170227083567164e-17L); +  TEST_c_c (catan, \
-0x0.ffffffffffffffffffffffffffcp0L, -0x1p-54L, \
-7.853981633974483096156608458198703284454e-1L, \
-2.775557561562891351059079170227083567164e-17L); +#endif
+#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
+  TEST_c_c (catan, 0x1p-57L, 0x1.0000000000000000000000000001p0L, \
7.853981633974483252281721296111395707566e-1L, \
2.010126823623841397309973152228712033275e1L); +  TEST_c_c (catan, 0x1p-57L, \
-0x1.0000000000000000000000000001p0L, 7.853981633974483252281721296111395707566e-1L, \
-2.010126823623841397309973152228712033275e1L); +  TEST_c_c (catan, -0x1p-57L, \
0x1.0000000000000000000000000001p0L, -7.853981633974483252281721296111395707566e-1L, \
2.010126823623841397309973152228712033275e1L); +  TEST_c_c (catan, -0x1p-57L, \
-0x1.0000000000000000000000000001p0L, -7.853981633974483252281721296111395707566e-1L, \
-2.010126823623841397309973152228712033275e1L); +  TEST_c_c (catan, \
0x1.0000000000000000000000000001p0L, 0x1p-57L, \
7.853981633974483096156608458198758293829e-1L, \
3.469446951953614188823848962783812780530e-18L); +  TEST_c_c (catan, \
-0x1.0000000000000000000000000001p0L, 0x1p-57L, \
-7.853981633974483096156608458198758293829e-1L, \
3.469446951953614188823848962783812780530e-18L); +  TEST_c_c (catan, \
0x1.0000000000000000000000000001p0L, -0x1p-57L, \
7.853981633974483096156608458198758293829e-1L, \
-3.469446951953614188823848962783812780530e-18L); +  TEST_c_c (catan, \
-0x1.0000000000000000000000000001p0L, -0x1p-57L, \
-7.853981633974483096156608458198758293829e-1L, \
-3.469446951953614188823848962783812780530e-18L); +  TEST_c_c (catan, 0x1p-57L, \
0x0.ffffffffffffffffffffffffffff8p0L, 7.853981633974483044114904178894544378135e-1L, \
2.010126823623841397309973152228712040498e1L); +  TEST_c_c (catan, 0x1p-57L, \
-0x0.ffffffffffffffffffffffffffff8p0L, 7.853981633974483044114904178894544378135e-1L, \
-2.010126823623841397309973152228712040498e1L); +  TEST_c_c (catan, -0x1p-57L, \
0x0.ffffffffffffffffffffffffffff8p0L, -7.853981633974483044114904178894544378135e-1L, \
2.010126823623841397309973152228712040498e1L); +  TEST_c_c (catan, -0x1p-57L, \
-0x0.ffffffffffffffffffffffffffff8p0L, \
-7.853981633974483044114904178894544378135e-1L, \
-2.010126823623841397309973152228712040498e1L); +  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); +  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, 0.75L, 1.25L, 1.10714871779409050301706546017853704L, \
0.549306144334054845697622618461262852L);  TEST_c_c (catan, -2, -3, \
-1.4099210495965755225306193844604208L, -0.22907268296853876629588180294200276L); @@ \
-4679,6 +4807,134 @@ catanh_test (void)  TEST_c_c (catanh, -0x1.fp16383L, \
0x1.fp16383L, -4.338197604015604524209906861060325938836e-4933L, \
1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);  TEST_c_c (catanh, \
-0x1.fp16383L, -0x1.fp16383L, -4.338197604015604524209906861060325938836e-4933L, \
-1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);  #endif
+  TEST_c_c (catanh, 0x1p-13L, 1.0L, 6.103515609841754902688560615027452023669e-5L, \
7.853981671227386080775748393881580082970e-1L); +  TEST_c_c (catanh, 0x1p-13L, -1.0L, \
6.103515609841754902688560615027452023669e-5L, \
-7.853981671227386080775748393881580082970e-1L); +  TEST_c_c (catanh, -0x1p-13L, \
1.0L, -6.103515609841754902688560615027452023669e-5L, \
7.853981671227386080775748393881580082970e-1L); +  TEST_c_c (catanh, -0x1p-13L, \
-1.0L, -6.103515609841754902688560615027452023669e-5L, \
-7.853981671227386080775748393881580082970e-1L); +  TEST_c_c (catanh, 1.0L, 0x1p-13L, \
4.852030264850939738801379894163661227127L, \
7.854286809755354140031716771044626356262e-1L); +  TEST_c_c (catanh, -1.0L, 0x1p-13L, \
-4.852030264850939738801379894163661227127L, \
7.854286809755354140031716771044626356262e-1L); +  TEST_c_c (catanh, 1.0L, -0x1p-13L, \
4.852030264850939738801379894163661227127L, \
-7.854286809755354140031716771044626356262e-1L); +  TEST_c_c (catanh, -1.0L, \
-0x1p-13L, -4.852030264850939738801379894163661227127L, \
-7.854286809755354140031716771044626356262e-1L); +  TEST_c_c (catanh, 0x1p-27L, 1.0L, \
3.725290298461914028034141143623846306386e-9L, \
7.853981633974483234934486536343324763447e-1L); +  TEST_c_c (catanh, 0x1p-27L, -1.0L, \
3.725290298461914028034141143623846306386e-9L, \
-7.853981633974483234934486536343324763447e-1L); +  TEST_c_c (catanh, -0x1p-27L, \
1.0L, -3.725290298461914028034141143623846306386e-9L, \
7.853981633974483234934486536343324763447e-1L); +  TEST_c_c (catanh, -0x1p-27L, \
-1.0L, -3.725290298461914028034141143623846306386e-9L, \
-7.853981633974483234934486536343324763447e-1L); +  TEST_c_c (catanh, 1.0L, 0x1p-27L, \
9.704060527839234335310696652368086117807L, \
7.853981652600934588466178684534110069553e-1L); +  TEST_c_c (catanh, -1.0L, 0x1p-27L, \
-9.704060527839234335310696652368086117807L, \
7.853981652600934588466178684534110069553e-1L); +  TEST_c_c (catanh, 1.0L, -0x1p-27L, \
9.704060527839234335310696652368086117807L, \
-7.853981652600934588466178684534110069553e-1L); +  TEST_c_c (catanh, -1.0L, \
-0x1p-27L, -9.704060527839234335310696652368086117807L, \
-7.853981652600934588466178684534110069553e-1L); +  TEST_c_c (catanh, 0x1p-33L, 1.0L, \
5.820766091346740722643102318246316469910e-11L, \
7.853981633974483096190489776088929224056e-1L); +  TEST_c_c (catanh, 0x1p-33L, -1.0L, \
5.820766091346740722643102318246316469910e-11L, \
-7.853981633974483096190489776088929224056e-1L); +  TEST_c_c (catanh, -0x1p-33L, \
1.0L, -5.820766091346740722643102318246316469910e-11L, \
7.853981633974483096190489776088929224056e-1L); +  TEST_c_c (catanh, -0x1p-33L, \
-1.0L, -5.820766091346740722643102318246316469910e-11L, \
-7.853981633974483096190489776088929224056e-1L); +  TEST_c_c (catanh, 1.0L, 0x1p-33L, \
1.178350206951907026009379309773625595762e1L, \
7.853981634265521400723945494331241018449e-1L); +  TEST_c_c (catanh, -1.0L, 0x1p-33L, \
-1.178350206951907026009379309773625595762e1L, \
7.853981634265521400723945494331241018449e-1L); +  TEST_c_c (catanh, 1.0L, -0x1p-33L, \
1.178350206951907026009379309773625595762e1L, \
-7.853981634265521400723945494331241018449e-1L); +  TEST_c_c (catanh, -1.0L, \
-0x1p-33L, -1.178350206951907026009379309773625595762e1L, \
-7.853981634265521400723945494331241018449e-1L); +  TEST_c_c (catanh, 0x1p-54L, 1.0L, \
2.775557561562891351059079170227049355775e-17L, \
7.853981633974483096156608458198764914213e-1L); +  TEST_c_c (catanh, 0x1p-54L, -1.0L, \
2.775557561562891351059079170227049355775e-17L, \
-7.853981633974483096156608458198764914213e-1L); +  TEST_c_c (catanh, -0x1p-54L, \
1.0L, -2.775557561562891351059079170227049355775e-17L, \
7.853981633974483096156608458198764914213e-1L); +  TEST_c_c (catanh, -0x1p-54L, \
-1.0L, -2.775557561562891351059079170227049355775e-17L, \
-7.853981633974483096156608458198764914213e-1L); +  TEST_c_c (catanh, 1.0L, 0x1p-54L, \
1.906154746539849600897388334009985581467e1L, \
7.853981633974483234934486536343324763447e-1L); +  TEST_c_c (catanh, -1.0L, 0x1p-54L, \
-1.906154746539849600897388334009985581467e1L, \
7.853981633974483234934486536343324763447e-1L); +  TEST_c_c (catanh, 1.0L, -0x1p-54L, \
1.906154746539849600897388334009985581467e1L, \
-7.853981633974483234934486536343324763447e-1L); +  TEST_c_c (catanh, -1.0L, \
-0x1p-54L, -1.906154746539849600897388334009985581467e1L, \
-7.853981633974483234934486536343324763447e-1L); +  TEST_c_c (catanh, 0x1p-57L, 1.0L, \
3.469446951953614188823848962783813448721e-18L, \
7.853981633974483096156608458198757330864e-1L); +  TEST_c_c (catanh, 0x1p-57L, -1.0L, \
3.469446951953614188823848962783813448721e-18L, \
-7.853981633974483096156608458198757330864e-1L); +  TEST_c_c (catanh, -0x1p-57L, \
1.0L, -3.469446951953614188823848962783813448721e-18L, \
7.853981633974483096156608458198757330864e-1L); +  TEST_c_c (catanh, -0x1p-57L, \
-1.0L, -3.469446951953614188823848962783813448721e-18L, \
-7.853981633974483096156608458198757330864e-1L); +  TEST_c_c (catanh, 1.0L, 0x1p-57L, \
2.010126823623841397309973152228712047720e1L, \
7.853981633974483113503843217966828154612e-1L); +  TEST_c_c (catanh, -1.0L, 0x1p-57L, \
-2.010126823623841397309973152228712047720e1L, \
7.853981633974483113503843217966828154612e-1L); +  TEST_c_c (catanh, 1.0L, -0x1p-57L, \
2.010126823623841397309973152228712047720e1L, \
-7.853981633974483113503843217966828154612e-1L); +  TEST_c_c (catanh, -1.0L, \
-0x1p-57L, -2.010126823623841397309973152228712047720e1L, \
-7.853981633974483113503843217966828154612e-1L); +  TEST_c_c (catanh, 0x1p-13L, \
0x1.000002p0L, 6.103514882246036852433556327261700380577e-5L, \
7.853982267273793866654490522673596014524e-1L); +  TEST_c_c (catanh, 0x1p-13L, \
-0x1.000002p0L, 6.103514882246036852433556327261700380577e-5L, \
-7.853982267273793866654490522673596014524e-1L); +  TEST_c_c (catanh, -0x1p-13L, \
0x1.000002p0L, -6.103514882246036852433556327261700380577e-5L, \
7.853982267273793866654490522673596014524e-1L); +  TEST_c_c (catanh, -0x1p-13L, \
-0x1.000002p0L, -6.103514882246036852433556327261700380577e-5L, \
-7.853982267273793866654490522673596014524e-1L); +  TEST_c_c (catanh, 0x1.000002p0L, \
0x1p-13L, 4.852030056234795712498957387213592193975L, \
7.859169620684960844300240092596908675974e-1L); +  TEST_c_c (catanh, -0x1.000002p0L, \
0x1p-13L, -4.852030056234795712498957387213592193975L, \
7.859169620684960844300240092596908675974e-1L); +  TEST_c_c (catanh, 0x1.000002p0L, \
-0x1p-13L, 4.852030056234795712498957387213592193975L, \
-7.859169620684960844300240092596908675974e-1L); +  TEST_c_c (catanh, -0x1.000002p0L, \
-0x1p-13L, -4.852030056234795712498957387213592193975L, \
-7.859169620684960844300240092596908675974e-1L); +  TEST_c_c (catanh, 0x1p-13L, \
0x0.ffffffp0L, 6.103515973639646453881721999956617260502e-5L, \
7.853981373204155542484315721351697277336e-1L); +  TEST_c_c (catanh, 0x1p-13L, \
-0x0.ffffffp0L, 6.103515973639646453881721999956617260502e-5L, \
-7.853981373204155542484315721351697277336e-1L); +  TEST_c_c (catanh, -0x1p-13L, \
0x0.ffffffp0L, -6.103515973639646453881721999956617260502e-5L, \
7.853981373204155542484315721351697277336e-1L); +  TEST_c_c (catanh, -0x1p-13L, \
-0x0.ffffffp0L, -6.103515973639646453881721999956617260502e-5L, \
-7.853981373204155542484315721351697277336e-1L); +  TEST_c_c (catanh, 0x0.ffffffp0L, \
0x1p-13L, 4.852030190345140708455871037447717761868L, \
7.851845403708474595909269086711426246675e-1L); +  TEST_c_c (catanh, -0x0.ffffffp0L, \
0x1p-13L, -4.852030190345140708455871037447717761868L, \
7.851845403708474595909269086711426246675e-1L); +  TEST_c_c (catanh, 0x0.ffffffp0L, \
-0x1p-13L, 4.852030190345140708455871037447717761868L, \
-7.851845403708474595909269086711426246675e-1L); +  TEST_c_c (catanh, -0x0.ffffffp0L, \
-0x1p-13L, -4.852030190345140708455871037447717761868L, \
-7.851845403708474595909269086711426246675e-1L); +#ifndef TEST_FLOAT
+  TEST_c_c (catanh, 0x1p-27L, 0x1.0000000000001p0L, \
3.725290298461913200853528590596263270474e-9L, \
7.853981633974484345157511161499711112683e-1L); +  TEST_c_c (catanh, 0x1p-27L, \
-0x1.0000000000001p0L, 3.725290298461913200853528590596263270474e-9L, \
-7.853981633974484345157511161499711112683e-1L); +  TEST_c_c (catanh, -0x1p-27L, \
0x1.0000000000001p0L, -3.725290298461913200853528590596263270474e-9L, \
7.853981633974484345157511161499711112683e-1L); +  TEST_c_c (catanh, -0x1p-27L, \
-0x1.0000000000001p0L, -3.725290298461913200853528590596263270474e-9L, \
-7.853981633974484345157511161499711112683e-1L); +  TEST_c_c (catanh, \
0x1.0000000000001p0L, 0x1p-27L, 9.704060527839234168777242958594699810015L, \
7.853981801612546526942695000283242525531e-1L); +  TEST_c_c (catanh, \
-0x1.0000000000001p0L, 0x1p-27L, -9.704060527839234168777242958594699810015L, \
7.853981801612546526942695000283242525531e-1L); +  TEST_c_c (catanh, \
0x1.0000000000001p0L, -0x1p-27L, 9.704060527839234168777242958594699810015L, \
-7.853981801612546526942695000283242525531e-1L); +  TEST_c_c (catanh, \
-0x1.0000000000001p0L, -0x1p-27L, -9.704060527839234168777242958594699810015L, \
-7.853981801612546526942695000283242525531e-1L); +  TEST_c_c (catanh, 0x1p-27L, \
0x0.fffffffffffff8p0L, 3.725290298461914441624447420137706700965e-9L, \
7.853981633974482679822974223765039144191e-1L); +  TEST_c_c (catanh, 0x1p-27L, \
-0x0.fffffffffffff8p0L, 3.725290298461914441624447420137706700965e-9L, \
-7.853981633974482679822974223765039144191e-1L); +  TEST_c_c (catanh, -0x1p-27L, \
0x0.fffffffffffff8p0L, -3.725290298461914441624447420137706700965e-9L, \
7.853981633974482679822974223765039144191e-1L); +  TEST_c_c (catanh, -0x1p-27L, \
-0x0.fffffffffffff8p0L, -3.725290298461914441624447420137706700965e-9L, \
-7.853981633974482679822974223765039144191e-1L); +  TEST_c_c (catanh, \
0x0.fffffffffffff8p0L, 0x1p-27L, 9.704060527839234252043969805481351363824L, \
7.853981578095128619227903983047292781021e-1L); +  TEST_c_c (catanh, \
-0x0.fffffffffffff8p0L, 0x1p-27L, -9.704060527839234252043969805481351363824L, \
7.853981578095128619227903983047292781021e-1L); +  TEST_c_c (catanh, \
0x0.fffffffffffff8p0L, -0x1p-27L, 9.704060527839234252043969805481351363824L, \
-7.853981578095128619227903983047292781021e-1L); +  TEST_c_c (catanh, \
-0x0.fffffffffffff8p0L, -0x1p-27L, -9.704060527839234252043969805481351363824L, \
-7.853981578095128619227903983047292781021e-1L); +#endif
+#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
+  TEST_c_c (catanh, 0x1p-33L, 0x1.0000000000000002p0L, \
5.820766091346740722012013594069507025615e-11L, \
7.853981633974483096732590862331681441026e-1L); +  TEST_c_c (catanh, 0x1p-33L, \
-0x1.0000000000000002p0L, 5.820766091346740722012013594069507025615e-11L, \
-7.853981633974483096732590862331681441026e-1L); +  TEST_c_c (catanh, -0x1p-33L, \
0x1.0000000000000002p0L, -5.820766091346740722012013594069507025615e-11L, \
7.853981633974483096732590862331681441026e-1L); +  TEST_c_c (catanh, -0x1p-33L, \
-0x1.0000000000000002p0L, -5.820766091346740722012013594069507025615e-11L, \
-7.853981633974483096732590862331681441026e-1L); +  TEST_c_c (catanh, \
0x1.0000000000000002p0L, 0x1p-33L, 1.178350206951907025990405771755129268176e1L, \
7.853981638922134273801338071094141188767e-1L); +  TEST_c_c (catanh, \
-0x1.0000000000000002p0L, 0x1p-33L, -1.178350206951907025990405771755129268176e1L, \
7.853981638922134273801338071094141188767e-1L); +  TEST_c_c (catanh, \
0x1.0000000000000002p0L, -0x1p-33L, 1.178350206951907025990405771755129268176e1L, \
-7.853981638922134273801338071094141188767e-1L); +  TEST_c_c (catanh, \
-0x1.0000000000000002p0L, -0x1p-33L, -1.178350206951907025990405771755129268176e1L, \
-7.853981638922134273801338071094141188767e-1L); +  TEST_c_c (catanh, 0x1p-33L, \
0x0.ffffffffffffffffp0L, 5.820766091346740722958646680334721192083e-11L, \
7.853981633974483095919439232967553115548e-1L); +  TEST_c_c (catanh, 0x1p-33L, \
-0x0.ffffffffffffffffp0L, 5.820766091346740722958646680334721192083e-11L, \
-7.853981633974483095919439232967553115548e-1L); +  TEST_c_c (catanh, -0x1p-33L, \
0x0.ffffffffffffffffp0L, -5.820766091346740722958646680334721192083e-11L, \
7.853981633974483095919439232967553115548e-1L); +  TEST_c_c (catanh, -0x1p-33L, \
-0x0.ffffffffffffffffp0L, -5.820766091346740722958646680334721192083e-11L, \
-7.853981633974483095919439232967553115548e-1L); +  TEST_c_c (catanh, \
0x0.ffffffffffffffffp0L, 0x1p-33L, 1.178350206951907026002603046195591193050e1L, \
7.853981631937214964185249205444919953948e-1L); +  TEST_c_c (catanh, \
-0x0.ffffffffffffffffp0L, 0x1p-33L, -1.178350206951907026002603046195591193050e1L, \
7.853981631937214964185249205444919953948e-1L); +  TEST_c_c (catanh, \
0x0.ffffffffffffffffp0L, -0x1p-33L, 1.178350206951907026002603046195591193050e1L, \
-7.853981631937214964185249205444919953948e-1L); +  TEST_c_c (catanh, \
-0x0.ffffffffffffffffp0L, -0x1p-33L, -1.178350206951907026002603046195591193050e1L, \
-7.853981631937214964185249205444919953948e-1L); +#endif
+#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
+  TEST_c_c (catanh, 0x1p-54L, 0x1.000000000000000000000000008p0L, \
2.775557561562891351059079170226980932999e-17L, \
7.853981633974483096156608458198888173729e-1L); +  TEST_c_c (catanh, 0x1p-54L, \
-0x1.000000000000000000000000008p0L, 2.775557561562891351059079170226980932999e-17L, \
-7.853981633974483096156608458198888173729e-1L); +  TEST_c_c (catanh, -0x1p-54L, \
0x1.000000000000000000000000008p0L, -2.775557561562891351059079170226980932999e-17L, \
7.853981633974483096156608458198888173729e-1L); +  TEST_c_c (catanh, -0x1p-54L, \
-0x1.000000000000000000000000008p0L, -2.775557561562891351059079170226980932999e-17L, \
-7.853981633974483096156608458198888173729e-1L); +  TEST_c_c (catanh, \
0x1.000000000000000000000000008p0L, 0x1p-54L, \
1.906154746539849600897388334009981267384e1L, \
7.853981633974485455380535786656405610710e-1L); +  TEST_c_c (catanh, \
-0x1.000000000000000000000000008p0L, 0x1p-54L, \
-1.906154746539849600897388334009981267384e1L, \
7.853981633974485455380535786656405610710e-1L); +  TEST_c_c (catanh, \
0x1.000000000000000000000000008p0L, -0x1p-54L, \
1.906154746539849600897388334009981267384e1L, \
-7.853981633974485455380535786656405610710e-1L); +  TEST_c_c (catanh, \
-0x1.000000000000000000000000008p0L, -0x1p-54L, \
-1.906154746539849600897388334009981267384e1L, \
-7.853981633974485455380535786656405610710e-1L); +  TEST_c_c (catanh, 0x1p-54L, \
0x0.ffffffffffffffffffffffffffcp0L, 2.775557561562891351059079170227083567164e-17L, \
7.853981633974483096156608458198703284454e-1L); +  TEST_c_c (catanh, 0x1p-54L, \
-0x0.ffffffffffffffffffffffffffcp0L, 2.775557561562891351059079170227083567164e-17L, \
-7.853981633974483096156608458198703284454e-1L); +  TEST_c_c (catanh, -0x1p-54L, \
0x0.ffffffffffffffffffffffffffcp0L, -2.775557561562891351059079170227083567164e-17L, \
7.853981633974483096156608458198703284454e-1L); +  TEST_c_c (catanh, -0x1p-54L, \
-0x0.ffffffffffffffffffffffffffcp0L, -2.775557561562891351059079170227083567164e-17L, \
-7.853981633974483096156608458198703284454e-1L); +  TEST_c_c (catanh, \
0x0.ffffffffffffffffffffffffffcp0L, 0x1p-54L, \
1.906154746539849600897388334009984040723e1L, \
7.853981633974482124711461911186784339815e-1L); +  TEST_c_c (catanh, \
-0x0.ffffffffffffffffffffffffffcp0L, 0x1p-54L, \
-1.906154746539849600897388334009984040723e1L, \
7.853981633974482124711461911186784339815e-1L); +  TEST_c_c (catanh, \
0x0.ffffffffffffffffffffffffffcp0L, -0x1p-54L, \
1.906154746539849600897388334009984040723e1L, \
-7.853981633974482124711461911186784339815e-1L); +  TEST_c_c (catanh, \
-0x0.ffffffffffffffffffffffffffcp0L, -0x1p-54L, \
-1.906154746539849600897388334009984040723e1L, \
-7.853981633974482124711461911186784339815e-1L); +#endif
+#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
+  TEST_c_c (catanh, 0x1p-57L, 0x1.0000000000000000000000000001p0L, \
3.469446951953614188823848962783812780530e-18L, \
7.853981633974483096156608458198758293829e-1L); +  TEST_c_c (catanh, 0x1p-57L, \
-0x1.0000000000000000000000000001p0L, 3.469446951953614188823848962783812780530e-18L, \
-7.853981633974483096156608458198758293829e-1L); +  TEST_c_c (catanh, -0x1p-57L, \
0x1.0000000000000000000000000001p0L, -3.469446951953614188823848962783812780530e-18L, \
7.853981633974483096156608458198758293829e-1L); +  TEST_c_c (catanh, -0x1p-57L, \
-0x1.0000000000000000000000000001p0L, \
-3.469446951953614188823848962783812780530e-18L, \
-7.853981633974483096156608458198758293829e-1L); +  TEST_c_c (catanh, \
0x1.0000000000000000000000000001p0L, 0x1p-57L, \
2.010126823623841397309973152228712033275e1L, \
7.853981633974483252281721296111395707566e-1L); +  TEST_c_c (catanh, \
-0x1.0000000000000000000000000001p0L, 0x1p-57L, \
-2.010126823623841397309973152228712033275e1L, \
7.853981633974483252281721296111395707566e-1L); +  TEST_c_c (catanh, \
0x1.0000000000000000000000000001p0L, -0x1p-57L, \
2.010126823623841397309973152228712033275e1L, \
-7.853981633974483252281721296111395707566e-1L); +  TEST_c_c (catanh, \
-0x1.0000000000000000000000000001p0L, -0x1p-57L, \
-2.010126823623841397309973152228712033275e1L, \
-7.853981633974483252281721296111395707566e-1L); +  TEST_c_c (catanh, 0x1p-57L, \
0x0.ffffffffffffffffffffffffffff8p0L, 3.469446951953614188823848962783813782817e-18L, \
7.853981633974483096156608458198756849381e-1L); +  TEST_c_c (catanh, 0x1p-57L, \
-0x0.ffffffffffffffffffffffffffff8p0L, \
3.469446951953614188823848962783813782817e-18L, \
-7.853981633974483096156608458198756849381e-1L); +  TEST_c_c (catanh, -0x1p-57L, \
0x0.ffffffffffffffffffffffffffff8p0L, \
-3.469446951953614188823848962783813782817e-18L, \
7.853981633974483096156608458198756849381e-1L); +  TEST_c_c (catanh, -0x1p-57L, \
-0x0.ffffffffffffffffffffffffffff8p0L, \
-3.469446951953614188823848962783813782817e-18L, \
-7.853981633974483096156608458198756849381e-1L); +  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); +  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, 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 4b7fbad..3a041f2 100644
--- a/math/s_catan.c
+++ b/math/s_catan.c
@@ -77,14 +77,30 @@ __catan (__complex__ double x)
 	}
       else
 	{
-	  double r2, num, den, f;
+	  double r2, num, den, f, absx, absy;
 
-	  r2 = __real__ x * __real__ x;
+	  absx = fabs (__real__ x);
+	  absy = fabs (__imag__ x);
+	  if (absx < absy)
+	    {
+	      double t = absx;
+	      absx = absy;
+	      absy = t;
+	    }
 
-	  den = 1 - r2 - __imag__ x * __imag__ x;
+	  if (absx >= 1.0)
+	    den = (1.0 - absx) * (1.0 + absx) - absy * absy;
+	  else if (absx >= 0.75 && absy < DBL_EPSILON / 2.0)
+	    den = (1.0 - absx) * (1.0 + absx);
+	  else if (absx >= 0.75 || absy >= 0.5)
+	    den = -__x2y2m1 (absx, absy);
+	  else
+	    den = (1.0 - absx) * (1.0 + absx) - absy * absy;
 
 	  __real__ res = 0.5 * __ieee754_atan2 (2.0 * __real__ x, den);
 
+	  r2 = __real__ x * __real__ x;
+
 	  num = __imag__ x + 1.0;
 	  num = r2 + num * num;
 
diff --git a/math/s_catanf.c b/math/s_catanf.c
index aa71e5e..698e2af 100644
--- a/math/s_catanf.c
+++ b/math/s_catanf.c
@@ -78,14 +78,30 @@ __catanf (__complex__ float x)
 	}
       else
 	{
-	  float r2, num, den, f;
+	  float r2, num, den, f, absx, absy;
 
-	  r2 = __real__ x * __real__ x;
+	  absx = fabsf (__real__ x);
+	  absy = fabsf (__imag__ x);
+	  if (absx < absy)
+	    {
+	      float t = absx;
+	      absx = absy;
+	      absy = t;
+	    }
 
-	  den = 1 - r2 - __imag__ x * __imag__ x;
+	  if (absx >= 1.0f)
+	    den = (1.0f - absx) * (1.0f + absx) - absy * absy;
+	  else if (absx >= 0.75f && absy < FLT_EPSILON / 2.0f)
+	    den = (1.0f - absx) * (1.0f + absx);
+	  else if (absx >= 0.75f || absy >= 0.5f)
+	    den = -__x2y2m1f (absx, absy);
+	  else
+	    den = (1.0f - absx) * (1.0f + absx) - absy * absy;
 
 	  __real__ res = 0.5f * __ieee754_atan2f (2.0f * __real__ x, den);
 
+	  r2 = __real__ x * __real__ x;
+
 	  num = __imag__ x + 1.0f;
 	  num = r2 + num * num;
 
diff --git a/math/s_catanh.c b/math/s_catanh.c
index 55c5628..5248cbc 100644
--- a/math/s_catanh.c
+++ b/math/s_catanh.c
@@ -89,7 +89,25 @@ __catanh (__complex__ double x)
 	      __real__ res = 0.25 * __log1p (num / den);
 	    }
 
-	  den = 1 - __real__ x * __real__ x - i2;
+	  double absx, absy;
+
+	  absx = fabs (__real__ x);
+	  absy = fabs (__imag__ x);
+	  if (absx < absy)
+	    {
+	      double t = absx;
+	      absx = absy;
+	      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)
+	    den = (1.0 - absx) * (1.0 + absx);
+	  else if (absx >= 0.75 || absy >= 0.5)
+	    den = -__x2y2m1 (absx, absy);
+	  else
+	    den = (1.0 - absx) * (1.0 + absx) - absy * absy;
 
 	  __imag__ res = 0.5 * __ieee754_atan2 (2.0 * __imag__ x, den);
 	}
diff --git a/math/s_catanhf.c b/math/s_catanhf.c
index 3e87942..249deb5 100644
--- a/math/s_catanhf.c
+++ b/math/s_catanhf.c
@@ -90,7 +90,25 @@ __catanhf (__complex__ float x)
 	      __real__ res = 0.25f * __log1pf (num / den);
 	    }
 
-	  den = 1 - __real__ x * __real__ x - i2;
+	  float absx, absy;
+
+	  absx = fabsf (__real__ x);
+	  absy = fabsf (__imag__ x);
+	  if (absx < absy)
+	    {
+	      float t = absx;
+	      absx = absy;
+	      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)
+	    den = (1.0f - absx) * (1.0f + absx);
+	  else if (absx >= 0.75f || absy >= 0.5f)
+	    den = -__x2y2m1f (absx, absy);
+	  else
+	    den = (1.0f - absx) * (1.0f + absx) - absy * absy;
 
 	  __imag__ res = 0.5f * __ieee754_atan2f (2.0f * __imag__ x, den);
 	}
diff --git a/math/s_catanhl.c b/math/s_catanhl.c
index 64c30b5..ab75b80 100644
--- a/math/s_catanhl.c
+++ b/math/s_catanhl.c
@@ -97,7 +97,25 @@ __catanhl (__complex__ long double x)
 	      __real__ res = 0.25L * __log1pl (num / den);
 	    }
 
-	  den = 1 - __real__ x * __real__ x - i2;
+	  long double absx, absy;
+
+	  absx = fabsl (__real__ x);
+	  absy = fabsl (__imag__ x);
+	  if (absx < absy)
+	    {
+	      long double t = absx;
+	      absx = absy;
+	      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)
+	    den = (1.0L - absx) * (1.0L + absx);
+	  else if (absx >= 0.75L || absy >= 0.5L)
+	    den = -__x2y2m1l (absx, absy);
+	  else
+	    den = (1.0L - absx) * (1.0L + absx) - absy * absy;
 
 	  __imag__ res = 0.5L * __ieee754_atan2l (2.0L * __imag__ x, den);
 	}
diff --git a/math/s_catanl.c b/math/s_catanl.c
index 17ab62d..1a815ad 100644
--- a/math/s_catanl.c
+++ b/math/s_catanl.c
@@ -85,14 +85,30 @@ __catanl (__complex__ long double x)
 	}
       else
 	{
-	  long double r2, num, den, f;
+	  long double r2, num, den, f, absx, absy;
 
-	  r2 = __real__ x * __real__ x;
+	  absx = fabsl (__real__ x);
+	  absy = fabsl (__imag__ x);
+	  if (absx < absy)
+	    {
+	      long double t = absx;
+	      absx = absy;
+	      absy = t;
+	    }
 
-	  den = 1 - r2 - __imag__ x * __imag__ x;
+	  if (absx >= 1.0L)
+	    den = (1.0L - absx) * (1.0L + absx) - absy * absy;
+	  else if (absx >= 0.75L && absy < LDBL_EPSILON / 2.0L)
+	    den = (1.0L - absx) * (1.0L + absx);
+	  else if (absx >= 0.75L || absy >= 0.5L)
+	    den = -__x2y2m1l (absx, absy);
+	  else
+	    den = (1.0L - absx) * (1.0L + absx) - absy * absy;
 
 	  __real__ res = 0.5L * __ieee754_atan2l (2.0L * __real__ x, den);
 
+	  r2 = __real__ x * __real__ x;
+
 	  num = __imag__ x + 1.0L;
 	  num = r2 + num * num;
 
diff --git a/sysdeps/i386/fpu/libm-test-ulps b/sysdeps/i386/fpu/libm-test-ulps
index e36d0c3..a3f5844 100644
--- a/sysdeps/i386/fpu/libm-test-ulps
+++ b/sysdeps/i386/fpu/libm-test-ulps
@@ -3480,6 +3480,23 @@ double: 1
 idouble: 1
 
 # catan
+Test "Imaginary part of: catan (-0x0.fffffffffffff8p0 + 0x1p-27 i) == \
-7.853981633974482679822974223765039144191e-1 + \
3.725290298461914441624447420137706700965e-9 i": +double: 1
+idouble: 1
+Test "Imaginary part of: catan (-0x0.ffffffffffffffffp0 + 0x1p-33 i) == \
-7.853981633974483095919439232967553115548e-1 + \
5.820766091346740722958646680334721192083e-11 i": +ildouble: 1
+ldouble: 1
+Test "Imaginary part of: catan (-0x0.ffffffp0 + 0x1p-13 i) == \
-7.853981373204155542484315721351697277336e-1 + \
6.103515973639646453881721999956617260502e-5 i": +double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: catan (-0x1.0000000000001p0 + 0x1p-27 i) == \
-7.853981633974484345157511161499711112683e-1 + \
3.725290298461913200853528590596263270474e-9 i": +ildouble: 1
+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.fp1023 + 0x1.fp1023 i) == \
-1.570796326794896619231321691639751442099 + \
2.871063043235098558826106732041811695767e-309 i":  ildouble: 1
 ldouble: 1
@@ -3492,11 +3509,37 @@ 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-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 (-1.0 - 0x1p-13 i) == \
-7.853981671227386080775748393881580082970e-1 - \
6.103515609841754902688560615027452023669e-5 i": +ildouble: 1
+ldouble: 1
 Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - \
0.22907268296853876629588180294200276 i":  double: 1
 float: 1
 idouble: 1
 ifloat: 1
+Test "Imaginary part of: catan (0x0.fffffffffffff8p0 + 0x1p-27 i) == \
7.853981633974482679822974223765039144191e-1 + \
3.725290298461914441624447420137706700965e-9 i": +double: 1
+idouble: 1
+Test "Imaginary part of: catan (0x0.ffffffffffffffffp0 + 0x1p-33 i) == \
7.853981633974483095919439232967553115548e-1 + \
5.820766091346740722958646680334721192083e-11 i": +ildouble: 1
+ldouble: 1
+Test "Imaginary part of: catan (0x0.ffffffp0 + 0x1p-13 i) == \
7.853981373204155542484315721351697277336e-1 + \
6.103515973639646453881721999956617260502e-5 i": +double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: catan (0x1.0000000000001p0 + 0x1p-27 i) == \
7.853981633974484345157511161499711112683e-1 + \
3.725290298461913200853528590596263270474e-9 i": +ildouble: 1
+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.fp1023 + 0x1.fp1023 i) == \
1.570796326794896619231321691639751442099 + \
2.871063043235098558826106732041811695767e-309 i":  ildouble: 1
 ldouble: 1
@@ -3509,8 +3552,23 @@ 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-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 (1.0 - 0x1p-13 i) == \
7.853981671227386080775748393881580082970e-1 - \
6.103515609841754902688560615027452023669e-5 i": +ildouble: 1
+ldouble: 1
 
 # catanh
+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-33 i) == \
-1.178350206951907026002603046195591193050e1 - \
7.853981631937214964185249205444919953948e-1 i": +ildouble: 1
+ldouble: 1
 Test "Real part of: catanh (-0x1.fp1023 + 0x1.fp1023 i) == \
-2.871063043235098558826106732041811695767e-309 + \
1.570796326794896619231321691639751442099 i":  ildouble: 1
 ldouble: 1
@@ -3523,6 +3581,18 @@ ldouble: 1
 Test "Real part of: catanh (-0x1.fp127 - 0x1.fp127 i) == \
-1.516766904286822590927401983512575068153e-39 - \
1.570796326794896619231321691639751442097 i":  ildouble: 1
 ldouble: 1
+Test "Real part of: catanh (-0x1p-13 + 0x1.000002p0 i) == \
-6.103514882246036852433556327261700380577e-5 + \
7.853982267273793866654490522673596014524e-1 i": +double: 1
+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-13 - 0x1.000002p0 i) == \
-6.103514882246036852433556327261700380577e-5 - \
7.853982267273793866654490522673596014524e-1 i": +double: 1
+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 (-2 - 3 i) == -0.14694666622552975204743278515471595 - \
1.3389725222944935611241935759091443 i":  double: 2
 float: 1
@@ -3535,6 +3605,12 @@ double: 1
 idouble: 1
 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-33 i) == \
1.178350206951907026002603046195591193050e1 - \
7.853981631937214964185249205444919953948e-1 i": +ildouble: 1
+ldouble: 1
 Test "Real part of: catanh (0x1.fp1023 + 0x1.fp1023 i) == \
2.871063043235098558826106732041811695767e-309 + \
1.570796326794896619231321691639751442099 i":  ildouble: 1
 ldouble: 1
@@ -3547,6 +3623,34 @@ ldouble: 1
 Test "Real part of: catanh (0x1.fp127 - 0x1.fp127 i) == \
1.516766904286822590927401983512575068153e-39 - \
1.570796326794896619231321691639751442097 i":  ildouble: 1
 ldouble: 1
+Test "Real part of: catanh (0x1p-13 + 0x0.ffffffp0 i) == \
6.103515973639646453881721999956617260502e-5 + \
7.853981373204155542484315721351697277336e-1 i": +double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: catanh (0x1p-13 - 0x0.ffffffp0 i) == \
6.103515973639646453881721999956617260502e-5 - \
7.853981373204155542484315721351697277336e-1 i": +double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: catanh (0x1p-27 + 0x0.fffffffffffff8p0 i) == \
3.725290298461914441624447420137706700965e-9 + \
7.853981633974482679822974223765039144191e-1 i": +double: 1
+idouble: 1
+Test "Real part of: catanh (0x1p-27 + 0x1.0000000000001p0 i) == \
3.725290298461913200853528590596263270474e-9 + \
7.853981633974484345157511161499711112683e-1 i": +ildouble: 1
+ldouble: 1
+Test "Real part of: catanh (0x1p-27 - 0x0.fffffffffffff8p0 i) == \
3.725290298461914441624447420137706700965e-9 - \
7.853981633974482679822974223765039144191e-1 i": +double: 1
+idouble: 1
+Test "Real part of: catanh (0x1p-27 - 0x1.0000000000001p0 i) == \
3.725290298461913200853528590596263270474e-9 - \
7.853981633974484345157511161499711112683e-1 i": +ildouble: 1
+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-33 - 0x0.ffffffffffffffffp0 i) == \
5.820766091346740722958646680334721192083e-11 - \
7.853981633974483095919439232967553115548e-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 43b5595..7ef2832 100644
--- a/sysdeps/x86_64/fpu/libm-test-ulps
+++ b/sysdeps/x86_64/fpu/libm-test-ulps
@@ -4205,6 +4205,32 @@ double: 1
 idouble: 1
 
 # catan
+Test "Imaginary part of: catan (-0x0.fffffffffffff8p0 + 0x1p-27 i) == \
-7.853981633974482679822974223765039144191e-1 + \
3.725290298461914441624447420137706700965e-9 i": +double: 1
+idouble: 1
+Test "Imaginary part of: catan (-0x0.ffffffffffffffffp0 + 0x1p-33 i) == \
-7.853981633974483095919439232967553115548e-1 + \
5.820766091346740722958646680334721192083e-11 i": +ildouble: 1
+ldouble: 1
+Test "Imaginary part of: catan (-0x0.ffffffp0 + 0x1p-13 i) == \
-7.853981373204155542484315721351697277336e-1 + \
6.103515973639646453881721999956617260502e-5 i": +double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: catan (-0x1.0000000000001p0 + 0x1p-27 i) == \
-7.853981633974484345157511161499711112683e-1 + \
3.725290298461913200853528590596263270474e-9 i": +ildouble: 1
+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-13 i) == \
-7.853982267273793866654490522673596014524e-1 + \
6.103514882246036852433556327261700380577e-5 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.fp1023 + 0x1.fp1023 i) == \
-1.570796326794896619231321691639751442099 + \
2.871063043235098558826106732041811695767e-309 i":  double: 1
 idouble: 1
@@ -4225,6 +4251,84 @@ double: 1
 idouble: 1
 ildouble: 1
 ldouble: 1
+Test "Real part of: catan (-0x1p-13 + 0x1.000002p0 i) == \
-7.859169620684960844300240092596908675974e-1 + \
4.852030056234795712498957387213592193975 i": +float: 1
+ifloat: 1
+Test "Real part of: catan (-0x1p-13 + 1.0 i) == \
-7.854286809755354140031716771044626356262e-1 + \
4.852030264850939738801379894163661227127 i": +float: 1
+ifloat: 1
+Test "Real part of: catan (-0x1p-13 - 0x1.000002p0 i) == \
-7.859169620684960844300240092596908675974e-1 - \
4.852030056234795712498957387213592193975 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catan (-0x1p-13 - 0x1.000002p0 i) == \
-7.859169620684960844300240092596908675974e-1 - \
4.852030056234795712498957387213592193975 i": +float: 1
+ifloat: 1
+Test "Real part of: catan (-0x1p-13 - 1.0 i) == \
-7.854286809755354140031716771044626356262e-1 - \
4.852030264850939738801379894163661227127 i": +float: 1
+ifloat: 1
+Test "Real part of: catan (-0x1p-27 + 1.0 i) == \
-7.853981652600934588466178684534110069553e-1 + \
9.704060527839234335310696652368086117807 i": +float: 1
+ifloat: 1
+Test "Real part of: catan (-0x1p-27 - 1.0 i) == \
-7.853981652600934588466178684534110069553e-1 - \
9.704060527839234335310696652368086117807 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catan (-0x1p-33 + 0x0.ffffffffffffffffp0 i) == \
-7.853981631937214964185249205444919953948e-1 + \
1.178350206951907026002603046195591193050e1 i": +ildouble: 1
+ldouble: 1
+Test "Real part of: catan (-0x1p-33 + 1.0 i) == \
-7.853981634265521400723945494331241018449e-1 + \
1.178350206951907026009379309773625595762e1 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catan (-0x1p-33 - 0x0.ffffffffffffffffp0 i) == \
-7.853981631937214964185249205444919953948e-1 - \
1.178350206951907026002603046195591193050e1 i": +ildouble: 1
+ldouble: 1
+Test "Real part of: catan (-0x1p-33 - 1.0 i) == \
-7.853981634265521400723945494331241018449e-1 - \
1.178350206951907026009379309773625595762e1 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 "Real 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 "Real part of: catan (-0x1p-57 - 1.0 i) == \
-7.853981633974483113503843217966828154612e-1 - \
2.010126823623841397309973152228712047720e1 i": +float: 1
+ifloat: 1
+Test "Real part of: catan (-1.0 + 0x1p-13 i) == \
-7.853981671227386080775748393881580082970e-1 + \
6.103515609841754902688560615027452023669e-5 i": +float: 1
+ifloat: 1
+Test "Real part of: catan (-1.0 + 0x1p-27 i) == \
-7.853981633974483234934486536343324763447e-1 + \
3.725290298461914028034141143623846306386e-9 i": +float: 1
+ifloat: 1
+Test "Real part of: catan (-1.0 + 0x1p-33 i) == \
-7.853981633974483096190489776088929224056e-1 + \
5.820766091346740722643102318246316469910e-11 i": +float: 1
+ifloat: 1
+Test "Real part of: catan (-1.0 + 0x1p-54 i) == \
-7.853981633974483096156608458198764914213e-1 + \
2.775557561562891351059079170227049355775e-17 i": +float: 1
+ifloat: 1
+Test "Real part of: catan (-1.0 + 0x1p-57 i) == \
-7.853981633974483096156608458198757330864e-1 + \
3.469446951953614188823848962783813448721e-18 i": +float: 1
+ifloat: 1
+Test "Real part of: catan (-1.0 - 0x1p-13 i) == \
-7.853981671227386080775748393881580082970e-1 - \
6.103515609841754902688560615027452023669e-5 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catan (-1.0 - 0x1p-13 i) == \
-7.853981671227386080775748393881580082970e-1 - \
6.103515609841754902688560615027452023669e-5 i": +ildouble: 1
+ldouble: 1
+Test "Real part of: catan (-1.0 - 0x1p-27 i) == \
-7.853981633974483234934486536343324763447e-1 - \
3.725290298461914028034141143623846306386e-9 i": +float: 1
+ifloat: 1
+Test "Real part of: catan (-1.0 - 0x1p-33 i) == \
-7.853981633974483096190489776088929224056e-1 - \
5.820766091346740722643102318246316469910e-11 i": +float: 1
+ifloat: 1
+Test "Real part of: catan (-1.0 - 0x1p-54 i) == \
-7.853981633974483096156608458198764914213e-1 - \
2.775557561562891351059079170227049355775e-17 i": +float: 1
+ifloat: 1
+Test "Real part of: catan (-1.0 - 0x1p-57 i) == \
-7.853981633974483096156608458198757330864e-1 - \
3.469446951953614188823848962783813448721e-18 i": +float: 1
+ifloat: 1
 Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - \
0.22907268296853876629588180294200276 i":  float: 3
 ifloat: 3
@@ -4236,6 +4340,32 @@ ifloat: 1
 Test "Real part of: catan (0.75 + 1.25 i) == 1.10714871779409050301706546017853704 + \
0.549306144334054845697622618461262852 i":  float: 4
 ifloat: 4
+Test "Imaginary part of: catan (0x0.fffffffffffff8p0 + 0x1p-27 i) == \
7.853981633974482679822974223765039144191e-1 + \
3.725290298461914441624447420137706700965e-9 i": +double: 1
+idouble: 1
+Test "Imaginary part of: catan (0x0.ffffffffffffffffp0 + 0x1p-33 i) == \
7.853981633974483095919439232967553115548e-1 + \
5.820766091346740722958646680334721192083e-11 i": +ildouble: 1
+ldouble: 1
+Test "Imaginary part of: catan (0x0.ffffffp0 + 0x1p-13 i) == \
7.853981373204155542484315721351697277336e-1 + \
6.103515973639646453881721999956617260502e-5 i": +double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: catan (0x1.0000000000001p0 + 0x1p-27 i) == \
7.853981633974484345157511161499711112683e-1 + \
3.725290298461913200853528590596263270474e-9 i": +ildouble: 1
+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-13 i) == \
7.853982267273793866654490522673596014524e-1 + \
6.103514882246036852433556327261700380577e-5 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.fp1023 + 0x1.fp1023 i) == \
1.570796326794896619231321691639751442099 + \
2.871063043235098558826106732041811695767e-309 i":  double: 1
 idouble: 1
@@ -4256,8 +4386,104 @@ double: 1
 idouble: 1
 ildouble: 1
 ldouble: 1
+Test "Real part of: catan (0x1p-13 + 0x1.000002p0 i) == \
7.859169620684960844300240092596908675974e-1 + \
4.852030056234795712498957387213592193975 i": +float: 1
+ifloat: 1
+Test "Real part of: catan (0x1p-13 + 1.0 i) == \
7.854286809755354140031716771044626356262e-1 + \
4.852030264850939738801379894163661227127 i": +float: 1
+ifloat: 1
+Test "Real part of: catan (0x1p-13 - 0x1.000002p0 i) == \
7.859169620684960844300240092596908675974e-1 - \
4.852030056234795712498957387213592193975 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catan (0x1p-13 - 0x1.000002p0 i) == \
7.859169620684960844300240092596908675974e-1 - \
4.852030056234795712498957387213592193975 i": +float: 1
+ifloat: 1
+Test "Real part of: catan (0x1p-13 - 1.0 i) == \
7.854286809755354140031716771044626356262e-1 - \
4.852030264850939738801379894163661227127 i": +float: 1
+ifloat: 1
+Test "Real part of: catan (0x1p-27 + 1.0 i) == \
7.853981652600934588466178684534110069553e-1 + \
9.704060527839234335310696652368086117807 i": +float: 1
+ifloat: 1
+Test "Real part of: catan (0x1p-27 - 1.0 i) == \
7.853981652600934588466178684534110069553e-1 - \
9.704060527839234335310696652368086117807 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catan (0x1p-33 + 0x0.ffffffffffffffffp0 i) == \
7.853981631937214964185249205444919953948e-1 + \
1.178350206951907026002603046195591193050e1 i": +ildouble: 1
+ldouble: 1
+Test "Real part of: catan (0x1p-33 + 1.0 i) == \
7.853981634265521400723945494331241018449e-1 + \
1.178350206951907026009379309773625595762e1 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catan (0x1p-33 - 0x0.ffffffffffffffffp0 i) == \
7.853981631937214964185249205444919953948e-1 - \
1.178350206951907026002603046195591193050e1 i": +ildouble: 1
+ldouble: 1
+Test "Real part of: catan (0x1p-33 - 1.0 i) == \
7.853981634265521400723945494331241018449e-1 - \
1.178350206951907026009379309773625595762e1 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 "Real 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 "Real part of: catan (0x1p-57 - 1.0 i) == \
7.853981633974483113503843217966828154612e-1 - \
2.010126823623841397309973152228712047720e1 i": +float: 1
+ifloat: 1
+Test "Real part of: catan (1.0 + 0x1p-13 i) == \
7.853981671227386080775748393881580082970e-1 + \
6.103515609841754902688560615027452023669e-5 i": +float: 1
+ifloat: 1
+Test "Real part of: catan (1.0 + 0x1p-27 i) == \
7.853981633974483234934486536343324763447e-1 + \
3.725290298461914028034141143623846306386e-9 i": +float: 1
+ifloat: 1
+Test "Real part of: catan (1.0 + 0x1p-33 i) == \
7.853981633974483096190489776088929224056e-1 + \
5.820766091346740722643102318246316469910e-11 i": +float: 1
+ifloat: 1
+Test "Real part of: catan (1.0 + 0x1p-54 i) == \
7.853981633974483096156608458198764914213e-1 + \
2.775557561562891351059079170227049355775e-17 i": +float: 1
+ifloat: 1
+Test "Real part of: catan (1.0 + 0x1p-57 i) == \
7.853981633974483096156608458198757330864e-1 + \
3.469446951953614188823848962783813448721e-18 i": +float: 1
+ifloat: 1
+Test "Real part of: catan (1.0 - 0x1p-13 i) == \
7.853981671227386080775748393881580082970e-1 - \
6.103515609841754902688560615027452023669e-5 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catan (1.0 - 0x1p-13 i) == \
7.853981671227386080775748393881580082970e-1 - \
6.103515609841754902688560615027452023669e-5 i": +ildouble: 1
+ldouble: 1
+Test "Real part of: catan (1.0 - 0x1p-27 i) == \
7.853981633974483234934486536343324763447e-1 - \
3.725290298461914028034141143623846306386e-9 i": +float: 1
+ifloat: 1
+Test "Real part of: catan (1.0 - 0x1p-33 i) == \
7.853981633974483096190489776088929224056e-1 - \
5.820766091346740722643102318246316469910e-11 i": +float: 1
+ifloat: 1
+Test "Real part of: catan (1.0 - 0x1p-54 i) == \
7.853981633974483096156608458198764914213e-1 - \
2.775557561562891351059079170227049355775e-17 i": +float: 1
+ifloat: 1
+Test "Real part of: catan (1.0 - 0x1p-57 i) == \
7.853981633974483096156608458198757330864e-1 - \
3.469446951953614188823848962783813448721e-18 i": +float: 1
+ifloat: 1
 
 # catanh
+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-33 i) == \
-1.178350206951907026002603046195591193050e1 - \
7.853981631937214964185249205444919953948e-1 i": +ildouble: 1
+ldouble: 1
+Test "Real part of: catanh (-0x1.000002p0 + 0x1p-13 i) == \
-4.852030056234795712498957387213592193975 + \
7.859169620684960844300240092596908675974e-1 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (-0x1.000002p0 + 0x1p-13 i) == \
-4.852030056234795712498957387213592193975 + \
7.859169620684960844300240092596908675974e-1 i": +float: 1
+ifloat: 1
+Test "Real part of: catanh (-0x1.000002p0 - 0x1p-13 i) == \
-4.852030056234795712498957387213592193975 - \
7.859169620684960844300240092596908675974e-1 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (-0x1.000002p0 - 0x1p-13 i) == \
-4.852030056234795712498957387213592193975 - \
7.859169620684960844300240092596908675974e-1 i": +float: 1
+ifloat: 1
 Test "Real part of: catanh (-0x1.fp1023 + 0x1.fp1023 i) == \
-2.871063043235098558826106732041811695767e-309 + \
1.570796326794896619231321691639751442099 i":  double: 1
 idouble: 1
@@ -4278,6 +4504,90 @@ double: 1
 idouble: 1
 ildouble: 1
 ldouble: 1
+Test "Real part of: catanh (-0x1p-13 + 0x1.000002p0 i) == \
-6.103514882246036852433556327261700380577e-5 + \
7.853982267273793866654490522673596014524e-1 i": +double: 1
+idouble: 1
+Test "Imaginary part of: catanh (-0x1p-13 + 0x1.000002p0 i) == \
-6.103514882246036852433556327261700380577e-5 + \
7.853982267273793866654490522673596014524e-1 i": +float: 1
+ifloat: 1
+Test "Real part of: catanh (-0x1p-13 + 1.0 i) == \
-6.103515609841754902688560615027452023669e-5 + \
7.853981671227386080775748393881580082970e-1 i": +ildouble: 1
+ldouble: 1
+Test "Imaginary part of: catanh (-0x1p-13 + 1.0 i) == \
-6.103515609841754902688560615027452023669e-5 + \
7.853981671227386080775748393881580082970e-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
+Test "Imaginary part of: catanh (-0x1p-13 - 0x1.000002p0 i) == \
-6.103514882246036852433556327261700380577e-5 - \
7.853982267273793866654490522673596014524e-1 i": +float: 1
+ifloat: 1
+Test "Real part of: catanh (-0x1p-13 - 1.0 i) == \
-6.103515609841754902688560615027452023669e-5 - \
7.853981671227386080775748393881580082970e-1 i": +ildouble: 1
+ldouble: 1
+Test "Imaginary part of: catanh (-0x1p-13 - 1.0 i) == \
-6.103515609841754902688560615027452023669e-5 - \
7.853981671227386080775748393881580082970e-1 i": +float: 1
+ifloat: 1
+Test "Real part of: catanh (-0x1p-27 + 0x1.0000000000001p0 i) == \
-3.725290298461913200853528590596263270474e-9 + \
7.853981633974484345157511161499711112683e-1 i": +double: 1
+idouble: 1
+Test "Imaginary part of: catanh (-0x1p-27 + 1.0 i) == \
-3.725290298461914028034141143623846306386e-9 + \
7.853981633974483234934486536343324763447e-1 i": +float: 1
+ifloat: 1
+Test "Real part of: catanh (-0x1p-27 - 0x1.0000000000001p0 i) == \
-3.725290298461913200853528590596263270474e-9 - \
7.853981633974484345157511161499711112683e-1 i": +double: 1
+idouble: 1
+Test "Imaginary part of: catanh (-0x1p-27 - 1.0 i) == \
-3.725290298461914028034141143623846306386e-9 - \
7.853981633974483234934486536343324763447e-1 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (-0x1p-33 + 1.0 i) == \
-5.820766091346740722643102318246316469910e-11 + \
7.853981633974483096190489776088929224056e-1 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (-0x1p-33 - 1.0 i) == \
-5.820766091346740722643102318246316469910e-11 - \
7.853981633974483096190489776088929224056e-1 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (-0x1p-54 + 1.0 i) == \
-2.775557561562891351059079170227049355775e-17 + \
7.853981633974483096156608458198764914213e-1 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (-0x1p-54 - 1.0 i) == \
-2.775557561562891351059079170227049355775e-17 - \
7.853981633974483096156608458198764914213e-1 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (-0x1p-57 + 1.0 i) == \
-3.469446951953614188823848962783813448721e-18 + \
7.853981633974483096156608458198757330864e-1 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (-0x1p-57 - 1.0 i) == \
-3.469446951953614188823848962783813448721e-18 - \
7.853981633974483096156608458198757330864e-1 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (-1.0 + 0x1p-13 i) == \
-4.852030264850939738801379894163661227127 + \
7.854286809755354140031716771044626356262e-1 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (-1.0 + 0x1p-27 i) == \
-9.704060527839234335310696652368086117807 + \
7.853981652600934588466178684534110069553e-1 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (-1.0 + 0x1p-33 i) == \
-1.178350206951907026009379309773625595762e1 + \
7.853981634265521400723945494331241018449e-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 "Imaginary 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-13 i) == \
-4.852030264850939738801379894163661227127 - \
7.854286809755354140031716771044626356262e-1 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (-1.0 - 0x1p-27 i) == \
-9.704060527839234335310696652368086117807 - \
7.853981652600934588466178684534110069553e-1 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (-1.0 - 0x1p-33 i) == \
-1.178350206951907026009379309773625595762e1 - \
7.853981634265521400723945494331241018449e-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 "Imaginary part of: catanh (-1.0 - 0x1p-57 i) == \
-2.010126823623841397309973152228712047720e1 - \
7.853981633974483113503843217966828154612e-1 i": +float: 1
+ifloat: 1
 Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - \
1.3389725222944935611241935759091443 i":  double: 4
 idouble: 4
@@ -4294,6 +4604,18 @@ 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-33 i) == \
1.178350206951907026002603046195591193050e1 + \
7.853981631937214964185249205444919953948e-1 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 "Imaginary part of: catanh (0x1.000002p0 + 0x1p-13 i) == \
4.852030056234795712498957387213592193975 + \
7.859169620684960844300240092596908675974e-1 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (0x1.000002p0 - 0x1p-13 i) == \
4.852030056234795712498957387213592193975 - \
7.859169620684960844300240092596908675974e-1 i": +float: 1
+ifloat: 1
 Test "Real part of: catanh (0x1.fp1023 + 0x1.fp1023 i) == \
2.871063043235098558826106732041811695767e-309 + \
1.570796326794896619231321691639751442099 i":  double: 1
 idouble: 1
@@ -4314,6 +4636,100 @@ double: 1
 idouble: 1
 ildouble: 1
 ldouble: 1
+Test "Real part of: catanh (0x1p-13 + 0x0.ffffffp0 i) == \
6.103515973639646453881721999956617260502e-5 + \
7.853981373204155542484315721351697277336e-1 i": +double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: catanh (0x1p-13 + 0x1.000002p0 i) == \
6.103514882246036852433556327261700380577e-5 + \
7.853982267273793866654490522673596014524e-1 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (0x1p-13 + 1.0 i) == \
6.103515609841754902688560615027452023669e-5 + \
7.853981671227386080775748393881580082970e-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
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: catanh (0x1p-13 - 0x1.000002p0 i) == \
6.103514882246036852433556327261700380577e-5 - \
7.853982267273793866654490522673596014524e-1 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (0x1p-13 - 1.0 i) == \
6.103515609841754902688560615027452023669e-5 - \
7.853981671227386080775748393881580082970e-1 i": +float: 1
+ifloat: 1
+Test "Real part of: catanh (0x1p-27 + 0x0.fffffffffffff8p0 i) == \
3.725290298461914441624447420137706700965e-9 + \
7.853981633974482679822974223765039144191e-1 i": +double: 1
+idouble: 1
+Test "Real part of: catanh (0x1p-27 + 0x1.0000000000001p0 i) == \
3.725290298461913200853528590596263270474e-9 + \
7.853981633974484345157511161499711112683e-1 i": +ildouble: 1
+ldouble: 1
+Test "Imaginary part of: catanh (0x1p-27 + 1.0 i) == \
3.725290298461914028034141143623846306386e-9 + \
7.853981633974483234934486536343324763447e-1 i": +float: 1
+ifloat: 1
+Test "Real part of: catanh (0x1p-27 - 0x0.fffffffffffff8p0 i) == \
3.725290298461914441624447420137706700965e-9 - \
7.853981633974482679822974223765039144191e-1 i": +double: 1
+idouble: 1
+Test "Real part of: catanh (0x1p-27 - 0x1.0000000000001p0 i) == \
3.725290298461913200853528590596263270474e-9 - \
7.853981633974484345157511161499711112683e-1 i": +ildouble: 1
+ldouble: 1
+Test "Imaginary part of: catanh (0x1p-27 - 1.0 i) == \
3.725290298461914028034141143623846306386e-9 - \
7.853981633974483234934486536343324763447e-1 i": +float: 1
+ifloat: 1
+Test "Real part of: catanh (0x1p-33 + 0x0.ffffffffffffffffp0 i) == \
5.820766091346740722958646680334721192083e-11 + \
7.853981633974483095919439232967553115548e-1 i": +ildouble: 1
+ldouble: 1
+Test "Imaginary part of: catanh (0x1p-33 + 1.0 i) == \
5.820766091346740722643102318246316469910e-11 + \
7.853981633974483096190489776088929224056e-1 i": +float: 1
+ifloat: 1
+Test "Real part of: catanh (0x1p-33 - 0x0.ffffffffffffffffp0 i) == \
5.820766091346740722958646680334721192083e-11 - \
7.853981633974483095919439232967553115548e-1 i": +ildouble: 1
+ldouble: 1
+Test "Imaginary part of: catanh (0x1p-33 - 1.0 i) == \
5.820766091346740722643102318246316469910e-11 - \
7.853981633974483096190489776088929224056e-1 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (0x1p-54 + 1.0 i) == \
2.775557561562891351059079170227049355775e-17 + \
7.853981633974483096156608458198764914213e-1 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (0x1p-54 - 1.0 i) == \
2.775557561562891351059079170227049355775e-17 - \
7.853981633974483096156608458198764914213e-1 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (0x1p-57 + 1.0 i) == \
3.469446951953614188823848962783813448721e-18 + \
7.853981633974483096156608458198757330864e-1 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (0x1p-57 - 1.0 i) == \
3.469446951953614188823848962783813448721e-18 - \
7.853981633974483096156608458198757330864e-1 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (1.0 + 0x1p-13 i) == \
4.852030264850939738801379894163661227127 + \
7.854286809755354140031716771044626356262e-1 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (1.0 + 0x1p-27 i) == \
9.704060527839234335310696652368086117807 + \
7.853981652600934588466178684534110069553e-1 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (1.0 + 0x1p-33 i) == \
1.178350206951907026009379309773625595762e1 + \
7.853981634265521400723945494331241018449e-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 "Imaginary 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-13 i) == \
4.852030264850939738801379894163661227127 - \
7.854286809755354140031716771044626356262e-1 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (1.0 - 0x1p-27 i) == \
9.704060527839234335310696652368086117807 - \
7.853981652600934588466178684534110069553e-1 i": +float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (1.0 - 0x1p-33 i) == \
1.178350206951907026009379309773625595762e1 - \
7.853981634265521400723945494331241018449e-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 "Imaginary part of: catanh (1.0 - 0x1p-57 i) == \
2.010126823623841397309973152228712047720e1 - \
7.853981633974483113503843217966828154612e-1 i": +float: 1
+ifloat: 1
 
 # cbrt
 Test "cbrt (-0.001) == -0.1":
@@ -6865,13 +7281,15 @@ ldouble: 1
 
 Function: Real part of "catanh":
 double: 4
+float: 1
 idouble: 4
+ifloat: 1
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "catanh":
-float: 6
-ifloat: 6
+float: 1
+ifloat: 1
 
 Function: "cbrt":
 double: 1

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                         |   15 ++
 math/libm-test.inc                |  256 ++++++++++++++++++++++
 math/s_catan.c                    |   22 ++-
 math/s_catanf.c                   |   22 ++-
 math/s_catanh.c                   |   20 ++-
 math/s_catanhf.c                  |   20 ++-
 math/s_catanhl.c                  |   20 ++-
 math/s_catanl.c                   |   22 ++-
 sysdeps/i386/fpu/libm-test-ulps   |  104 +++++++++
 sysdeps/x86_64/fpu/libm-test-ulps |  422 ++++++++++++++++++++++++++++++++++++-
 10 files changed, 909 insertions(+), 14 deletions(-)


hooks/post-receive
-- 
GNU C Library master sources


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic