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 -0.0005972609292494837:\\
\;\;\;\;e^{\log \left(-x.re\right) \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}} \cdot \sin \left(\log \left(-x.re\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\\
\mathbf{elif}\;x.re \le -1.0077378305820739 \cdot 10^{-219}:\\
\;\;\;\;\left(\left(\sqrt[3]{\sin \left(\log \left(-x.re\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)} \cdot \sqrt[3]{\sin \left(\log \left(-x.re\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)}\right) \cdot \sqrt[3]{\sin \left(\log \left(-x.re\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)}\right) \cdot e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\mathbf{elif}\;x.re \le -8.271572694745833 \cdot 10^{-252}:\\
\;\;\;\;e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}} \cdot \sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + y.im \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\sqrt[3]{\sin \left(\log \left(-x.re\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)} \cdot \sqrt[3]{\sin \left(\log \left(-x.re\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)}\right) \cdot \sqrt[3]{\sin \left(\log \left(-x.re\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)}\right) \cdot e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \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 r1076734 = x_re;
double r1076735 = r1076734 * r1076734;
double r1076736 = x_im;
double r1076737 = r1076736 * r1076736;
double r1076738 = r1076735 + r1076737;
double r1076739 = sqrt(r1076738);
double r1076740 = log(r1076739);
double r1076741 = y_re;
double r1076742 = r1076740 * r1076741;
double r1076743 = atan2(r1076736, r1076734);
double r1076744 = y_im;
double r1076745 = r1076743 * r1076744;
double r1076746 = r1076742 - r1076745;
double r1076747 = exp(r1076746);
double r1076748 = r1076740 * r1076744;
double r1076749 = r1076743 * r1076741;
double r1076750 = r1076748 + r1076749;
double r1076751 = sin(r1076750);
double r1076752 = r1076747 * r1076751;
return r1076752;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1076753 = x_re;
double r1076754 = -0.0005972609292494837;
bool r1076755 = r1076753 <= r1076754;
double r1076756 = -r1076753;
double r1076757 = log(r1076756);
double r1076758 = y_re;
double r1076759 = r1076757 * r1076758;
double r1076760 = y_im;
double r1076761 = x_im;
double r1076762 = atan2(r1076761, r1076753);
double r1076763 = r1076760 * r1076762;
double r1076764 = r1076759 - r1076763;
double r1076765 = exp(r1076764);
double r1076766 = r1076757 * r1076760;
double r1076767 = r1076762 * r1076758;
double r1076768 = r1076766 + r1076767;
double r1076769 = sin(r1076768);
double r1076770 = r1076765 * r1076769;
double r1076771 = -1.0077378305820739e-219;
bool r1076772 = r1076753 <= r1076771;
double r1076773 = cbrt(r1076769);
double r1076774 = r1076773 * r1076773;
double r1076775 = r1076774 * r1076773;
double r1076776 = r1076753 * r1076753;
double r1076777 = r1076761 * r1076761;
double r1076778 = r1076776 + r1076777;
double r1076779 = sqrt(r1076778);
double r1076780 = log(r1076779);
double r1076781 = r1076780 * r1076758;
double r1076782 = r1076781 - r1076763;
double r1076783 = exp(r1076782);
double r1076784 = r1076775 * r1076783;
double r1076785 = -8.271572694745833e-252;
bool r1076786 = r1076753 <= r1076785;
double r1076787 = r1076760 * r1076780;
double r1076788 = r1076767 + r1076787;
double r1076789 = sin(r1076788);
double r1076790 = r1076783 * r1076789;
double r1076791 = r1076786 ? r1076790 : r1076784;
double r1076792 = r1076772 ? r1076784 : r1076791;
double r1076793 = r1076755 ? r1076770 : r1076792;
return r1076793;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -0.0005972609292494837Initial program 39.9
Taylor expanded around -inf 14.8
Simplified14.8
Taylor expanded around -inf 4.8
Simplified4.8
if -0.0005972609292494837 < x.re < -1.0077378305820739e-219 or -8.271572694745833e-252 < x.re Initial program 21.7
Taylor expanded around -inf 16.5
Simplified16.5
rmApplied add-cube-cbrt16.6
if -1.0077378305820739e-219 < x.re < -8.271572694745833e-252Initial program 27.3
Final simplification11.1
herbie shell --seed 2019130
(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)))))