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{log1p}\left(\mathsf{expm1}\left(\sin \left(\mathsf{fma}\left(y.im, \log \left(\mathsf{hypot}\left(x.re, x.im\right)\right), \sqrt[3]{y.re} \cdot \left(\left(\sqrt[3]{y.re} \cdot \sqrt[3]{y.re}\right) \cdot \tan^{-1}_* \frac{x.im}{x.re}\right)\right)\right)\right)\right) \cdot e^{\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right) \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}double f(double x_re, double x_im, double y_re, double y_im) {
double r537582 = x_re;
double r537583 = r537582 * r537582;
double r537584 = x_im;
double r537585 = r537584 * r537584;
double r537586 = r537583 + r537585;
double r537587 = sqrt(r537586);
double r537588 = log(r537587);
double r537589 = y_re;
double r537590 = r537588 * r537589;
double r537591 = atan2(r537584, r537582);
double r537592 = y_im;
double r537593 = r537591 * r537592;
double r537594 = r537590 - r537593;
double r537595 = exp(r537594);
double r537596 = r537588 * r537592;
double r537597 = r537591 * r537589;
double r537598 = r537596 + r537597;
double r537599 = sin(r537598);
double r537600 = r537595 * r537599;
return r537600;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r537601 = y_im;
double r537602 = x_re;
double r537603 = x_im;
double r537604 = hypot(r537602, r537603);
double r537605 = log(r537604);
double r537606 = y_re;
double r537607 = cbrt(r537606);
double r537608 = r537607 * r537607;
double r537609 = atan2(r537603, r537602);
double r537610 = r537608 * r537609;
double r537611 = r537607 * r537610;
double r537612 = fma(r537601, r537605, r537611);
double r537613 = sin(r537612);
double r537614 = expm1(r537613);
double r537615 = log1p(r537614);
double r537616 = r537605 * r537606;
double r537617 = r537601 * r537609;
double r537618 = r537616 - r537617;
double r537619 = exp(r537618);
double r537620 = r537615 * r537619;
return r537620;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Initial program 32.8
Simplified3.5
rmApplied log1p-expm1-u3.5
rmApplied add-cube-cbrt3.7
Applied associate-*r*3.7
Final simplification3.7
herbie shell --seed 2019152 +o rules:numerics
(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)))))