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(\mathsf{hypot}\left(x.re, x.im\right)\right) \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}} \cdot \sin \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)double f(double x_re, double x_im, double y_re, double y_im) {
double r907713 = x_re;
double r907714 = r907713 * r907713;
double r907715 = x_im;
double r907716 = r907715 * r907715;
double r907717 = r907714 + r907716;
double r907718 = sqrt(r907717);
double r907719 = log(r907718);
double r907720 = y_re;
double r907721 = r907719 * r907720;
double r907722 = atan2(r907715, r907713);
double r907723 = y_im;
double r907724 = r907722 * r907723;
double r907725 = r907721 - r907724;
double r907726 = exp(r907725);
double r907727 = r907719 * r907723;
double r907728 = r907722 * r907720;
double r907729 = r907727 + r907728;
double r907730 = sin(r907729);
double r907731 = r907726 * r907730;
return r907731;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r907732 = x_re;
double r907733 = x_im;
double r907734 = hypot(r907732, r907733);
double r907735 = log(r907734);
double r907736 = y_re;
double r907737 = r907735 * r907736;
double r907738 = y_im;
double r907739 = atan2(r907733, r907732);
double r907740 = r907738 * r907739;
double r907741 = r907737 - r907740;
double r907742 = exp(r907741);
double r907743 = r907736 * r907739;
double r907744 = fma(r907738, r907735, r907743);
double r907745 = sin(r907744);
double r907746 = r907742 * r907745;
return r907746;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Initial program 33.2
Simplified3.6
Taylor expanded around 0 3.6
Final simplification3.6
herbie shell --seed 2019149 +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)))))