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.189251590720128421046416075251281086703 \cdot 10^{-310}:\\
\;\;\;\;\sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + \log \left(-x.re\right) \cdot y.im\right) \cdot e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - \sqrt[3]{y.im} \cdot \left(\left(\sqrt[3]{y.im} \cdot \sqrt[3]{y.im}\right) \cdot \tan^{-1}_* \frac{x.im}{x.re}\right)}\\
\mathbf{else}:\\
\;\;\;\;\sin \left(\log x.re \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right) \cdot e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - \sqrt[3]{y.im} \cdot \left(\left(\sqrt[3]{y.im} \cdot \sqrt[3]{y.im}\right) \cdot \tan^{-1}_* \frac{x.im}{x.re}\right)}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r29671 = x_re;
double r29672 = r29671 * r29671;
double r29673 = x_im;
double r29674 = r29673 * r29673;
double r29675 = r29672 + r29674;
double r29676 = sqrt(r29675);
double r29677 = log(r29676);
double r29678 = y_re;
double r29679 = r29677 * r29678;
double r29680 = atan2(r29673, r29671);
double r29681 = y_im;
double r29682 = r29680 * r29681;
double r29683 = r29679 - r29682;
double r29684 = exp(r29683);
double r29685 = r29677 * r29681;
double r29686 = r29680 * r29678;
double r29687 = r29685 + r29686;
double r29688 = sin(r29687);
double r29689 = r29684 * r29688;
return r29689;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r29690 = x_re;
double r29691 = -5.18925159072013e-310;
bool r29692 = r29690 <= r29691;
double r29693 = x_im;
double r29694 = atan2(r29693, r29690);
double r29695 = y_re;
double r29696 = r29694 * r29695;
double r29697 = -r29690;
double r29698 = log(r29697);
double r29699 = y_im;
double r29700 = r29698 * r29699;
double r29701 = r29696 + r29700;
double r29702 = sin(r29701);
double r29703 = r29690 * r29690;
double r29704 = r29693 * r29693;
double r29705 = r29703 + r29704;
double r29706 = sqrt(r29705);
double r29707 = log(r29706);
double r29708 = r29695 * r29707;
double r29709 = cbrt(r29699);
double r29710 = r29709 * r29709;
double r29711 = r29710 * r29694;
double r29712 = r29709 * r29711;
double r29713 = r29708 - r29712;
double r29714 = exp(r29713);
double r29715 = r29702 * r29714;
double r29716 = log(r29690);
double r29717 = r29716 * r29699;
double r29718 = r29717 + r29696;
double r29719 = sin(r29718);
double r29720 = r29719 * r29714;
double r29721 = r29692 ? r29715 : r29720;
return r29721;
}



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.18925159072013e-310Initial program 31.7
rmApplied add-cube-cbrt31.7
Applied associate-*r*31.7
Taylor expanded around -inf 20.8
Simplified20.8
if -5.18925159072013e-310 < x.re Initial program 34.3
rmApplied add-cube-cbrt34.3
Applied associate-*r*34.3
Taylor expanded around inf 23.4
Simplified23.4
Final simplification22.1
herbie shell --seed 2019174
(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)))))