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)\log \left(e^{\cos \left(\mathsf{fma}\left(\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right), y.im, \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\right)}\right) \cdot e^{\mathsf{fma}\left(y.re, \log \left(\mathsf{hypot}\left(x.re, x.im\right)\right), -\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im\right)}double f(double x_re, double x_im, double y_re, double y_im) {
double r23230 = x_re;
double r23231 = r23230 * r23230;
double r23232 = x_im;
double r23233 = r23232 * r23232;
double r23234 = r23231 + r23233;
double r23235 = sqrt(r23234);
double r23236 = log(r23235);
double r23237 = y_re;
double r23238 = r23236 * r23237;
double r23239 = atan2(r23232, r23230);
double r23240 = y_im;
double r23241 = r23239 * r23240;
double r23242 = r23238 - r23241;
double r23243 = exp(r23242);
double r23244 = r23236 * r23240;
double r23245 = r23239 * r23237;
double r23246 = r23244 + r23245;
double r23247 = cos(r23246);
double r23248 = r23243 * r23247;
return r23248;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r23249 = x_re;
double r23250 = x_im;
double r23251 = hypot(r23249, r23250);
double r23252 = log(r23251);
double r23253 = y_im;
double r23254 = atan2(r23250, r23249);
double r23255 = y_re;
double r23256 = r23254 * r23255;
double r23257 = fma(r23252, r23253, r23256);
double r23258 = cos(r23257);
double r23259 = exp(r23258);
double r23260 = log(r23259);
double r23261 = r23254 * r23253;
double r23262 = -r23261;
double r23263 = fma(r23255, r23252, r23262);
double r23264 = exp(r23263);
double r23265 = r23260 * r23264;
return r23265;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Initial program 33.4
Simplified8.6
rmApplied add-exp-log8.6
Applied pow-exp8.6
Applied div-exp3.4
Simplified3.4
rmApplied add-log-exp3.4
Final simplification3.4
herbie shell --seed 2019325 +o rules:numerics
(FPCore (x.re x.im y.re y.im)
:name "powComplex, real part"
:precision binary64
(* (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)))))