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)e^{\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right) \cdot y.re - \left(\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\right) \cdot \sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}} \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\sin \left(\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\right)\right)double f(double x_re, double x_im, double y_re, double y_im) {
double r14763 = x_re;
double r14764 = r14763 * r14763;
double r14765 = x_im;
double r14766 = r14765 * r14765;
double r14767 = r14764 + r14766;
double r14768 = sqrt(r14767);
double r14769 = log(r14768);
double r14770 = y_re;
double r14771 = r14769 * r14770;
double r14772 = atan2(r14765, r14763);
double r14773 = y_im;
double r14774 = r14772 * r14773;
double r14775 = r14771 - r14774;
double r14776 = exp(r14775);
double r14777 = r14769 * r14773;
double r14778 = r14772 * r14770;
double r14779 = r14777 + r14778;
double r14780 = sin(r14779);
double r14781 = r14776 * r14780;
return r14781;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r14782 = x_re;
double r14783 = x_im;
double r14784 = hypot(r14782, r14783);
double r14785 = log(r14784);
double r14786 = y_re;
double r14787 = r14785 * r14786;
double r14788 = atan2(r14783, r14782);
double r14789 = y_im;
double r14790 = r14788 * r14789;
double r14791 = cbrt(r14790);
double r14792 = r14791 * r14791;
double r14793 = r14792 * r14791;
double r14794 = r14787 - r14793;
double r14795 = exp(r14794);
double r14796 = r14785 * r14789;
double r14797 = r14788 * r14786;
double r14798 = r14796 + r14797;
double r14799 = sin(r14798);
double r14800 = log1p(r14799);
double r14801 = expm1(r14800);
double r14802 = r14795 * r14801;
return r14802;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
Initial program 33.9
rmApplied hypot-def19.5
rmApplied hypot-def3.5
rmApplied add-cube-cbrt3.5
rmApplied expm1-log1p-u3.5
Final simplification3.5
herbie shell --seed 2019354 +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)))))