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.99303880436604133 \cdot 10^{-80}:\\
\;\;\;\;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.986375179024046 \cdot 10^{-310}:\\
\;\;\;\;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 8.899433436760234 \cdot 10^{-153}:\\
\;\;\;\;e^{\log x.re \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\
\mathbf{elif}\;x.re \le 5.92453119316243509 \cdot 10^{-30}:\\
\;\;\;\;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 r14402 = x_re;
double r14403 = r14402 * r14402;
double r14404 = x_im;
double r14405 = r14404 * r14404;
double r14406 = r14403 + r14405;
double r14407 = sqrt(r14406);
double r14408 = log(r14407);
double r14409 = y_re;
double r14410 = r14408 * r14409;
double r14411 = atan2(r14404, r14402);
double r14412 = y_im;
double r14413 = r14411 * r14412;
double r14414 = r14410 - r14413;
double r14415 = exp(r14414);
double r14416 = r14408 * r14412;
double r14417 = r14411 * r14409;
double r14418 = r14416 + r14417;
double r14419 = cos(r14418);
double r14420 = r14415 * r14419;
return r14420;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r14421 = x_re;
double r14422 = -1.9930388043660413e-80;
bool r14423 = r14421 <= r14422;
double r14424 = x_im;
double r14425 = atan2(r14424, r14421);
double r14426 = y_im;
double r14427 = r14425 * r14426;
double r14428 = y_re;
double r14429 = -1.0;
double r14430 = r14429 / r14421;
double r14431 = log(r14430);
double r14432 = r14428 * r14431;
double r14433 = r14427 + r14432;
double r14434 = -r14433;
double r14435 = exp(r14434);
double r14436 = 1.0;
double r14437 = r14435 * r14436;
double r14438 = 2.98637517902405e-310;
bool r14439 = r14421 <= r14438;
double r14440 = r14421 * r14421;
double r14441 = r14424 * r14424;
double r14442 = r14440 + r14441;
double r14443 = sqrt(r14442);
double r14444 = log(r14443);
double r14445 = r14444 * r14428;
double r14446 = r14445 - r14427;
double r14447 = exp(r14446);
double r14448 = r14447 * r14436;
double r14449 = 8.899433436760234e-153;
bool r14450 = r14421 <= r14449;
double r14451 = log(r14421);
double r14452 = r14451 * r14428;
double r14453 = r14452 - r14427;
double r14454 = exp(r14453);
double r14455 = r14454 * r14436;
double r14456 = 5.924531193162435e-30;
bool r14457 = r14421 <= r14456;
double r14458 = r14457 ? r14448 : r14455;
double r14459 = r14450 ? r14455 : r14458;
double r14460 = r14439 ? r14448 : r14459;
double r14461 = r14423 ? r14437 : r14460;
return r14461;
}



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.9930388043660413e-80Initial program 35.3
Taylor expanded around 0 19.6
Taylor expanded around -inf 2.9
if -1.9930388043660413e-80 < x.re < 2.98637517902405e-310 or 8.899433436760234e-153 < x.re < 5.924531193162435e-30Initial program 23.4
Taylor expanded around 0 13.2
if 2.98637517902405e-310 < x.re < 8.899433436760234e-153 or 5.924531193162435e-30 < x.re Initial program 39.3
Taylor expanded around 0 24.3
Taylor expanded around inf 11.5
Final simplification9.3
herbie shell --seed 2020046
(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)))))