This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] PPC fixes for long double


This patch resolves the ulps failures in cprojl, ctanhl, ctanl, ceill,
floorl, and the Bessel functions (j0, j1, jn, y0, y1, yn).

The double double runtime does not propigate -0.0 correctly in some
case. So I have to add fixup code to some complex functions. Similarly
ceill, floorl needed explicite handling for the correct sign of 0.0;

Also found that the k_cosl, k_sinl, k_sincosl did not compute the index
into the __sincosl_table correcly for double double. The result is bad
values for larger radian inputs and cause the Bessel function failures.
Hacked around it by converting the high 32-bit (integer form) of the
high double to ieee extended and used the index calc from the ldbl-128
(ieee extended) version.


2006-01-30  Steven Munroe  <sjmunroe@us.ibm.com>

	* sysdeps/ieee754/ldbl-128ibm/k_cosl.c (__kernel_cosl): Correct index
	for __sincosl_table.
	* sysdeps/ieee754/ldbl-128ibm/k_sincosl.c (__kernel_cosl): Correct
	index for __sincosl_table.
	* sysdeps/ieee754/ldbl-128ibm/k_sinl.c (__kernel_cosl): Correct index
	for __sincosl_table.

	* sysdeps/ieee754/ldbl-128ibm/s_ceill.c: Correct sign of 0.0.
	* sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Correct sign of 0.0.

	* sysdeps/ieee754/ldbl-128ibm/s_cprojl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_ctanhl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_ctanl.c: New file.

	* sysdeps/powerpc/fpu/libm-test-ulps: Update j0, j1, jn, y0, y1, yn
	ulps to match the kcosl/ksinl fix.


diff -urN libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/k_cosl.c libc24/sysdeps/ieee754/ldbl-128ibm/k_cosl.c
--- libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/k_cosl.c	2006-01-27 18:07:25.000000000 -0600
+++ libc24/sysdeps/ieee754/ldbl-128ibm/k_cosl.c	2006-01-30 14:19:19.000000000 -0600
@@ -104,6 +104,24 @@
 	 pre-computed tables,  compute cosl(l) and sinl(l) using a
 	 Chebyshev polynomial of degree 10(11) and compute
 	 cosl(h+l) = cosl(h)cosl(l) - sinl(h)sinl(l).  */
+      int six = tix;
+      tix = ((six - 0x3ff00000) >> 4) + 0x3fff0000;
+      index = 0x3ffe - (tix >> 16);
+      hix = (tix + (0x200 << index)) & (0xfffffc00 << index);
+      x = fabsl (x);
+      switch (index)
+	{
+	case 0: index = ((45 << 10) + hix - 0x3ffe0000) >> 8; break;
+	case 1: index = ((13 << 11) + hix - 0x3ffd0000) >> 9; break;
+	default:
+	case 2: index = (hix - 0x3ffc3000) >> 10; break;
+	}
+      hix = (hix << 4) & 0x3fffffff;
+/*
+    The following should work for double but generates the wrong index.
+    For now the code above converts double to ieee extended to compute
+    the index back to double for the h value.
+    
       index = 0x3fe - (tix >> 20);
       hix = (tix + (0x200 << index)) & (0xfffffc00 << index);
       x = fabsl (x);
@@ -114,7 +132,7 @@
 	default:
 	case 2: index = (hix - 0x3fc30000) >> 14; break;
 	}
-
+*/
       SET_LDOUBLE_WORDS64(h, ((u_int64_t)hix) << 32, 0);
       l = y - (h - x);
       z = l * l;
diff -urN libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/k_sincosl.c libc24/sysdeps/ieee754/ldbl-128ibm/k_sincosl.c
--- libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/k_sincosl.c	2006-01-27 18:07:25.000000000 -0600
+++ libc24/sysdeps/ieee754/ldbl-128ibm/k_sincosl.c	2006-01-30 14:19:19.000000000 -0600
@@ -131,6 +131,25 @@
 	 Chebyshev polynomial of degree 10(11) and compute
 	 sinl(h+l) = sinl(h)cosl(l) + cosl(h)sinl(l) and
 	 cosl(h+l) = cosl(h)cosl(l) - sinl(h)sinl(l).  */
