Use different formula for now.
authordrepper <drepper>
Wed, 3 Dec 1997 23:29:26 +0000 (23:29 +0000)
committerdrepper <drepper>
Wed, 3 Dec 1997 23:29:26 +0000 (23:29 +0000)
sysdeps/libm-ieee754/s_csqrt.c
sysdeps/libm-ieee754/s_csqrtf.c
sysdeps/libm-ieee754/s_csqrtl.c

index c5c609b..cda23c7 100644 (file)
@@ -84,6 +84,7 @@ __csqrt (__complex__ double x)
        }
       else
        {
+#if 0 /* FIXME: this is broken. */
          __complex__ double q;
          double t, r;
 
@@ -99,6 +100,15 @@ __csqrt (__complex__ double x)
 
          /* Heron iteration in complex arithmetic.  */
          res = 0.5 * (q + q / x);
+#else
+         double d, imag;
+
+         d = __ieee754_hypot (__real__ x, __imag__ x);
+         imag = __ieee754_sqrt (0.5 * (d - __real__ x));
+
+         __real__ res = __ieee754_sqrt (0.5 * (d + __real__ x));
+         __imag__ res = __copysign (imag, __imag__ x);
+#endif
        }
     }
 
index 2289045..5fdf2c1 100644 (file)
@@ -84,6 +84,7 @@ __csqrtf (__complex__ float x)
        }
       else
        {
+#if 0 /* FIXME: this is broken. */
          __complex__ float q;
          float t, r;
 
@@ -99,6 +100,15 @@ __csqrtf (__complex__ float x)
 
          /* Heron iteration in complex arithmetic.  */
          res = 0.5 * (q + q / x);
+#else
+         float d, imag;
+
+         d = __ieee754_hypotf (__real__ x, __imag__ x);
+         imag = __ieee754_sqrtf (0.5 * (d - __real__ x));
+
+         __real__ res = __ieee754_sqrtf (0.5 * (d + __real__ x));
+         __imag__ res = __copysignf (imag, __imag__ x);
+#endif
        }
     }
 
index 3de7310..b772709 100644 (file)
@@ -84,6 +84,7 @@ __csqrtl (__complex__ long double x)
        }
       else
        {
+#if 0 /* FIXME: this is broken. */
          __complex__ long double q;
          long double t, r;
 
@@ -99,6 +100,15 @@ __csqrtl (__complex__ long double x)
 
          /* Heron iteration in complex arithmetic.  */
          res = 0.5 * (q + q / x);
+#else
+         long double d, imag;
+
+         d = __ieee754_hypotl (__real__ x, __imag__ x);
+         imag = __ieee754_sqrtl (0.5 * (d - __real__ x));
+
+         __real__ res = __ieee754_sqrtl (0.5 * (d + __real__ x));
+         __imag__ res = __copysignl (imag, __imag__ x);
+#endif
        }
     }