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.470808801194099650459504770233876447151 \cdot 10^{-216}:\\
\;\;\;\;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 3.138612018345918312843792177943056616354 \cdot 10^{-310}:\\
\;\;\;\;\sin \left(\log \left(-x.re\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\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{else}:\\
\;\;\;\;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 + \log x.re \cdot y.im\right)\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r1323728 = x_re;
double r1323729 = r1323728 * r1323728;
double r1323730 = x_im;
double r1323731 = r1323730 * r1323730;
double r1323732 = r1323729 + r1323731;
double r1323733 = sqrt(r1323732);
double r1323734 = log(r1323733);
double r1323735 = y_re;
double r1323736 = r1323734 * r1323735;
double r1323737 = atan2(r1323730, r1323728);
double r1323738 = y_im;
double r1323739 = r1323737 * r1323738;
double r1323740 = r1323736 - r1323739;
double r1323741 = exp(r1323740);
double r1323742 = r1323734 * r1323738;
double r1323743 = r1323737 * r1323735;
double r1323744 = r1323742 + r1323743;
double r1323745 = sin(r1323744);
double r1323746 = r1323741 * r1323745;
return r1323746;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1323747 = x_re;
double r1323748 = -5.4708088011940997e-216;
bool r1323749 = r1323747 <= r1323748;
double r1323750 = -r1323747;
double r1323751 = log(r1323750);
double r1323752 = y_re;
double r1323753 = r1323751 * r1323752;
double r1323754 = y_im;
double r1323755 = x_im;
double r1323756 = atan2(r1323755, r1323747);
double r1323757 = r1323754 * r1323756;
double r1323758 = r1323753 - r1323757;
double r1323759 = exp(r1323758);
double r1323760 = r1323751 * r1323754;
double r1323761 = r1323756 * r1323752;
double r1323762 = r1323760 + r1323761;
double r1323763 = sin(r1323762);
double r1323764 = r1323759 * r1323763;
double r1323765 = 3.1386120183459e-310;
bool r1323766 = r1323747 <= r1323765;
double r1323767 = r1323747 * r1323747;
double r1323768 = r1323755 * r1323755;
double r1323769 = r1323767 + r1323768;
double r1323770 = sqrt(r1323769);
double r1323771 = log(r1323770);
double r1323772 = r1323771 * r1323752;
double r1323773 = r1323772 - r1323757;
double r1323774 = exp(r1323773);
double r1323775 = r1323763 * r1323774;
double r1323776 = log(r1323747);
double r1323777 = r1323776 * r1323754;
double r1323778 = r1323761 + r1323777;
double r1323779 = sin(r1323778);
double r1323780 = r1323774 * r1323779;
double r1323781 = r1323766 ? r1323775 : r1323780;
double r1323782 = r1323749 ? r1323764 : r1323781;
return r1323782;
}



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.4708088011940997e-216Initial program 32.1
Taylor expanded around -inf 20.8
Simplified20.8
Taylor expanded around -inf 9.2
Simplified9.2
if -5.4708088011940997e-216 < x.re < 3.1386120183459e-310Initial program 33.4
Taylor expanded around -inf 25.1
Simplified25.1
if 3.1386120183459e-310 < x.re Initial program 35.3
Taylor expanded around inf 24.9
Simplified24.9
Final simplification18.4
herbie shell --seed 2019171
(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)))))