+      int six = tix;
+      tix = ((six - 0x3ff00000) >> 4) + 0x3fff0000;
+      index = 0x3ffe - (tix >> 16);
+      hix = (tix + (0x200 << index)) & (0xfffffc00 << index);
+      x = fabsl (x);
+      switch (index)
+	{
+	case 0: index = ((45 << 10) + hix - 0x3ffe0000) >> 8; break;
+	case 1: index = ((13 << 11) + hix - 0x3ffd0000) >> 9; break;
+	default:
+	case 2: index = (hix - 0x3ffc3000) >> 10; break;
+	}
+      hix = (hix << 4) & 0x3fffffff;
+/*
+    The following should work for double but generates the wrong index.
+    For now the code above converts double to ieee extended to compute
+    the index back to double for the h value. 
+    
+
       index = 0x3fe - (tix >> 20);
       hix = (tix + (0x2000 << index)) & (0xffffc000 << index);
       x = fabsl (x);
@@ -141,7 +160,7 @@
 	default:
 	case 2: index = (hix - 0x3fc30000) >> 14; break;
 	}
-
+*/
       SET_LDOUBLE_WORDS64(h, ((u_int64_t)hix) << 32, 0);
       if (iy)
 	l = y - (h - x);
diff -urN libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/k_sinl.c libc24/sysdeps/ieee754/ldbl-128ibm/k_sinl.c
--- libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/k_sinl.c	2006-01-27 18:07:25.000000000 -0600
+++ libc24/sysdeps/ieee754/ldbl-128ibm/k_sinl.c	2006-01-30 14:19:19.000000000 -0600
@@ -104,6 +104,24 @@
 	 pre-computed tables,  compute cosl(l) and sinl(l) using a
 	 Chebyshev polynomial of degree 10(11) and compute
 	 sinl(h+l) = sinl(h)cosl(l) + cosl(h)sinl(l).  */
+      int six = tix;
+      tix = ((six - 0x3ff00000) >> 4) + 0x3fff0000;
+      index = 0x3ffe - (tix >> 16);
+      hix = (tix + (0x200 << index)) & (0xfffffc00 << index);
+      x = fabsl (x);
+      switch (index)
+	{
+	case 0: index = ((45 << 10) + hix - 0x3ffe0000) >> 8; break;
+	case 1: index = ((13 << 11) + hix - 0x3ffd0000) >> 9; break;
+	default:
+	case 2: index = (hix - 0x3ffc3000) >> 10; break;
+	}
+      hix = (hix << 4) & 0x3fffffff;
+/*
+    The following should work for double but generates the wrong index.
+    For now the code above converts double to ieee extended to compute
+    the index back to double for the h value. 
+    
       index = 0x3fe - (tix >> 20);
       hix = (tix + (0x2000 << index)) & (0xffffc000 << index);
       x = fabsl (x);
@@ -114,7 +132,7 @@
 	default:
 	case 2: index = (hix - 0x3fc30000) >> 14; break;
 	}
-
+*/
       SET_LDOUBLE_WORDS64(h, ((u_int64_t)hix) << 32, 0);
       if (iy)
 	l = y - (h - x);
diff -urN libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/s_ceill.c libc24/sysdeps/ieee754/ldbl-128ibm/s_ceill.c
--- libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/s_ceill.c	2006-01-27 18:07:25.000000000 -0600
+++ libc24/sysdeps/ieee754/ldbl-128ibm/s_ceill.c	2006-01-30 18:01:43.000000000 -0600
@@ -44,19 +44,23 @@
   u.d = x;
 
   if (fabs (u.dd[0]) < TWO52)
