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 -502608337644955597407793446912:\\
\;\;\;\;e^{\left(-y.re \cdot \log \left(\frac{-1}{x.re}\right)\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\mathbf{elif}\;x.re \le -7.648828033871659839819848012863284741258 \cdot 10^{-153}:\\
\;\;\;\;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}\\
\mathbf{elif}\;x.re \le -4.396524045590289645323160750057275973793 \cdot 10^{-206}:\\
\;\;\;\;e^{\left(-y.re \cdot \log \left(\frac{-1}{x.re}\right)\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\mathbf{elif}\;x.re \le 1.532410043993753832903085741348381390706 \cdot 10^{-42}:\\
\;\;\;\;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}\\
\mathbf{else}:\\
\;\;\;\;e^{\log x.re \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r21700 = x_re;
double r21701 = r21700 * r21700;
double r21702 = x_im;
double r21703 = r21702 * r21702;
double r21704 = r21701 + r21703;
double r21705 = sqrt(r21704);
double r21706 = log(r21705);
double r21707 = y_re;
double r21708 = r21706 * r21707;
double r21709 = atan2(r21702, r21700);
double r21710 = y_im;
double r21711 = r21709 * r21710;
double r21712 = r21708 - r21711;
double r21713 = exp(r21712);
double r21714 = r21706 * r21710;
double r21715 = r21709 * r21707;
double r21716 = r21714 + r21715;
double r21717 = cos(r21716);
double r21718 = r21713 * r21717;
return r21718;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r21719 = x_re;
double r21720 = -5.026083376449556e+29;
bool r21721 = r21719 <= r21720;
double r21722 = y_re;
double r21723 = -1.0;
double r21724 = r21723 / r21719;
double r21725 = log(r21724);
double r21726 = r21722 * r21725;
double r21727 = -r21726;
double r21728 = x_im;
double r21729 = atan2(r21728, r21719);
double r21730 = y_im;
double r21731 = r21729 * r21730;
double r21732 = r21727 - r21731;
double r21733 = exp(r21732);
double r21734 = -7.64882803387166e-153;
bool r21735 = r21719 <= r21734;
double r21736 = r21719 * r21719;
double r21737 = r21728 * r21728;
double r21738 = r21736 + r21737;
double r21739 = sqrt(r21738);
double r21740 = log(r21739);
double r21741 = r21740 * r21722;
double r21742 = r21741 - r21731;
double r21743 = exp(r21742);
double r21744 = -4.3965240455902896e-206;
bool r21745 = r21719 <= r21744;
double r21746 = 1.5324100439937538e-42;
bool r21747 = r21719 <= r21746;
double r21748 = log(r21719);
double r21749 = r21748 * r21722;
double r21750 = r21749 - r21731;
double r21751 = exp(r21750);
double r21752 = r21747 ? r21743 : r21751;
double r21753 = r21745 ? r21733 : r21752;
double r21754 = r21735 ? r21743 : r21753;
double r21755 = r21721 ? r21733 : r21754;
return r21755;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -5.026083376449556e+29 or -7.64882803387166e-153 < x.re < -4.3965240455902896e-206Initial program 39.2
Taylor expanded around 0 22.2
Taylor expanded around -inf 2.2
Simplified2.2
if -5.026083376449556e+29 < x.re < -7.64882803387166e-153 or -4.3965240455902896e-206 < x.re < 1.5324100439937538e-42Initial program 23.3
Taylor expanded around 0 13.2
if 1.5324100439937538e-42 < x.re Initial program 41.3
Taylor expanded around 0 27.0
Taylor expanded around inf 11.6
Final simplification9.8
herbie shell --seed 2019347
(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)))))