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 1.04726288994103 \cdot 10^{-310}:\\
\;\;\;\;e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - \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(-x.re\right)\right)\\
\mathbf{else}:\\
\;\;\;\;e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - \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 x.re\right)\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r1152774 = x_re;
double r1152775 = r1152774 * r1152774;
double r1152776 = x_im;
double r1152777 = r1152776 * r1152776;
double r1152778 = r1152775 + r1152777;
double r1152779 = sqrt(r1152778);
double r1152780 = log(r1152779);
double r1152781 = y_re;
double r1152782 = r1152780 * r1152781;
double r1152783 = atan2(r1152776, r1152774);
double r1152784 = y_im;
double r1152785 = r1152783 * r1152784;
double r1152786 = r1152782 - r1152785;
double r1152787 = exp(r1152786);
double r1152788 = r1152780 * r1152784;
double r1152789 = r1152783 * r1152781;
double r1152790 = r1152788 + r1152789;
double r1152791 = sin(r1152790);
double r1152792 = r1152787 * r1152791;
return r1152792;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1152793 = x_re;
double r1152794 = 1.04726288994103e-310;
bool r1152795 = r1152793 <= r1152794;
double r1152796 = y_re;
double r1152797 = r1152793 * r1152793;
double r1152798 = x_im;
double r1152799 = r1152798 * r1152798;
double r1152800 = r1152797 + r1152799;
double r1152801 = sqrt(r1152800);
double r1152802 = log(r1152801);
double r1152803 = r1152796 * r1152802;
double r1152804 = atan2(r1152798, r1152793);
double r1152805 = y_im;
double r1152806 = r1152804 * r1152805;
double r1152807 = r1152803 - r1152806;
double r1152808 = exp(r1152807);
double r1152809 = r1152804 * r1152796;
double r1152810 = -r1152793;
double r1152811 = log(r1152810);
double r1152812 = r1152805 * r1152811;
double r1152813 = r1152809 + r1152812;
double r1152814 = sin(r1152813);
double r1152815 = r1152808 * r1152814;
double r1152816 = log(r1152793);
double r1152817 = r1152805 * r1152816;
double r1152818 = r1152809 + r1152817;
double r1152819 = sin(r1152818);
double r1152820 = r1152808 * r1152819;
double r1152821 = r1152795 ? r1152815 : r1152820;
return r1152821;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < 1.04726288994103e-310Initial program 30.9
Taylor expanded around -inf 20.2
Simplified20.2
if 1.04726288994103e-310 < x.re Initial program 34.4
rmApplied add-cube-cbrt34.5
Applied associate-*r*34.5
Taylor expanded around inf 24.3
Simplified24.3
Final simplification22.3
herbie shell --seed 2019143
(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)))))