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 \sin \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 -5.907306680385344179981604616356048283101 \cdot 10^{-241}:\\
\;\;\;\;e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + y.im \cdot \log \left(-x.re\right)\right)\\
\mathbf{elif}\;x.re \le 1.808989908199788750558131282319198960687 \cdot 10^{-128}:\\
\;\;\;\;e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - \sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \left(\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\right)} \cdot \sin \left(y.im \cdot \log \left(\sqrt[3]{\sqrt{x.re \cdot x.re + x.im \cdot x.im}} \cdot \left(\sqrt[3]{\sqrt{x.re \cdot x.re + x.im \cdot x.im}} \cdot \sqrt[3]{\sqrt{x.re \cdot x.re + x.im \cdot x.im}}\right)\right) + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\\
\mathbf{else}:\\
\;\;\;\;e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + \log x.re \cdot y.im\right)\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r1490715 = x_re;
double r1490716 = r1490715 * r1490715;
double r1490717 = x_im;
double r1490718 = r1490717 * r1490717;
double r1490719 = r1490716 + r1490718;
double r1490720 = sqrt(r1490719);
double r1490721 = log(r1490720);
double r1490722 = y_re;
double r1490723 = r1490721 * r1490722;
double r1490724 = atan2(r1490717, r1490715);
double r1490725 = y_im;
double r1490726 = r1490724 * r1490725;
double r1490727 = r1490723 - r1490726;
double r1490728 = exp(r1490727);
double r1490729 = r1490721 * r1490725;
double r1490730 = r1490724 * r1490722;
double r1490731 = r1490729 + r1490730;
double r1490732 = sin(r1490731);
double r1490733 = r1490728 * r1490732;
return r1490733;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1490734 = x_re;
double r1490735 = -5.907306680385344e-241;
bool r1490736 = r1490734 <= r1490735;
double r1490737 = y_re;
double r1490738 = r1490734 * r1490734;
double r1490739 = x_im;
double r1490740 = r1490739 * r1490739;
double r1490741 = r1490738 + r1490740;
double r1490742 = sqrt(r1490741);
double r1490743 = log(r1490742);
double r1490744 = r1490737 * r1490743;
double r1490745 = atan2(r1490739, r1490734);
double r1490746 = y_im;
double r1490747 = r1490745 * r1490746;
double r1490748 = r1490744 - r1490747;
double r1490749 = exp(r1490748);
double r1490750 = r1490745 * r1490737;
double r1490751 = -r1490734;
double r1490752 = log(r1490751);
double r1490753 = r1490746 * r1490752;
double r1490754 = r1490750 + r1490753;
double r1490755 = sin(r1490754);
double r1490756 = r1490749 * r1490755;
double r1490757 = 1.8089899081997888e-128;
bool r1490758 = r1490734 <= r1490757;
double r1490759 = cbrt(r1490747);
double r1490760 = r1490759 * r1490759;
double r1490761 = r1490759 * r1490760;
double r1490762 = r1490744 - r1490761;
double r1490763 = exp(r1490762);
double r1490764 = cbrt(r1490742);
double r1490765 = r1490764 * r1490764;
double r1490766 = r1490764 * r1490765;
double r1490767 = log(r1490766);
double r1490768 = r1490746 * r1490767;
double r1490769 = r1490768 + r1490750;
double r1490770 = sin(r1490769);
double r1490771 = r1490763 * r1490770;
double r1490772 = log(r1490734);
double r1490773 = r1490772 * r1490746;
double r1490774 = r1490750 + r1490773;
double r1490775 = sin(r1490774);
double r1490776 = r1490749 * r1490775;
double r1490777 = r1490758 ? r1490771 : r1490776;
double r1490778 = r1490736 ? r1490756 : r1490777;
return r1490778;
}



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.907306680385344e-241Initial program 31.4
Taylor expanded around -inf 20.2
Simplified20.2
if -5.907306680385344e-241 < x.re < 1.8089899081997888e-128Initial program 30.5
rmApplied add-cube-cbrt30.5
rmApplied add-cube-cbrt30.5
if 1.8089899081997888e-128 < x.re Initial program 36.7
Taylor expanded around inf 25.5
Simplified25.5
Final simplification24.2
herbie shell --seed 2019179
(FPCore (x.re x.im y.re y.im)
:name "powComplex, imaginary part"
(* (exp (- (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.re) (* (atan2 x.im x.re) y.im))) (sin (+ (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.im) (* (atan2 x.im x.re) y.re)))))