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.026572163162166 \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 r19727 = x_re;
double r19728 = r19727 * r19727;
double r19729 = x_im;
double r19730 = r19729 * r19729;
double r19731 = r19728 + r19730;
double r19732 = sqrt(r19731);
double r19733 = log(r19732);
double r19734 = y_re;
double r19735 = r19733 * r19734;
double r19736 = atan2(r19729, r19727);
double r19737 = y_im;
double r19738 = r19736 * r19737;
double r19739 = r19735 - r19738;
double r19740 = exp(r19739);
double r19741 = r19733 * r19737;
double r19742 = r19736 * r19734;
double r19743 = r19741 + r19742;
double r19744 = sin(r19743);
double r19745 = r19740 * r19744;
return r19745;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r19746 = x_re;
double r19747 = -5.026572163162166e-309;
bool r19748 = r19746 <= r19747;
double r19749 = r19746 * r19746;
double r19750 = x_im;
double r19751 = r19750 * r19750;
double r19752 = r19749 + r19751;
double r19753 = sqrt(r19752);
double r19754 = log(r19753);
double r19755 = y_re;
double r19756 = r19754 * r19755;
double r19757 = atan2(r19750, r19746);
double r19758 = y_im;
double r19759 = r19757 * r19758;
double r19760 = r19756 - r19759;
double r19761 = exp(r19760);
double r19762 = r19757 * r19755;
double r19763 = -1.0;
double r19764 = r19763 / r19746;
double r19765 = log(r19764);
double r19766 = r19758 * r19765;
double r19767 = r19762 - r19766;
double r19768 = sin(r19767);
double r19769 = r19761 * r19768;
double r19770 = log(r19746);
double r19771 = r19770 * r19758;
double r19772 = r19762 + r19771;
double r19773 = sin(r19772);
double r19774 = r19761 * r19773;
double r19775 = r19748 ? r19769 : r19774;
return r19775;
}



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.026572163162166e-309Initial program 31.4
Taylor expanded around -inf 20.2
if -5.026572163162166e-309 < x.re Initial program 34.9
Taylor expanded around inf 24.7
Simplified24.7
Final simplification22.6
herbie shell --seed 2020045
(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)))))