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^{y.re \cdot \log x.re + \left(-y.im\right) \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 r24608 = x_re;
double r24609 = r24608 * r24608;
double r24610 = x_im;
double r24611 = r24610 * r24610;
double r24612 = r24609 + r24611;
double r24613 = sqrt(r24612);
double r24614 = log(r24613);
double r24615 = y_re;
double r24616 = r24614 * r24615;
double r24617 = atan2(r24610, r24608);
double r24618 = y_im;
double r24619 = r24617 * r24618;
double r24620 = r24616 - r24619;
double r24621 = exp(r24620);
double r24622 = r24614 * r24618;
double r24623 = r24617 * r24615;
double r24624 = r24622 + r24623;
double r24625 = cos(r24624);
double r24626 = r24621 * r24625;
return r24626;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r24627 = x_re;
double r24628 = -2.75041588701475e-310;
bool r24629 = r24627 <= r24628;
double r24630 = -r24627;
double r24631 = log(r24630);
double r24632 = y_re;
double r24633 = r24631 * r24632;
double r24634 = y_im;
double r24635 = x_im;
double r24636 = atan2(r24635, r24627);
double r24637 = r24634 * r24636;
double r24638 = r24633 - r24637;
double r24639 = exp(r24638);
double r24640 = log(r24627);
double r24641 = r24632 * r24640;
double r24642 = -r24634;
double r24643 = r24642 * r24636;
double r24644 = r24641 + r24643;
double r24645 = exp(r24644);
double r24646 = r24629 ? r24639 : r24645;
return r24646;
}



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
Simplified11.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)))))