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 3.138612018345918312843792177943056616354 \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 r1424575 = x_re;
double r1424576 = r1424575 * r1424575;
double r1424577 = x_im;
double r1424578 = r1424577 * r1424577;
double r1424579 = r1424576 + r1424578;
double r1424580 = sqrt(r1424579);
double r1424581 = log(r1424580);
double r1424582 = y_re;
double r1424583 = r1424581 * r1424582;
double r1424584 = atan2(r1424577, r1424575);
double r1424585 = y_im;
double r1424586 = r1424584 * r1424585;
double r1424587 = r1424583 - r1424586;
double r1424588 = exp(r1424587);
double r1424589 = r1424581 * r1424585;
double r1424590 = r1424584 * r1424582;
double r1424591 = r1424589 + r1424590;
double r1424592 = cos(r1424591);
double r1424593 = r1424588 * r1424592;
return r1424593;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1424594 = x_re;
double r1424595 = 3.1386120183459e-310;
bool r1424596 = r1424594 <= r1424595;
double r1424597 = -r1424594;
double r1424598 = log(r1424597);
double r1424599 = y_re;
double r1424600 = r1424598 * r1424599;
double r1424601 = y_im;
double r1424602 = x_im;
double r1424603 = atan2(r1424602, r1424594);
double r1424604 = r1424601 * r1424603;
double r1424605 = r1424600 - r1424604;
double r1424606 = exp(r1424605);
double r1424607 = log(r1424594);
double r1424608 = r1424607 * r1424599;
double r1424609 = r1424608 - r1424604;
double r1424610 = exp(r1424609);
double r1424611 = r1424596 ? r1424606 : r1424610;
return r1424611;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < 3.1386120183459e-310Initial program 32.2
Taylor expanded around 0 18.6
Taylor expanded around -inf 5.6
Simplified5.6
if 3.1386120183459e-310 < x.re Initial program 35.1
Taylor expanded around 0 22.3
Taylor expanded around inf 12.3
Final simplification9.1
herbie shell --seed 2019171
(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)))))