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 \mathsf{log1p}\left(\mathsf{expm1}\left(\sin \left(\log \left(1 \cdot \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)double f(double x_re, double x_im, double y_re, double y_im) {
double r14669 = x_re;
double r14670 = r14669 * r14669;
double r14671 = x_im;
double r14672 = r14671 * r14671;
double r14673 = r14670 + r14672;
double r14674 = sqrt(r14673);
double r14675 = log(r14674);
double r14676 = y_re;
double r14677 = r14675 * r14676;
double r14678 = atan2(r14671, r14669);
double r14679 = y_im;
double r14680 = r14678 * r14679;
double r14681 = r14677 - r14680;
double r14682 = exp(r14681);
double r14683 = r14675 * r14679;
double r14684 = r14678 * r14676;
double r14685 = r14683 + r14684;
double r14686 = sin(r14685);
double r14687 = r14682 * r14686;
return r14687;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r14688 = x_re;
double r14689 = x_im;
double r14690 = hypot(r14688, r14689);
double r14691 = log(r14690);
double r14692 = exp(r14691);
double r14693 = log(r14692);
double r14694 = y_re;
double r14695 = r14693 * r14694;
double r14696 = atan2(r14689, r14688);
double r14697 = y_im;
double r14698 = r14696 * r14697;
double r14699 = r14695 - r14698;
double r14700 = exp(r14699);
double r14701 = 1.0;
double r14702 = r14701 * r14690;
double r14703 = log(r14702);
double r14704 = r14703 * r14697;
double r14705 = r14696 * r14694;
double r14706 = r14704 + r14705;
double r14707 = sin(r14706);
double r14708 = expm1(r14707);
double r14709 = log1p(r14708);
double r14710 = r14700 * r14709;
return r14710;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
Initial program 33.4
rmApplied *-un-lft-identity33.4
Applied sqrt-prod33.4
Simplified33.4
Simplified19.4
rmApplied add-exp-log19.4
Simplified3.7
rmApplied log1p-expm1-u3.7
Final simplification3.7
herbie shell --seed 2019353 +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)))))