-    {      
+    {
+      double high = u.dd[0];
       fesetround(FE_UPWARD);
-      if (u.dd[0] > 0.0)
+      if (high > 0.0)
 	{
-	  u.dd[0] += TWO52;
-	  u.dd[0] -= TWO52;
+	  high += TWO52;
+	  high -= TWO52;
+          if (high == -0.0) high = 0.0;
 	}
-      else if (u.dd[0] < 0.0)
+      else if (high < 0.0)
 	{
-	  u.dd[0] -= TWO52;
-	  u.dd[0] += TWO52;
+	  high -= TWO52;
+	  high += TWO52;
+          if (high == 0.0) high = -0.0;
 	}
-      u.dd[1] = 0.0;      
+      u.dd[0] = high;
+      u.dd[1] = 0.0;
       fesetround(mode);
     }
   else if (fabs (u.dd[1]) < TWO52 && u.dd[1] != 0.0)
diff -urN libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/s_cprojl.c libc24/sysdeps/ieee754/ldbl-128ibm/s_cprojl.c
--- libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/s_cprojl.c	Wed Dec 31 18:00:00 1969
+++ libc24/sysdeps/ieee754/ldbl-128ibm/s_cprojl.c	Mon Jan 30 14:19:19 2006
@@ -0,0 +1,54 @@
+/* Compute projection of complex long double value to Riemann sphere.
+   Copyright (C) 1997, 1999, 2006 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <complex.h>
+#include <math.h>
+#include <math_ldbl_opt.h>
+
+__complex__ long double
+__cprojl (__complex__ long double x)
+{
+  __complex__ long double res;
+  
+  if (isnan (__real__ x) && isnan (__imag__ x))
+    return x;
+  else if (!isfinite (__real__ x) || !isfinite (__imag__ x))
+    {
+      __real__ res = INFINITY;
+      __imag__ res = __copysignl (0.0, __imag__ x);
+    }
+  else
+    {
+      long double den = (__real__ x * __real__ x + __imag__ x * __imag__ x
+			 + 1.0);
+			   
+      __real__ res = (2.0 * __real__ x) / den;
+      __imag__ res = (2.0 * __imag__ x) / den;
+      /* __gcc_qmul does not respect -0.0 so we need the following fixup.  */   
+       if (__real__ x == 0.0)
+         __real__ res = __real__ x;
+       
+       if (__imag__ x == 0.0)
+         __imag__ res = __imag__ x;
+    }
+
+  return res;
+}
+long_double_symbol (libm, __cprojl, cprojl);
diff -urN libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/s_ctanhl.c libc24/sysdeps/ieee754/ldbl-128ibm/s_ctanhl.c
--- libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/s_ctanhl.c	Wed Dec 31 18:00:00 1969
+++ libc24/sysdeps/ieee754/ldbl-128ibm/s_ctanhl.c	Mon Jan 30 14:19:19 2006
@@ -0,0 +1,87 @@
+/* Complex hyperbole tangent for long double.
+   Copyright (C) 1997, 2005, 2006 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <complex.h>
+#include <fenv.h>
+#include <math.h>
+#include <math_ldbl_opt.h>
+
+#include "math_private.h"
+
+
+__complex__ long double
+__ctanhl (__complex__ long double x)
+{
+  __complex__ long double res;
+
+  if (!isfinite (__real__ x) || !isfinite (__imag__ x))
+    {
+      if (__isinfl (__real__ x))
+	{
+	  __real__ res = __copysignl (1.0, __real__ x);
+	  __imag__ res = __copysignl (0.0, __imag__ x);
+	}
+      else if (__imag__ x == 0.0)
+	{
+	  res = x;
+	}
+      else
+	{
+	  __real__ res = __nanl ("");
+	  __imag__ res = __nanl ("");
+
+#ifdef FE_INVALID
+	  if (__isinfl (__imag__ x))
+	    feraiseexcept (FE_INVALID);
+#endif
+	}
+    }
+  else
+    {
+      long double sin2ix, cos2ix;
+      long double den;
+
+      __sincosl (2.0 * __imag__ x, &sin2ix, &cos2ix);
+
+      den = (__ieee754_coshl (2.0 * __real__ x) + cos2ix);
+
+      if (den == 0.0L)
+	{
+	  __complex__ long double ez = __cexpl (x);
+	  __complex__ long double emz = __cexpl (-x);
+
+	  res = (ez - emz) / (ez + emz);
+	}
+      else
+	{
+	  __real__ res = __ieee754_sinhl (2.0 * __real__ x) / den;
+	  __imag__ res = sin2ix / den;
+	}
+      /* __gcc_qmul does not respect -0.0 so we need the following fixup.  */   
+      if ((__real__ res == 0.0) && (__real__ x == 0.0))
+        __real__ res = __real__ x;
+       
+      if ((__real__ res == 0.0) && (__imag__ x == 0.0))
+        __imag__ res = __imag__ x;
+    }
+
+  return res;
+}
+long_double_symbol (libm, __ctanhl, ctanhl);
diff -urN libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/s_ctanl.c libc24/sysdeps/ieee754/ldbl-128ibm/s_ctanl.c
--- libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/s_ctanl.c	Wed Dec 31 18:00:00 1969
+++ libc24/sysdeps/ieee754/ldbl-128ibm/s_ctanl.c	Mon Jan 30 14:19:19 2006
@@ -0,0 +1,88 @@
+/* Complex tangent function for long double.
+   Copyright (C) 1997, 2005, 2006 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <complex.h>
+#include <fenv.h>
+#include <math.h>
+#include <math_ldbl_opt.h>
+
+#include "math_private.h"
+
+
+__complex__ long double
+__ctanl (__complex__ long double x)
+{
+  __complex__ long double res;
+
+  if (!isfinite (__real__ x) || !isfinite (__imag__ x))
+    {
+      if (__isinfl (__imag__ x))
+	{
+	  __real__ res = __copysignl (0.0, __real__ x);
+	  __imag__ res = __copysignl (1.0, __imag__ x);
+	}
+      else if (__real__ x == 0.0)
+	{
+	  res = x;
+	}
+      else
+	{
+	  __real__ res = __nanl ("");
+	  __imag__ res = __nanl ("");
+
+#ifdef FE_INVALID
+	  if (__isinfl (__real__ x))
+	    feraiseexcept (FE_INVALID);
+#endif
+	}
+    }
+  else
+    {
+      long double sin2rx, cos2rx;
+      long double den;
+
+      __sincosl (2.0 * __real__ x, &sin2rx, &cos2rx);
+
+      den = cos2rx + __ieee754_coshl (2.0 * __imag__ x);
+
+
+      if (den == 0.0)
+	{
+	  __complex__ long double ez = __cexpl (1.0i * x);
+	  __complex__ long double emz = __cexpl (-1.0i * x);
+
+	  res = (ez - emz) / (ez + emz) * -1.0i;
+	}
+      else
+	{
+	  __real__ res = sin2rx / den;
+	  __imag__ res = __ieee754_sinhl (2.0 * __imag__ x) / den;
+	}
+      /* __gcc_qmul does not respect -0.0 so we need the following fixup.  */   
+      if ((__real__ res == 0.0) && (__real__ x == 0.0))
+        __real__ res = __real__ x;
+       
+      if ((__real__ res == 0.0) && (__imag__ x == 0.0))
+        __imag__ res = __imag__ x;
+    }
+
+  return res;
+}
+long_double_symbol (libm, __ctanl, ctanl);
diff -urN libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/s_floorl.c libc24/sysdeps/ieee754/ldbl-128ibm/s_floorl.c
--- libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/s_floorl.c	2006-01-27 18:07:25.000000000 -0600
+++ libc24/sysdeps/ieee754/ldbl-128ibm/s_floorl.c	2006-01-30 18:03:06.000000000 -0600
@@ -44,18 +44,22 @@
   u.d = x;
 
   if (fabs (u.dd[0]) < TWO52)
