From 88e236a627d7195a938bce0b7cde92c2da2abedf Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Thu, 8 Apr 2010 15:32:51 -0700 Subject: Fix cproj implmentation. --- sysdeps/ieee754/ldbl-128ibm/s_cprojl.c | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) (limited to 'sysdeps/ieee754/ldbl-128ibm') diff --git a/sysdeps/ieee754/ldbl-128ibm/s_cprojl.c b/sysdeps/ieee754/ldbl-128ibm/s_cprojl.c index 2167db3d91..b2a09ae885 100644 --- a/sysdeps/ieee754/ldbl-128ibm/s_cprojl.c +++ b/sysdeps/ieee754/ldbl-128ibm/s_cprojl.c @@ -1,5 +1,5 @@ /* Compute projection of complex long double value to Riemann sphere. - Copyright (C) 1997,1999,2006 Free Software Foundation, Inc. + Copyright (C) 1997,1999,2006,2010 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1997. @@ -25,30 +25,18 @@ __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)) { + __complex__ long double res; + __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; } - return res; + return x; } long_double_symbol (libm, __cprojl, cprojl); -- cgit v1.2.3