e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \cos \left(\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\begin{array}{l}
\mathbf{if}\;x.re \le -1.366350780039598033024656614786707109488 \cdot 10^{-5}:\\
\;\;\;\;e^{-\left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im + y.re \cdot \log \left(\frac{-1}{x.re}\right)\right)} \cdot 1\\
\mathbf{elif}\;x.re \le -2.98840525710697803331839831751417796197 \cdot 10^{-83}:\\
\;\;\;\;e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\
\mathbf{elif}\;x.re \le -2.465065284575140403286728326042788472823 \cdot 10^{-250}:\\
\;\;\;\;e^{-\left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im + y.re \cdot \log \left(\frac{-1}{x.re}\right)\right)} \cdot 1\\
\mathbf{elif}\;x.re \le 2.274919071500203404023671068039559061582 \cdot 10^{-253}:\\
\;\;\;\;e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\
\mathbf{else}:\\
\;\;\;\;e^{\log x.re \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r24204 = x_re;
double r24205 = r24204 * r24204;
double r24206 = x_im;
double r24207 = r24206 * r24206;
double r24208 = r24205 + r24207;
double r24209 = sqrt(r24208);
double r24210 = log(r24209);
double r24211 = y_re;
double r24212 = r24210 * r24211;
double r24213 = atan2(r24206, r24204);
double r24214 = y_im;
double r24215 = r24213 * r24214;
double r24216 = r24212 - r24215;
double r24217 = exp(r24216);
double r24218 = r24210 * r24214;
double r24219 = r24213 * r24211;
double r24220 = r24218 + r24219;
double r24221 = cos(r24220);
double r24222 = r24217 * r24221;
return r24222;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r24223 = x_re;
double r24224 = -1.366350780039598e-05;
bool r24225 = r24223 <= r24224;
double r24226 = x_im;
double r24227 = atan2(r24226, r24223);
double r24228 = y_im;
double r24229 = r24227 * r24228;
double r24230 = y_re;
double r24231 = -1.0;
double r24232 = r24231 / r24223;
double r24233 = log(r24232);
double r24234 = r24230 * r24233;
double r24235 = r24229 + r24234;
double r24236 = -r24235;
double r24237 = exp(r24236);
double r24238 = 1.0;
double r24239 = r24237 * r24238;
double r24240 = -2.988405257106978e-83;
bool r24241 = r24223 <= r24240;
double r24242 = r24223 * r24223;
double r24243 = r24226 * r24226;
double r24244 = r24242 + r24243;
double r24245 = sqrt(r24244);
double r24246 = log(r24245);
double r24247 = r24246 * r24230;
double r24248 = r24247 - r24229;
double r24249 = exp(r24248);
double r24250 = r24249 * r24238;
double r24251 = -2.4650652845751404e-250;
bool r24252 = r24223 <= r24251;
double r24253 = 2.2749190715002034e-253;
bool r24254 = r24223 <= r24253;
double r24255 = log(r24223);
double r24256 = r24255 * r24230;
double r24257 = r24256 - r24229;
double r24258 = exp(r24257);
double r24259 = r24258 * r24238;
double r24260 = r24254 ? r24250 : r24259;
double r24261 = r24252 ? r24239 : r24260;
double r24262 = r24241 ? r24250 : r24261;
double r24263 = r24225 ? r24239 : r24262;
return r24263;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -1.366350780039598e-05 or -2.988405257106978e-83 < x.re < -2.4650652845751404e-250Initial program 34.3
Taylor expanded around 0 19.4
Taylor expanded around -inf 4.7
if -1.366350780039598e-05 < x.re < -2.988405257106978e-83 or -2.4650652845751404e-250 < x.re < 2.2749190715002034e-253Initial program 24.9
Taylor expanded around 0 12.9
if 2.2749190715002034e-253 < x.re Initial program 35.4
Taylor expanded around 0 21.9
Taylor expanded around inf 11.0
Final simplification8.9
herbie shell --seed 2019318
(FPCore (x.re x.im y.re y.im)
:name "powComplex, real part"
:precision binary64
(* (exp (- (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.re) (* (atan2 x.im x.re) y.im))) (cos (+ (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.im) (* (atan2 x.im x.re) y.re)))))