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 -2.7504158870147457945291325045471206406 \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 r24583 = x_re;
double r24584 = r24583 * r24583;
double r24585 = x_im;
double r24586 = r24585 * r24585;
double r24587 = r24584 + r24586;
double r24588 = sqrt(r24587);
double r24589 = log(r24588);
double r24590 = y_re;
double r24591 = r24589 * r24590;
double r24592 = atan2(r24585, r24583);
double r24593 = y_im;
double r24594 = r24592 * r24593;
double r24595 = r24591 - r24594;
double r24596 = exp(r24595);
double r24597 = r24589 * r24593;
double r24598 = r24592 * r24590;
double r24599 = r24597 + r24598;
double r24600 = cos(r24599);
double r24601 = r24596 * r24600;
return r24601;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r24602 = x_re;
double r24603 = -2.75041588701475e-310;
bool r24604 = r24602 <= r24603;
double r24605 = -r24602;
double r24606 = log(r24605);
double r24607 = y_re;
double r24608 = r24606 * r24607;
double r24609 = y_im;
double r24610 = x_im;
double r24611 = atan2(r24610, r24602);
double r24612 = r24609 * r24611;
double r24613 = r24608 - r24612;
double r24614 = exp(r24613);
double r24615 = log(r24602);
double r24616 = r24615 * r24607;
double r24617 = r24616 - r24612;
double r24618 = exp(r24617);
double r24619 = r24604 ? r24614 : r24618;
return r24619;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -2.75041588701475e-310Initial program 31.1
Taylor expanded around 0 17.6
Taylor expanded around -inf 5.7
Simplified5.7
if -2.75041588701475e-310 < x.re Initial program 34.8
Taylor expanded around 0 21.9
Taylor expanded around inf 11.4
Final simplification8.7
herbie shell --seed 2019194
(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)))))