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.624530905408147455336387444424032948614 \cdot 10^{-309}:\\
\;\;\;\;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(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re - y.im \cdot \log \left(\frac{-1}{x.re}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;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(\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 r25756 = x_re;
double r25757 = r25756 * r25756;
double r25758 = x_im;
double r25759 = r25758 * r25758;
double r25760 = r25757 + r25759;
double r25761 = sqrt(r25760);
double r25762 = log(r25761);
double r25763 = y_re;
double r25764 = r25762 * r25763;
double r25765 = atan2(r25758, r25756);
double r25766 = y_im;
double r25767 = r25765 * r25766;
double r25768 = r25764 - r25767;
double r25769 = exp(r25768);
double r25770 = r25762 * r25766;
double r25771 = r25765 * r25763;
double r25772 = r25770 + r25771;
double r25773 = sin(r25772);
double r25774 = r25769 * r25773;
return r25774;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r25775 = x_re;
double r25776 = -5.624530905408147e-309;
bool r25777 = r25775 <= r25776;
double r25778 = r25775 * r25775;
double r25779 = x_im;
double r25780 = r25779 * r25779;
double r25781 = r25778 + r25780;
double r25782 = sqrt(r25781);
double r25783 = log(r25782);
double r25784 = y_re;
double r25785 = r25783 * r25784;
double r25786 = atan2(r25779, r25775);
double r25787 = y_im;
double r25788 = r25786 * r25787;
double r25789 = r25785 - r25788;
double r25790 = exp(r25789);
double r25791 = r25786 * r25784;
double r25792 = -1.0;
double r25793 = r25792 / r25775;
double r25794 = log(r25793);
double r25795 = r25787 * r25794;
double r25796 = r25791 - r25795;
double r25797 = sin(r25796);
double r25798 = r25790 * r25797;
double r25799 = log(r25775);
double r25800 = r25799 * r25787;
double r25801 = r25791 + r25800;
double r25802 = sin(r25801);
double r25803 = r25790 * r25802;
double r25804 = r25777 ? r25798 : r25803;
return r25804;
}



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.624530905408147e-309Initial program 31.9
Taylor expanded around -inf 20.3
if -5.624530905408147e-309 < x.re Initial program 35.0
Taylor expanded around inf 24.5
Simplified24.5
Final simplification22.4
herbie shell --seed 2019325
(FPCore (x.re x.im y.re y.im)
:name "powComplex, imaginary part"
:precision binary64
(* (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)))))