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 -2.084005931921038687306891194857517727513 \cdot 10^{-310}:\\
\;\;\;\;e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \left(\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}} \cdot \sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}}\right) \cdot \left(\left(\left(\sqrt[3]{\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}}} \cdot \sqrt[3]{\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}}}\right) \cdot \sqrt[3]{\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}}}\right) \cdot y.im\right)} \cdot \sin \left(\log \left(-x.re\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\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 r25699 = x_re;
double r25700 = r25699 * r25699;
double r25701 = x_im;
double r25702 = r25701 * r25701;
double r25703 = r25700 + r25702;
double r25704 = sqrt(r25703);
double r25705 = log(r25704);
double r25706 = y_re;
double r25707 = r25705 * r25706;
double r25708 = atan2(r25701, r25699);
double r25709 = y_im;
double r25710 = r25708 * r25709;
double r25711 = r25707 - r25710;
double r25712 = exp(r25711);
double r25713 = r25705 * r25709;
double r25714 = r25708 * r25706;
double r25715 = r25713 + r25714;
double r25716 = sin(r25715);
double r25717 = r25712 * r25716;
return r25717;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r25718 = x_re;
double r25719 = -2.08400593192104e-310;
bool r25720 = r25718 <= r25719;
double r25721 = r25718 * r25718;
double r25722 = x_im;
double r25723 = r25722 * r25722;
double r25724 = r25721 + r25723;
double r25725 = sqrt(r25724);
double r25726 = log(r25725);
double r25727 = y_re;
double r25728 = r25726 * r25727;
double r25729 = atan2(r25722, r25718);
double r25730 = cbrt(r25729);
double r25731 = r25730 * r25730;
double r25732 = cbrt(r25730);
double r25733 = r25732 * r25732;
double r25734 = r25733 * r25732;
double r25735 = y_im;
double r25736 = r25734 * r25735;
double r25737 = r25731 * r25736;
double r25738 = r25728 - r25737;
double r25739 = exp(r25738);
double r25740 = -r25718;
double r25741 = log(r25740);
double r25742 = r25741 * r25735;
double r25743 = r25729 * r25727;
double r25744 = r25742 + r25743;
double r25745 = sin(r25744);
double r25746 = r25739 * r25745;
double r25747 = r25729 * r25735;
double r25748 = r25728 - r25747;
double r25749 = exp(r25748);
double r25750 = log(r25718);
double r25751 = r25750 * r25735;
double r25752 = r25743 + r25751;
double r25753 = sin(r25752);
double r25754 = r25749 * r25753;
double r25755 = r25720 ? r25746 : r25754;
return r25755;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -2.08400593192104e-310Initial program 32.0
rmApplied add-cube-cbrt32.0
Applied associate-*l*32.0
rmApplied add-cube-cbrt32.0
Taylor expanded around -inf 20.3
Simplified20.3
if -2.08400593192104e-310 < 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)))))