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 - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\mathsf{log1p}\left(\mathsf{expm1}\left(\cos \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)\right)\right)double f(double x_re, double x_im, double y_re, double y_im) {
double r14545 = x_re;
double r14546 = r14545 * r14545;
double r14547 = x_im;
double r14548 = r14547 * r14547;
double r14549 = r14546 + r14548;
double r14550 = sqrt(r14549);
double r14551 = log(r14550);
double r14552 = y_re;
double r14553 = r14551 * r14552;
double r14554 = atan2(r14547, r14545);
double r14555 = y_im;
double r14556 = r14554 * r14555;
double r14557 = r14553 - r14556;
double r14558 = exp(r14557);
double r14559 = r14551 * r14555;
double r14560 = r14554 * r14552;
double r14561 = r14559 + r14560;
double r14562 = cos(r14561);
double r14563 = r14558 * r14562;
return r14563;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r14564 = x_re;
double r14565 = x_im;
double r14566 = hypot(r14564, r14565);
double r14567 = log(r14566);
double r14568 = y_re;
double r14569 = r14567 * r14568;
double r14570 = atan2(r14565, r14564);
double r14571 = y_im;
double r14572 = r14570 * r14571;
double r14573 = r14569 - r14572;
double r14574 = exp(r14573);
double r14575 = r14567 * r14571;
double r14576 = r14570 * r14568;
double r14577 = r14575 + r14576;
double r14578 = cos(r14577);
double r14579 = expm1(r14578);
double r14580 = log1p(r14579);
double r14581 = log1p(r14580);
double r14582 = expm1(r14581);
double r14583 = r14574 * r14582;
return r14583;
}



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-def20.2
rmApplied hypot-def3.4
rmApplied expm1-log1p-u3.4
rmApplied log1p-expm1-u3.4
Final simplification3.4
herbie shell --seed 2020002 +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)))))