-    {     
+    {
+      double high = u.dd[0];
       fesetround(FE_DOWNWARD);
-      if (u.dd[0] > 0.0)
+      if (high > 0.0)
 	{
-	  u.dd[0] += TWO52;
-	  u.dd[0] -= TWO52;
+	  high += TWO52;
+	  high -= TWO52;
+          if (high == -0.0) high = 0.0;
 	}
-      else if (u.dd[0] < 0.0)
+      else if (high < 0.0)
 	{
-	  u.dd[0] -= TWO52;
-	  u.dd[0] += TWO52;
+	  high -= TWO52;
+	  high += TWO52;
+          if (high == 0.0) high = -0.0;
 	}
+      u.dd[0] = high;
       u.dd[1] = 0.0;
       fesetround(mode);
     }
diff -urN libc24-cvstip-20060130b/sysdeps/powerpc/fpu/libm-test-ulps libc24/sysdeps/powerpc/fpu/libm-test-ulps
--- libc24-cvstip-20060130b/sysdeps/powerpc/fpu/libm-test-ulps	2006-01-30 16:29:27.000000000 -0600
+++ libc24/sysdeps/powerpc/fpu/libm-test-ulps	2006-01-30 18:22:09.562194992 -0600
@@ -37,16 +37,9 @@
 ldouble: 1
 
 # cacosh
-Test "Real part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
-double: 1
-float: 7
-idouble: 1
-ifloat: 7
 Test "Imaginary part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
-double: 1
-float: 3
-idouble: 1
-ifloat: 3
+float: 1
+ifloat: 1
 
 # casin
 Test "Real part of: casin (-2 - 3 i) == -0.57065278432109940071028387968566963 - 1.9833870299165354323470769028940395 i":
@@ -84,8 +77,6 @@
 
 # catan
 Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
-float: 3
-ifloat: 3
 ildouble: 1
 ldouble: 1
 Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
@@ -93,23 +84,14 @@
 float: 1
 idouble: 1
 ifloat: 1
-Test "Real part of: catan (0.75 + 1.25 i) == 1.10714871779409050301706546017853704 + 0.549306144334054845697622618461262852 i":
-float: 4
-ifloat: 4
 
 # catanh
 Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
 double: 4
 idouble: 4
-Test "Imaginary part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
-float: 4
-ifloat: 4
 Test "Real part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
 double: 1
 idouble: 1
-Test "Imaginary part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
-float: 6
-ifloat: 6
 
 # cbrt
 Test "cbrt (-27.0) == -3.0":
@@ -167,8 +149,6 @@
 
 # clog
 Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i":
-float: 3
-ifloat: 3
 ildouble: 1
 ldouble: 1
 Test "Real part of: clog (0.75 + 1.25 i) == 0.376885901188190075998919126749298416 + 1.03037682652431246378774332703115153 i":
@@ -197,9 +177,7 @@
 ldouble: 1
 Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
 double: 1
-float: 5
 idouble: 1
-ifloat: 5
 ildouble: 1
 ldouble: 1
 Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i":
@@ -298,19 +276,15 @@
 # cos
 Test "cos (M_PI_6l * 2.0) == 0.5":
 double: 1
-float: 1
 idouble: 1
-ifloat: 1
 Test "cos (M_PI_6l * 4.0) == -0.5":
 double: 2
 float: 1
 idouble: 2
 ifloat: 1
-Test "cos (pi/2) == 0":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
+Test "cos (16.0) == -0.9576594803233846418996372326511034717803"
+ildouble: 2
+ldouble: 2
 
 # cpow
 Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
@@ -381,9 +355,6 @@
 ifloat: 1
 
 # ctan
-Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
-double: 1
-idouble: 1
 Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
 ildouble: 1
 ldouble: 1
@@ -446,10 +417,10 @@
 ildouble: 1
 ldouble: 1
 Test "exp10 (3) == 1000":
-double: 6
 float: 2
-idouble: 6
 ifloat: 2
+double: 6
+idouble: 6
 ildouble: 8
 ldouble: 8
 
@@ -500,68 +471,92 @@
 # j0
 Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1":
 double: 1
-float: 2
+float: 1
 idouble: 1
-ifloat: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "j0 (10.0) == -0.245935764451348335197760862485328754":
-double: 3
+double: 2
 float: 1
-idouble: 3
+idouble: 2
 ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "j0 (2.0) == 0.223890779141235668051827454649948626":
 float: 2
 ifloat: 2
 Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1":
 double: 1
-float: 2
+float: 1
 idouble: 1
-ifloat: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "j0 (8.0) == 0.171650807137553906090869407851972001":
 float: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 
 # j1
 Test "j1 (10.0) == 0.0434727461688614366697487680258592883":
 float: 2
 ifloat: 2
+ildouble: 1
+ldouble: 1
 Test "j1 (2.0) == 0.576724807756873387202448242269137087":
 double: 1
 idouble: 1
 Test "j1 (8.0) == 0.234636346853914624381276651590454612":
 double: 1
 idouble: 1
+ildouble: 1
+ldouble: 1
 
 # jn
 Test "jn (0, -4.0) == -3.9714980986384737228659076845169804197562E-1":
 double: 1
-float: 2
+float: 1
 idouble: 1
-ifloat: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "jn (0, 10.0) == -0.245935764451348335197760862485328754":
-double: 3
+double: 2
 float: 1
-idouble: 3
+idouble: 2
 ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "jn (0, 2.0) == 0.223890779141235668051827454649948626":
 float: 2
 ifloat: 2
 Test "jn (0, 4.0) == -3.9714980986384737228659076845169804197562E-1":
 double: 1
-float: 2
+float: 1
 idouble: 1
-ifloat: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "jn (0, 8.0) == 0.171650807137553906090869407851972001":
 float: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "jn (1, 10.0) == 0.0434727461688614366697487680258592883":
 float: 2
 ifloat: 2
+ildouble: 1
+ldouble: 1
 Test "jn (1, 2.0) == 0.576724807756873387202448242269137087":
 double: 1
 idouble: 1
 Test "jn (1, 8.0) == 0.234636346853914624381276651590454612":
 double: 1
 idouble: 1
+ildouble: 1
+ldouble: 1
 Test "jn (10, -1.0) == 0.263061512368745320699785368779050294e-9":
 ildouble: 1
 ldouble: 1
@@ -583,6 +578,8 @@
 Test "jn (10, 10.0) == 0.207486106633358857697278723518753428":
 float: 1
 ifloat: 1
+ildouble: 4
+ldouble: 4
 Test "jn (10, 2.0) == 0.251538628271673670963516093751820639e-6":
 float: 4
 ifloat: 4
@@ -602,9 +599,11 @@
 ldouble: 1
 Test "jn (3, 10.0) == 0.0583793793051868123429354784103409563":
 double: 3
-float: 2
+float: 1
 idouble: 3
-ifloat: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
 Test "jn (3, 2.0) == 0.128943249474402051098793332969239835":
 double: 1
 float: 2
@@ -647,22 +646,20 @@
 ildouble: 1
 ldouble: 1
 
+# sin
+Test "sin (16.0) == -0.2879033166650652947844562482186175296207"
+ildouble: 2
+ldouble: 2
+
 # sincos
 Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
 double: 1
-float: 1
 idouble: 1
-ifloat: 1
 Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res":
 double: 1
 float: 1
 idouble: 1
 ifloat: 1
-Test "sincos (pi/2, &sin_res, &cos_res) puts 0 in cos_res":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
 Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res":
 float: 1
 ifloat: 1
@@ -674,8 +671,6 @@
 
 # tan
 Test "tan (pi/4) == 1":
-double: 1
-idouble: 1
 ildouble: 1
 ldouble: 1
 
@@ -718,19 +713,23 @@
 float: 1
 idouble: 2
 ifloat: 1
-Test "y0 (10.0) == 0.0556711672835993914244598774101900481":
+Test "y0 (2.0) == 0.510375672649745119596606592727157873":
 double: 1
-float: 1
 idouble: 1
+Test "y0 (10.0) == 0.0556711672835993914244598774101900481":
+float: 1
 ifloat: 1
-Test "y0 (2.0) == 0.510375672649745119596606592727157873":
-double: 1
 idouble: 1
+double: 1
+ildouble: 1
+ldouble: 1
 Test "y0 (8.0) == 0.223521489387566220527323400498620359":
 double: 1
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 
 # y1
 Test "y1 (0.125) == -5.19993611253477499595928744876579921":
@@ -744,16 +743,20 @@
 float: 1
 idouble: 3
 ifloat: 1
+ildouble: 2
+ldouble: 2
 Test "y1 (2.0) == -0.107032431540937546888370772277476637":
 double: 1
 float: 1
-idouble: 1
-ifloat: 1
+idouble: 2
+ifloat: 2
 Test "y1 (8.0) == -0.158060461731247494255555266187483550":
 double: 1
 float: 2
 idouble: 1
 ifloat: 2
+ildouble: 2
+ldouble: 2
 
 # yn
 Test "yn (0, 0.75) == -0.137172769385772397522814379396581855":
@@ -764,37 +767,43 @@
 float: 1
 idouble: 2
 ifloat: 1
-ildouble: 1
-ldouble: 1
+ildouble: 2
+ldouble: 2
 Test "yn (0, 1.5) == 0.382448923797758843955068554978089862":
 double: 2
 float: 1
 idouble: 2
 ifloat: 1
-Test "yn (0, 10.0) == 0.0556711672835993914244598774101900481":
+Test "yn (0, 2.0) == 0.510375672649745119596606592727157873":
 double: 1
-float: 1
 idouble: 1
+Test "yn (0, 10.0) == 0.0556711672835993914244598774101900481":
+float: 1
 ifloat: 1
-Test "yn (0, 2.0) == 0.510375672649745119596606592727157873":
-double: 1
 idouble: 1
+double: 1
+ildouble: 2
+ldouble: 2
 Test "yn (0, 8.0) == 0.223521489387566220527323400498620359":
 double: 1
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 2
+ldouble: 2
 Test "yn (1, 0.125) == -5.19993611253477499595928744876579921":
 double: 1
 idouble: 1
 Test "yn (1, 1.5) == -0.412308626973911295952829820633445323":
-float: 2
-ifloat: 2
+float: 1
+ifloat: 1
 Test "yn (1, 10.0) == 0.249015424206953883923283474663222803":
 double: 3
 float: 1
 idouble: 3
 ifloat: 1
+ildouble: 2
+ldouble: 2
 Test "yn (1, 2.0) == -0.107032431540937546888370772277476637":
 double: 1
 float: 1
@@ -805,9 +814,8 @@
 float: 2
 idouble: 1
 ifloat: 2
-Test "yn (3, 0.125) == -2612.69757350066712600220955744091741":
-double: 1
-idouble: 1
+ildouble: 2
+ldouble: 2
 Test "yn (10, 0.125) == -127057845771019398.252538486899753195":
 double: 1
 idouble: 1
@@ -821,16 +829,16 @@
 ifloat: 2
 Test "yn (10, 10.0) == -0.359814152183402722051986577343560609":
 double: 2
-float: 2
 idouble: 2
-ifloat: 2
+ildouble: 2
+ldouble: 2
 Test "yn (10, 2.0) == -129184.542208039282635913145923304214":
-double: 3
 float: 1
-idouble: 3
 ifloat: 1
-ildouble: 1
-ldouble: 1
+double: 3
+idouble: 3
+ldouble: 2
+ildouble: 2
 Test "yn (3, 0.125) == -2612.69757350066712600220955744091741":
 double: 1
 idouble: 1
@@ -842,6 +850,8 @@
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 2
+ldouble: 2
 Test "yn (3, 2.0) == -1.12778377684042778608158395773179238":
 double: 1
 idouble: 1
@@ -886,18 +896,12 @@
 ldouble: 1
 
 Function: Real part of "cacosh":
-double: 1
-float: 7
-idouble: 1
-ifloat: 7
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "cacosh":
-double: 1
-float: 3
-idouble: 1
-ifloat: 3
+float: 1
+ifloat: 1
 
 Function: Real part of "casin":
 double: 1
@@ -928,8 +932,6 @@
 ldouble: 1
 
 Function: Real part of "catan":
-float: 4
-ifloat: 4
 ildouble: 1
 ldouble: 1
 
@@ -945,10 +947,6 @@
 double: 4
 idouble: 4
 
-Function: Imaginary part of "catanh":
-float: 6
-ifloat: 6
-
 Function: "cbrt":
 double: 1
 idouble: 1
@@ -1002,8 +1000,6 @@
 ldouble: 2
 
 Function: Imaginary part of "clog":
-float: 3
-ifloat: 3
 ildouble: 1
 ldouble: 1
 
@@ -1015,9 +1011,9 @@
 
 Function: Imaginary part of "clog10":
 double: 1
-float: 5
+float: 1
 idouble: 1
-ifloat: 5
+ifloat: 1
 ildouble: 1
 ldouble: 1
 
@@ -1082,8 +1078,6 @@
 ldouble: 1
 
 Function: Real part of "ctan":
-double: 1
-idouble: 1
 ildouble: 1
 ldouble: 1
 
@@ -1130,8 +1124,8 @@
 float: 2
 idouble: 6
 ifloat: 2
-ildouble: 8
-ldouble: 8
+ildouble: 1
+ldouble: 1
 
 Function: "exp2":
 ildouble: 2
@@ -1154,22 +1148,28 @@
 ldouble: 1
 
 Function: "j0":
-double: 3
+double: 2
 float: 2
-idouble: 3
+idouble: 2
 ifloat: 2
+ildouble: 1
+ldouble: 1
 
 Function: "j1":
 double: 1
 float: 2
 idouble: 1
 ifloat: 2
+ildouble: 1
+ldouble: 1
 
 Function: "jn":
 double: 3
 float: 4
 idouble: 3
 ifloat: 4
+ildouble: 4
+ldouble: 4
 
 Function: "lgamma":
 double: 1
@@ -1244,17 +1244,23 @@
 float: 1
 idouble: 2
 ifloat: 1
+ildouble: 1
+ldouble: 1
 
 Function: "y1":
 double: 3
 float: 2
 idouble: 3
 ifloat: 2
+ildouble: 2
+ldouble: 2
 
 Function: "yn":
 double: 3
 float: 2
 idouble: 3
 ifloat: 2
+ildouble: 2
+ldouble: 2
 
 # end of automatic generation

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]