Deleted Added
full compact
s_csqrtl.c (181402) s_csqrtl.c (275819)
1/*-
2 * Copyright (c) 2007-2008 David Schultz <das@FreeBSD.ORG>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 11 unchanged lines hidden (view full) ---

20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 */
26
27#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 2007-2008 David Schultz <das@FreeBSD.ORG>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 11 unchanged lines hidden (view full) ---

20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 */
26
27#include <sys/cdefs.h>
28__FBSDID("$FreeBSD: head/lib/msun/src/s_csqrtl.c 181402 2008-08-08 00:15:16Z das $");
28__FBSDID("$FreeBSD: head/lib/msun/src/s_csqrtl.c 275819 2014-12-16 09:21:56Z ed $");
29
30#include <complex.h>
31#include <float.h>
32#include <math.h>
33
34#include "math_private.h"
35
36/*

--- 16 unchanged lines hidden (view full) ---

53 long double t;
54 int scale;
55
56 a = creall(z);
57 b = cimagl(z);
58
59 /* Handle special cases. */
60 if (z == 0)
29
30#include <complex.h>
31#include <float.h>
32#include <math.h>
33
34#include "math_private.h"
35
36/*

--- 16 unchanged lines hidden (view full) ---

53 long double t;
54 int scale;
55
56 a = creall(z);
57 b = cimagl(z);
58
59 /* Handle special cases. */
60 if (z == 0)
61 return (cpackl(0, b));
61 return (CMPLXL(0, b));
62 if (isinf(b))
62 if (isinf(b))
63 return (cpackl(INFINITY, b));
63 return (CMPLXL(INFINITY, b));
64 if (isnan(a)) {
65 t = (b - b) / (b - b); /* raise invalid if b is not a NaN */
64 if (isnan(a)) {
65 t = (b - b) / (b - b); /* raise invalid if b is not a NaN */
66 return (cpackl(a, t)); /* return NaN + NaN i */
66 return (CMPLXL(a, t)); /* return NaN + NaN i */
67 }
68 if (isinf(a)) {
69 /*
70 * csqrt(inf + NaN i) = inf + NaN i
71 * csqrt(inf + y i) = inf + 0 i
72 * csqrt(-inf + NaN i) = NaN +- inf i
73 * csqrt(-inf + y i) = 0 + inf i
74 */
75 if (signbit(a))
67 }
68 if (isinf(a)) {
69 /*
70 * csqrt(inf + NaN i) = inf + NaN i
71 * csqrt(inf + y i) = inf + 0 i
72 * csqrt(-inf + NaN i) = NaN +- inf i
73 * csqrt(-inf + y i) = 0 + inf i
74 */
75 if (signbit(a))
76 return (cpackl(fabsl(b - b), copysignl(a, b)));
76 return (CMPLXL(fabsl(b - b), copysignl(a, b)));
77 else
77 else
78 return (cpackl(a, copysignl(b - b, b)));
78 return (CMPLXL(a, copysignl(b - b, b)));
79 }
80 /*
81 * The remaining special case (b is NaN) is handled just fine by
82 * the normal code path below.
83 */
84
85 /* Scale to avoid overflow. */
86 if (fabsl(a) >= THRESH || fabsl(b) >= THRESH) {
87 a *= 0.25;
88 b *= 0.25;
89 scale = 1;
90 } else {
91 scale = 0;
92 }
93
94 /* Algorithm 312, CACM vol 10, Oct 1967. */
95 if (a >= 0) {
96 t = sqrtl((a + hypotl(a, b)) * 0.5);
79 }
80 /*
81 * The remaining special case (b is NaN) is handled just fine by
82 * the normal code path below.
83 */
84
85 /* Scale to avoid overflow. */
86 if (fabsl(a) >= THRESH || fabsl(b) >= THRESH) {
87 a *= 0.25;
88 b *= 0.25;
89 scale = 1;
90 } else {
91 scale = 0;
92 }
93
94 /* Algorithm 312, CACM vol 10, Oct 1967. */
95 if (a >= 0) {
96 t = sqrtl((a + hypotl(a, b)) * 0.5);
97 result = cpackl(t, b / (2 * t));
97 result = CMPLXL(t, b / (2 * t));
98 } else {
99 t = sqrtl((-a + hypotl(a, b)) * 0.5);
98 } else {
99 t = sqrtl((-a + hypotl(a, b)) * 0.5);
100 result = cpackl(fabsl(b) / (2 * t), copysignl(t, b));
100 result = CMPLXL(fabsl(b) / (2 * t), copysignl(t, b));
101 }
102
103 /* Rescale. */
104 if (scale)
105 return (result * 2);
106 else
107 return (result);
108}
101 }
102
103 /* Rescale. */
104 if (scale)
105 return (result * 2);
106 else
107 return (result);
108}