Lines 41-47
Link Here
|
41 |
double complex |
41 |
double complex |
42 |
cexp(double complex z) |
42 |
cexp(double complex z) |
43 |
{ |
43 |
{ |
44 |
double x, y, exp_x; |
44 |
double c, exp_x, s, x, y; |
45 |
uint32_t hx, hy, lx, ly; |
45 |
uint32_t hx, hy, lx, ly; |
46 |
|
46 |
|
47 |
x = creal(z); |
47 |
x = creal(z); |
Lines 55-62
Link Here
|
55 |
return (CMPLX(exp(x), y)); |
55 |
return (CMPLX(exp(x), y)); |
56 |
EXTRACT_WORDS(hx, lx, x); |
56 |
EXTRACT_WORDS(hx, lx, x); |
57 |
/* cexp(0 + I y) = cos(y) + I sin(y) */ |
57 |
/* cexp(0 + I y) = cos(y) + I sin(y) */ |
58 |
if (((hx & 0x7fffffff) | lx) == 0) |
58 |
if (((hx & 0x7fffffff) | lx) == 0) { |
59 |
return (CMPLX(cos(y), sin(y))); |
59 |
sincos(y, &s, &c); |
|
|
60 |
return (CMPLX(c, s)); |
61 |
} |
60 |
|
62 |
|
61 |
if (hy >= 0x7ff00000) { |
63 |
if (hy >= 0x7ff00000) { |
62 |
if (lx != 0 || (hx & 0x7fffffff) != 0x7ff00000) { |
64 |
if (lx != 0 || (hx & 0x7fffffff) != 0x7ff00000) { |
Lines 86-91
Link Here
|
86 |
* - x = NaN (spurious inexact exception from y) |
88 |
* - x = NaN (spurious inexact exception from y) |
87 |
*/ |
89 |
*/ |
88 |
exp_x = exp(x); |
90 |
exp_x = exp(x); |
89 |
return (CMPLX(exp_x * cos(y), exp_x * sin(y))); |
91 |
sincos(y, &s, &c); |
|
|
92 |
return (CMPLX(exp_x * c, exp_x * s)); |
90 |
} |
93 |
} |
91 |
} |
94 |
} |