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.009377008199938906346016128259715825559 \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 r1365722 = x_re;
double r1365723 = r1365722 * r1365722;
double r1365724 = x_im;
double r1365725 = r1365724 * r1365724;
double r1365726 = r1365723 + r1365725;
double r1365727 = sqrt(r1365726);
double r1365728 = log(r1365727);
double r1365729 = y_re;
double r1365730 = r1365728 * r1365729;
double r1365731 = atan2(r1365724, r1365722);
double r1365732 = y_im;
double r1365733 = r1365731 * r1365732;
double r1365734 = r1365730 - r1365733;
double r1365735 = exp(r1365734);
double r1365736 = r1365728 * r1365732;
double r1365737 = r1365731 * r1365729;
double r1365738 = r1365736 + r1365737;
double r1365739 = cos(r1365738);
double r1365740 = r1365735 * r1365739;
return r1365740;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1365741 = x_re;
double r1365742 = 2.00937700819994e-310;
bool r1365743 = r1365741 <= r1365742;
double r1365744 = -r1365741;
double r1365745 = log(r1365744);
double r1365746 = y_re;
double r1365747 = r1365745 * r1365746;
double r1365748 = y_im;
double r1365749 = x_im;
double r1365750 = atan2(r1365749, r1365741);
double r1365751 = r1365748 * r1365750;
double r1365752 = r1365747 - r1365751;
double r1365753 = exp(r1365752);
double r1365754 = log(r1365741);
double r1365755 = r1365754 * r1365746;
double r1365756 = r1365755 - r1365751;
double r1365757 = exp(r1365756);
double r1365758 = r1365743 ? r1365753 : r1365757;
return r1365758;
}



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.00937700819994e-310Initial program 31.4
Taylor expanded around 0 17.7
Taylor expanded around -inf 6.1
Simplified6.1
if 2.00937700819994e-310 < x.re Initial program 34.8
Taylor expanded around 0 22.0
Taylor expanded around inf 11.8
Final simplification9.0
herbie shell --seed 2019179
(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)))))