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)\frac{\cos \left(\mathsf{fma}\left(y.im, \left(\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right)\right), \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\right)\right)}{e^{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im - y.re \cdot \log \left(\mathsf{hypot}\left(x.re, x.im\right)\right)}}double f(double x_re, double x_im, double y_re, double y_im) {
double r615346 = x_re;
double r615347 = r615346 * r615346;
double r615348 = x_im;
double r615349 = r615348 * r615348;
double r615350 = r615347 + r615349;
double r615351 = sqrt(r615350);
double r615352 = log(r615351);
double r615353 = y_re;
double r615354 = r615352 * r615353;
double r615355 = atan2(r615348, r615346);
double r615356 = y_im;
double r615357 = r615355 * r615356;
double r615358 = r615354 - r615357;
double r615359 = exp(r615358);
double r615360 = r615352 * r615356;
double r615361 = r615355 * r615353;
double r615362 = r615360 + r615361;
double r615363 = cos(r615362);
double r615364 = r615359 * r615363;
return r615364;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r615365 = y_im;
double r615366 = x_re;
double r615367 = x_im;
double r615368 = hypot(r615366, r615367);
double r615369 = log(r615368);
double r615370 = atan2(r615367, r615366);
double r615371 = y_re;
double r615372 = r615370 * r615371;
double r615373 = fma(r615365, r615369, r615372);
double r615374 = cos(r615373);
double r615375 = r615370 * r615365;
double r615376 = r615371 * r615369;
double r615377 = r615375 - r615376;
double r615378 = exp(r615377);
double r615379 = r615374 / r615378;
return r615379;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Initial program 30.8
Simplified0.1
Final simplification0.1
herbie shell --seed 2019133 +o rules:numerics
(FPCore (x.re x.im y.re y.im)
:name "powComplex, real part"
(* (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)))))