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}\;y.re \le -45076284368.73265:\\
\;\;\;\;e^{\log \left(\sqrt{x.im \cdot x.im + x.re \cdot x.re}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\mathbf{else}:\\
\;\;\;\;e^{y.re \cdot \log \left(-x.re\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r837560 = x_re;
double r837561 = r837560 * r837560;
double r837562 = x_im;
double r837563 = r837562 * r837562;
double r837564 = r837561 + r837563;
double r837565 = sqrt(r837564);
double r837566 = log(r837565);
double r837567 = y_re;
double r837568 = r837566 * r837567;
double r837569 = atan2(r837562, r837560);
double r837570 = y_im;
double r837571 = r837569 * r837570;
double r837572 = r837568 - r837571;
double r837573 = exp(r837572);
double r837574 = r837566 * r837570;
double r837575 = r837569 * r837567;
double r837576 = r837574 + r837575;
double r837577 = cos(r837576);
double r837578 = r837573 * r837577;
return r837578;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r837579 = y_re;
double r837580 = -45076284368.73265;
bool r837581 = r837579 <= r837580;
double r837582 = x_im;
double r837583 = r837582 * r837582;
double r837584 = x_re;
double r837585 = r837584 * r837584;
double r837586 = r837583 + r837585;
double r837587 = sqrt(r837586);
double r837588 = log(r837587);
double r837589 = r837588 * r837579;
double r837590 = atan2(r837582, r837584);
double r837591 = y_im;
double r837592 = r837590 * r837591;
double r837593 = r837589 - r837592;
double r837594 = exp(r837593);
double r837595 = -r837584;
double r837596 = log(r837595);
double r837597 = r837579 * r837596;
double r837598 = r837597 - r837592;
double r837599 = exp(r837598);
double r837600 = r837581 ? r837594 : r837599;
return r837600;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.re < -45076284368.73265Initial program 36.0
Taylor expanded around 0 0
if -45076284368.73265 < y.re Initial program 27.6
Taylor expanded around 0 25.2
Taylor expanded around -inf 0.4
Simplified0.4
Final simplification0.3
herbie shell --seed 2019134
(FPCore (x.re x.im y.re y.im)
:name "powComplex, real part"
(* (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)))))