View | Details | Raw Unified | Return to bug 235413 | Differences between
and this patch

Collapse All | Expand All

(-)msun/src/s_cexp.c (-4 / +7 lines)
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
}
(-)msun/src/s_cexpf.c (-4 / +7 lines)
Lines 41-47 Link Here
41
float complex
41
float complex
42
cexpf(float complex z)
42
cexpf(float complex z)
43
{
43
{
44
	float x, y, exp_x;
44
	float c, exp_x, s, x, y;
45
	uint32_t hx, hy;
45
	uint32_t hx, hy;
46
46
47
	x = crealf(z);
47
	x = crealf(z);
Lines 55-62 Link Here
55
		return (CMPLXF(expf(x), y));
55
		return (CMPLXF(expf(x), y));
56
	GET_FLOAT_WORD(hx, x);
56
	GET_FLOAT_WORD(hx, 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) == 0)
58
	if ((hx & 0x7fffffff) == 0) {
59
		return (CMPLXF(cosf(y), sinf(y)));
59
		sincosf(y, &s, &c);
60
		return (CMPLXF(c, s));
61
	}
60
62
61
	if (hy >= 0x7f800000) {
63
	if (hy >= 0x7f800000) {
62
		if ((hx & 0x7fffffff) != 0x7f800000) {
64
		if ((hx & 0x7fffffff) != 0x7f800000) {
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 = expf(x);
90
		exp_x = expf(x);
89
		return (CMPLXF(exp_x * cosf(y), exp_x * sinf(y)));
91
		sincosf(y, &s, &c);
92
		return (CMPLXF(exp_x * c, exp_x * s));
90
	}
93
	}
91
}
94
}

Return to bug 235413