void _CDTOD(d_complex_t *ret_val, d_complex_t x, _f_real16 *r) { _f_real16 __atan2l(_f_real16 ax, _f_real16 bx); _f_real16 __cosl(_f_real16 ax); _f_real16 __expl(_f_real16 ax); _f_real16 __logl(_f_real16 ax); _f_real16 __sinl(_f_real16 ax); _f_real16 _CDABS(d_complex_t z); _f_real16 y = *r; _f_real16 one; _f_real16 two; if (x.real == (_f_real16) 0.0 && x.imag == (_f_real16) 0.0) { if (y == (_f_real16) 0.0) { ret_val->real = _DBL_NaN; ret_val->imag = _DBL_NaN; } else { ret_val->real = (_f_real16) 0.0; ret_val->imag = (_f_real16) 0.0; } return; } one = y * __atan2l(x.imag, x.real); two = y * __logl(_CDABS(x)); ret_val->real = __expl(two) * __cosl(one); ret_val->imag = __expl(two) * __sinl(one); }
void _CDTOCD(d_complex_t *ret_val, d_complex_t x, d_complex_t y) { _f_real16 __atan2l(_f_real16 ax, _f_real16 bx); _f_real16 __cosl(_f_real16 ax); _f_real16 __expl(_f_real16 ax); _f_real16 __logl(_f_real16 ax); _f_real16 __sinl(_f_real16 ax); _f_real16 __sqrtl(_f_real16 ax); _f_real16 a; _f_real16 b; _f_real16 c; _f_real16 d; _f_real16 one; _f_real16 two; REGISTER_16 realx; REGISTER_16 imagx; _f_real16 loglabsx, atn2l, expltwo; if (x.real == 0.0 && x.imag == 0.0) { if (y.real == 0.0 && y.imag == 0.0) { ret_val->real = _DBL_NaN; ret_val->imag = _DBL_NaN; } else { ret_val->real = (_f_real16) 0.0; ret_val->imag = (_f_real16) 0.0; } return; } realx.f = x.real; imagx.f = x.imag; a = x.real; b = x.imag; c = y.real; d = y.imag; /* clear sign bit */ realx.ui[0] &= ~IEEE_128_64_SIGN_BIT; imagx.ui[0] &= ~IEEE_128_64_SIGN_BIT; atn2l = __atan2l(b,a); if (realx.f > imagx.f) loglabsx = __logl(realx.f * __sqrtl(1.0 + (imagx.f/realx.f) * (imagx.f/realx.f))); else loglabsx = __logl(imagx.f * __sqrtl(1.0 + (realx.f/imagx.f) * (realx.f/imagx.f))); one = d * loglabsx + c * atn2l; two = c * loglabsx - d * atn2l; expltwo = __expl(two); ret_val->real = expltwo * __cosl(one); ret_val->imag = expltwo * __sinl(one); }
void _CDLOG(d_complex_t *ret_val, d_complex_t z) { _f_real16 __logl(_f_real16 x); _f_real16 __atan2l(_f_real16 x, _f_real16 y); _f_real16 _CDABS(d_complex_t z ); ret_val->real = __logl(_CDABS(z)); ret_val->imag = __atan2l(z.imag, z.real); }
long double __cargl (__complex__ long double x) { return __atan2l (__imag__ x, __real__ x); }