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 r514082 = x_re;
double r514083 = r514082 * r514082;
double r514084 = x_im;
double r514085 = r514084 * r514084;
double r514086 = r514083 + r514085;
double r514087 = sqrt(r514086);
double r514088 = log(r514087);
double r514089 = y_re;
double r514090 = r514088 * r514089;
double r514091 = atan2(r514084, r514082);
double r514092 = y_im;
double r514093 = r514091 * r514092;
double r514094 = r514090 - r514093;
double r514095 = exp(r514094);
double r514096 = r514088 * r514092;
double r514097 = r514091 * r514089;
double r514098 = r514096 + r514097;
double r514099 = sin(r514098);
double r514100 = r514095 * r514099;
return r514100;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r514101 = x_re;
double r514102 = x_im;
double r514103 = hypot(r514101, r514102);
double r514104 = log(r514103);
double r514105 = y_re;
double r514106 = r514104 * r514105;
double r514107 = y_im;
double r514108 = atan2(r514102, r514101);
double r514109 = r514107 * r514108;
double r514110 = r514106 - r514109;
double r514111 = exp(r514110);
double r514112 = r514107 * r514104;
double r514113 = sin(r514112);
double r514114 = expm1(r514113);
double r514115 = log1p(r514114);
double r514116 = r514105 * r514108;
double r514117 = cos(r514116);
double r514118 = r514115 * r514117;
double r514119 = cos(r514112);
double r514120 = sin(r514116);
double r514121 = r514119 * r514120;
double r514122 = r514118 + r514121;
double r514123 = r514111 * r514122;
return r514123;
}



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)))))