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)\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) \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 r546689 = x_re;
double r546690 = r546689 * r546689;
double r546691 = x_im;
double r546692 = r546691 * r546691;
double r546693 = r546690 + r546692;
double r546694 = sqrt(r546693);
double r546695 = log(r546694);
double r546696 = y_re;
double r546697 = r546695 * r546696;
double r546698 = atan2(r546691, r546689);
double r546699 = y_im;
double r546700 = r546698 * r546699;
double r546701 = r546697 - r546700;
double r546702 = exp(r546701);
double r546703 = r546695 * r546699;
double r546704 = r546698 * r546696;
double r546705 = r546703 + r546704;
double r546706 = sin(r546705);
double r546707 = r546702 * r546706;
return r546707;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r546708 = y_im;
double r546709 = x_re;
double r546710 = x_im;
double r546711 = hypot(r546709, r546710);
double r546712 = log(r546711);
double r546713 = y_re;
double r546714 = cbrt(r546713);
double r546715 = r546714 * r546714;
double r546716 = atan2(r546710, r546709);
double r546717 = r546715 * r546716;
double r546718 = r546714 * r546717;
double r546719 = fma(r546708, r546712, r546718);
double r546720 = sin(r546719);
double r546721 = r546712 * r546713;
double r546722 = r546708 * r546716;
double r546723 = r546721 - r546722;
double r546724 = exp(r546723);
double r546725 = r546720 * r546724;
return r546725;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Initial program 33.0
Simplified3.5
rmApplied add-cube-cbrt3.7
Applied associate-*r*3.7
Final simplification3.7
herbie shell --seed 2019156 +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)))))