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)\mathsf{expm1}\left(\mathsf{log1p}\left(\sin \left(\mathsf{fma}\left(\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right), y.im, \left(\left(\sqrt[3]{y.re} \cdot \sqrt[3]{y.re}\right) \cdot \tan^{-1}_* \frac{x.im}{x.re}\right) \cdot \sqrt[3]{y.re}\right)\right)\right)\right) \cdot e^{\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}double f(double x_re, double x_im, double y_re, double y_im) {
double r25715 = x_re;
double r25716 = r25715 * r25715;
double r25717 = x_im;
double r25718 = r25717 * r25717;
double r25719 = r25716 + r25718;
double r25720 = sqrt(r25719);
double r25721 = log(r25720);
double r25722 = y_re;
double r25723 = r25721 * r25722;
double r25724 = atan2(r25717, r25715);
double r25725 = y_im;
double r25726 = r25724 * r25725;
double r25727 = r25723 - r25726;
double r25728 = exp(r25727);
double r25729 = r25721 * r25725;
double r25730 = r25724 * r25722;
double r25731 = r25729 + r25730;
double r25732 = sin(r25731);
double r25733 = r25728 * r25732;
return r25733;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r25734 = x_re;
double r25735 = x_im;
double r25736 = hypot(r25734, r25735);
double r25737 = log(r25736);
double r25738 = y_im;
double r25739 = y_re;
double r25740 = cbrt(r25739);
double r25741 = r25740 * r25740;
double r25742 = atan2(r25735, r25734);
double r25743 = r25741 * r25742;
double r25744 = r25743 * r25740;
double r25745 = fma(r25737, r25738, r25744);
double r25746 = sin(r25745);
double r25747 = log1p(r25746);
double r25748 = expm1(r25747);
double r25749 = r25737 * r25739;
double r25750 = r25742 * r25738;
double r25751 = r25749 - r25750;
double r25752 = exp(r25751);
double r25753 = r25748 * r25752;
return r25753;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Initial program 33.1
Simplified8.6
rmApplied add-exp-log8.6
Applied pow-exp8.6
Applied div-exp3.5
rmApplied expm1-log1p-u3.5
rmApplied add-cube-cbrt3.7
Applied associate-*r*3.7
Simplified3.7
Final simplification3.7
herbie shell --seed 2019209 +o rules:numerics
(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)))))