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 4.11803379523495 \cdot 10^{-310}:\\
\;\;\;\;e^{\log \left(-x.re\right) \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\mathbf{else}:\\
\;\;\;\;e^{\log x.re \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r1448582 = x_re;
double r1448583 = r1448582 * r1448582;
double r1448584 = x_im;
double r1448585 = r1448584 * r1448584;
double r1448586 = r1448583 + r1448585;
double r1448587 = sqrt(r1448586);
double r1448588 = log(r1448587);
double r1448589 = y_re;
double r1448590 = r1448588 * r1448589;
double r1448591 = atan2(r1448584, r1448582);
double r1448592 = y_im;
double r1448593 = r1448591 * r1448592;
double r1448594 = r1448590 - r1448593;
double r1448595 = exp(r1448594);
double r1448596 = r1448588 * r1448592;
double r1448597 = r1448591 * r1448589;
double r1448598 = r1448596 + r1448597;
double r1448599 = cos(r1448598);
double r1448600 = r1448595 * r1448599;
return r1448600;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1448601 = x_re;
double r1448602 = 4.11803379523495e-310;
bool r1448603 = r1448601 <= r1448602;
double r1448604 = -r1448601;
double r1448605 = log(r1448604);
double r1448606 = y_re;
double r1448607 = r1448605 * r1448606;
double r1448608 = y_im;
double r1448609 = x_im;
double r1448610 = atan2(r1448609, r1448601);
double r1448611 = r1448608 * r1448610;
double r1448612 = r1448607 - r1448611;
double r1448613 = exp(r1448612);
double r1448614 = log(r1448601);
double r1448615 = r1448614 * r1448606;
double r1448616 = r1448615 - r1448611;
double r1448617 = exp(r1448616);
double r1448618 = r1448603 ? r1448613 : r1448617;
return r1448618;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < 4.11803379523495e-310Initial program 30.2
Taylor expanded around 0 16.7
Taylor expanded around -inf 6.3
Simplified6.3
if 4.11803379523495e-310 < x.re Initial program 34.2
Taylor expanded around 0 22.1
Taylor expanded around inf 12.1
Simplified12.1
Final simplification9.3
herbie shell --seed 2019162
(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)))))