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 \cos \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)\log \left(e^{\cos \left(\mathsf{fma}\left(\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right), y.im, \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\right)}\right) \cdot e^{\mathsf{fma}\left(y.re, \log \left(\mathsf{hypot}\left(x.re, x.im\right)\right), -\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im\right)}double f(double x_re, double x_im, double y_re, double y_im) {
double r23161 = x_re;
double r23162 = r23161 * r23161;
double r23163 = x_im;
double r23164 = r23163 * r23163;
double r23165 = r23162 + r23164;
double r23166 = sqrt(r23165);
double r23167 = log(r23166);
double r23168 = y_re;
double r23169 = r23167 * r23168;
double r23170 = atan2(r23163, r23161);
double r23171 = y_im;
double r23172 = r23170 * r23171;
double r23173 = r23169 - r23172;
double r23174 = exp(r23173);
double r23175 = r23167 * r23171;
double r23176 = r23170 * r23168;
double r23177 = r23175 + r23176;
double r23178 = cos(r23177);
double r23179 = r23174 * r23178;
return r23179;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r23180 = x_re;
double r23181 = x_im;
double r23182 = hypot(r23180, r23181);
double r23183 = log(r23182);
double r23184 = y_im;
double r23185 = atan2(r23181, r23180);
double r23186 = y_re;
double r23187 = r23185 * r23186;
double r23188 = fma(r23183, r23184, r23187);
double r23189 = cos(r23188);
double r23190 = exp(r23189);
double r23191 = log(r23190);
double r23192 = r23185 * r23184;
double r23193 = -r23192;
double r23194 = fma(r23186, r23183, r23193);
double r23195 = exp(r23194);
double r23196 = r23191 * r23195;
return r23196;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Initial program 33.4
Simplified8.6
rmApplied add-exp-log8.6
Applied pow-exp8.6
Applied div-exp3.4
Simplified3.4
rmApplied add-log-exp3.4
Final simplification3.4
herbie shell --seed 2019325 +o rules:numerics
(FPCore (x.re x.im y.re y.im)
:name "powComplex, real part"
:precision binary64
(* (exp (- (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.re) (* (atan2 x.im x.re) y.im))) (cos (+ (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.im) (* (atan2 x.im x.re) y.re)))))