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(e^{\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right)}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \left(\left(\sqrt[3]{\sin \left(\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right) \cdot y.im + \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot \left(\sqrt[3]{y.re} \cdot \sqrt[3]{y.re}\right)\right) \cdot \sqrt[3]{y.re}\right)} \cdot \sqrt[3]{\sin \left(\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right) \cdot y.im + \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot \left(\sqrt[3]{y.re} \cdot \sqrt[3]{y.re}\right)\right) \cdot \sqrt[3]{y.re}\right)}\right) \cdot \sqrt[3]{\sin \left(\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right) \cdot y.im + \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot \left(\sqrt[3]{y.re} \cdot \sqrt[3]{y.re}\right)\right) \cdot \sqrt[3]{y.re}\right)}\right)double f(double x_re, double x_im, double y_re, double y_im) {
double r14522 = x_re;
double r14523 = r14522 * r14522;
double r14524 = x_im;
double r14525 = r14524 * r14524;
double r14526 = r14523 + r14525;
double r14527 = sqrt(r14526);
double r14528 = log(r14527);
double r14529 = y_re;
double r14530 = r14528 * r14529;
double r14531 = atan2(r14524, r14522);
double r14532 = y_im;
double r14533 = r14531 * r14532;
double r14534 = r14530 - r14533;
double r14535 = exp(r14534);
double r14536 = r14528 * r14532;
double r14537 = r14531 * r14529;
double r14538 = r14536 + r14537;
double r14539 = sin(r14538);
double r14540 = r14535 * r14539;
return r14540;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r14541 = x_re;
double r14542 = x_im;
double r14543 = hypot(r14541, r14542);
double r14544 = log(r14543);
double r14545 = exp(r14544);
double r14546 = log(r14545);
double r14547 = y_re;
double r14548 = r14546 * r14547;
double r14549 = atan2(r14542, r14541);
double r14550 = y_im;
double r14551 = r14549 * r14550;
double r14552 = r14548 - r14551;
double r14553 = exp(r14552);
double r14554 = r14544 * r14550;
double r14555 = cbrt(r14547);
double r14556 = r14555 * r14555;
double r14557 = r14549 * r14556;
double r14558 = r14557 * r14555;
double r14559 = r14554 + r14558;
double r14560 = sin(r14559);
double r14561 = cbrt(r14560);
double r14562 = r14561 * r14561;
double r14563 = r14562 * r14561;
double r14564 = r14553 * r14563;
return r14564;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
Initial program 32.9
rmApplied hypot-def19.1
rmApplied add-exp-log19.1
Simplified3.5
rmApplied add-cube-cbrt3.7
Applied associate-*r*3.7
rmApplied add-cube-cbrt4.0
Final simplification4.0
herbie shell --seed 2020056 +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)))))