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 \left(\mathsf{log1p}\left(\mathsf{expm1}\left(\sin \left(y.im \cdot \log \left(\mathsf{hypot}\left(x.re, x.im\right)\right)\right)\right)\right) \cdot \cos \left(y.re \cdot \tan^{-1}_* \frac{x.im}{x.re}\right) + \cos \left(y.im \cdot \log \left(\mathsf{hypot}\left(x.re, x.im\right)\right)\right) \cdot \sin \left(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 r748802 = x_re;
double r748803 = r748802 * r748802;
double r748804 = x_im;
double r748805 = r748804 * r748804;
double r748806 = r748803 + r748805;
double r748807 = sqrt(r748806);
double r748808 = log(r748807);
double r748809 = y_re;
double r748810 = r748808 * r748809;
double r748811 = atan2(r748804, r748802);
double r748812 = y_im;
double r748813 = r748811 * r748812;
double r748814 = r748810 - r748813;
double r748815 = exp(r748814);
double r748816 = r748808 * r748812;
double r748817 = r748811 * r748809;
double r748818 = r748816 + r748817;
double r748819 = sin(r748818);
double r748820 = r748815 * r748819;
return r748820;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r748821 = x_re;
double r748822 = x_im;
double r748823 = hypot(r748821, r748822);
double r748824 = log(r748823);
double r748825 = y_re;
double r748826 = r748824 * r748825;
double r748827 = y_im;
double r748828 = atan2(r748822, r748821);
double r748829 = r748827 * r748828;
double r748830 = r748826 - r748829;
double r748831 = exp(r748830);
double r748832 = r748827 * r748824;
double r748833 = sin(r748832);
double r748834 = expm1(r748833);
double r748835 = log1p(r748834);
double r748836 = r748825 * r748828;
double r748837 = cos(r748836);
double r748838 = r748835 * r748837;
double r748839 = cos(r748832);
double r748840 = sin(r748836);
double r748841 = r748839 * r748840;
double r748842 = r748838 + r748841;
double r748843 = r748831 * r748842;
return r748843;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
Initial program 32.4
Simplified3.5
rmApplied fma-udef3.5
Applied sin-sum3.5
rmApplied log1p-expm1-u3.5
Final simplification3.5
herbie shell --seed 2019151 +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)))))