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.91205330543206 \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}:\\
\;\;\;\;\sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + y.im \cdot \log x.re\right) \cdot 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}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r1181759 = x_re;
double r1181760 = r1181759 * r1181759;
double r1181761 = x_im;
double r1181762 = r1181761 * r1181761;
double r1181763 = r1181760 + r1181762;
double r1181764 = sqrt(r1181763);
double r1181765 = log(r1181764);
double r1181766 = y_re;
double r1181767 = r1181765 * r1181766;
double r1181768 = atan2(r1181761, r1181759);
double r1181769 = y_im;
double r1181770 = r1181768 * r1181769;
double r1181771 = r1181767 - r1181770;
double r1181772 = exp(r1181771);
double r1181773 = r1181765 * r1181769;
double r1181774 = r1181768 * r1181766;
double r1181775 = r1181773 + r1181774;
double r1181776 = sin(r1181775);
double r1181777 = r1181772 * r1181776;
return r1181777;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1181778 = x_re;
double r1181779 = -1.91205330543206e-310;
bool r1181780 = r1181778 <= r1181779;
double r1181781 = y_re;
double r1181782 = r1181778 * r1181778;
double r1181783 = x_im;
double r1181784 = r1181783 * r1181783;
double r1181785 = r1181782 + r1181784;
double r1181786 = sqrt(r1181785);
double r1181787 = log(r1181786);
double r1181788 = r1181781 * r1181787;
double r1181789 = atan2(r1181783, r1181778);
double r1181790 = y_im;
double r1181791 = r1181789 * r1181790;
double r1181792 = r1181788 - r1181791;
double r1181793 = exp(r1181792);
double r1181794 = r1181789 * r1181781;
double r1181795 = -r1181778;
double r1181796 = log(r1181795);
double r1181797 = r1181790 * r1181796;
double r1181798 = r1181794 + r1181797;
double r1181799 = sin(r1181798);
double r1181800 = r1181793 * r1181799;
double r1181801 = log(r1181778);
double r1181802 = r1181790 * r1181801;
double r1181803 = r1181794 + r1181802;
double r1181804 = sin(r1181803);
double r1181805 = r1181804 * r1181793;
double r1181806 = r1181780 ? r1181800 : r1181805;
return r1181806;
}



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.91205330543206e-310Initial program 31.2
Taylor expanded around -inf 20.1
Simplified20.1
if -1.91205330543206e-310 < x.re Initial program 34.7
Taylor expanded around inf 24.5
Simplified24.5
Final simplification22.3
herbie shell --seed 2019165
(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)))))