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 1.73062623171225 \cdot 10^{-310}:\\
\;\;\;\;e^{-1 \cdot \left(y.re \cdot \log \left(\frac{-1}{x.re}\right)\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\
\mathbf{else}:\\
\;\;\;\;e^{\log x.re \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r13716 = x_re;
double r13717 = r13716 * r13716;
double r13718 = x_im;
double r13719 = r13718 * r13718;
double r13720 = r13717 + r13719;
double r13721 = sqrt(r13720);
double r13722 = log(r13721);
double r13723 = y_re;
double r13724 = r13722 * r13723;
double r13725 = atan2(r13718, r13716);
double r13726 = y_im;
double r13727 = r13725 * r13726;
double r13728 = r13724 - r13727;
double r13729 = exp(r13728);
double r13730 = r13722 * r13726;
double r13731 = r13725 * r13723;
double r13732 = r13730 + r13731;
double r13733 = cos(r13732);
double r13734 = r13729 * r13733;
return r13734;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r13735 = x_re;
double r13736 = 1.73062623171225e-310;
bool r13737 = r13735 <= r13736;
double r13738 = -1.0;
double r13739 = y_re;
double r13740 = r13738 / r13735;
double r13741 = log(r13740);
double r13742 = r13739 * r13741;
double r13743 = r13738 * r13742;
double r13744 = x_im;
double r13745 = atan2(r13744, r13735);
double r13746 = y_im;
double r13747 = r13745 * r13746;
double r13748 = r13743 - r13747;
double r13749 = exp(r13748);
double r13750 = 1.0;
double r13751 = r13749 * r13750;
double r13752 = log(r13735);
double r13753 = r13752 * r13739;
double r13754 = r13753 - r13747;
double r13755 = exp(r13754);
double r13756 = r13755 * r13750;
double r13757 = r13737 ? r13751 : r13756;
return r13757;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < 1.73062623171225e-310Initial program 31.5
Taylor expanded around 0 17.4
Taylor expanded around -inf 6.0
if 1.73062623171225e-310 < x.re Initial program 34.9
Taylor expanded around 0 21.7
Taylor expanded around inf 12.2
Final simplification9.2
herbie shell --seed 2020100
(FPCore (x.re x.im y.re y.im)
:name "powComplex, real part"
:precision binary64
(* (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)))))