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 \cos \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 - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}} \cdot \left(\log \left(\sqrt{e^{\cos \left(\mathsf{fma}\left(y.im, \log \left(\mathsf{hypot}\left(x.re, x.im\right)\right), y.re \cdot \tan^{-1}_* \frac{x.im}{x.re}\right)\right)}}\right) + \log \left(\sqrt{e^{\cos \left(\mathsf{fma}\left(y.im, \log \left(\mathsf{hypot}\left(x.re, x.im\right)\right), y.re \cdot \tan^{-1}_* \frac{x.im}{x.re}\right)\right)}}\right)\right)double f(double x_re, double x_im, double y_re, double y_im) {
double r1218998 = x_re;
double r1218999 = r1218998 * r1218998;
double r1219000 = x_im;
double r1219001 = r1219000 * r1219000;
double r1219002 = r1218999 + r1219001;
double r1219003 = sqrt(r1219002);
double r1219004 = log(r1219003);
double r1219005 = y_re;
double r1219006 = r1219004 * r1219005;
double r1219007 = atan2(r1219000, r1218998);
double r1219008 = y_im;
double r1219009 = r1219007 * r1219008;
double r1219010 = r1219006 - r1219009;
double r1219011 = exp(r1219010);
double r1219012 = r1219004 * r1219008;
double r1219013 = r1219007 * r1219005;
double r1219014 = r1219012 + r1219013;
double r1219015 = cos(r1219014);
double r1219016 = r1219011 * r1219015;
return r1219016;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1219017 = x_re;
double r1219018 = x_im;
double r1219019 = hypot(r1219017, r1219018);
double r1219020 = log(r1219019);
double r1219021 = y_re;
double r1219022 = r1219020 * r1219021;
double r1219023 = y_im;
double r1219024 = atan2(r1219018, r1219017);
double r1219025 = r1219023 * r1219024;
double r1219026 = r1219022 - r1219025;
double r1219027 = exp(r1219026);
double r1219028 = r1219021 * r1219024;
double r1219029 = fma(r1219023, r1219020, r1219028);
double r1219030 = cos(r1219029);
double r1219031 = exp(r1219030);
double r1219032 = sqrt(r1219031);
double r1219033 = log(r1219032);
double r1219034 = r1219033 + r1219033;
double r1219035 = r1219027 * r1219034;
return r1219035;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Initial program 32.7
Simplified3.3
rmApplied add-log-exp3.3
rmApplied add-sqr-sqrt3.3
Applied log-prod3.3
Final simplification3.3
herbie shell --seed 2019172 +o rules:numerics
(FPCore (x.re x.im y.re y.im)
:name "powComplex, real part"
(* (exp (- (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.re) (* (atan2 x.im x.re) y.im))) (cos (+ (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.im) (* (atan2 x.im x.re) y.re)))))