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 r529507 = x_re;
double r529508 = r529507 * r529507;
double r529509 = x_im;
double r529510 = r529509 * r529509;
double r529511 = r529508 + r529510;
double r529512 = sqrt(r529511);
double r529513 = log(r529512);
double r529514 = y_re;
double r529515 = r529513 * r529514;
double r529516 = atan2(r529509, r529507);
double r529517 = y_im;
double r529518 = r529516 * r529517;
double r529519 = r529515 - r529518;
double r529520 = exp(r529519);
double r529521 = r529513 * r529517;
double r529522 = r529516 * r529514;
double r529523 = r529521 + r529522;
double r529524 = cos(r529523);
double r529525 = r529520 * r529524;
return r529525;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r529526 = y_im;
double r529527 = x_re;
double r529528 = x_im;
double r529529 = hypot(r529527, r529528);
double r529530 = log(r529529);
double r529531 = atan2(r529528, r529527);
double r529532 = y_re;
double r529533 = r529531 * r529532;
double r529534 = fma(r529526, r529530, r529533);
double r529535 = cos(r529534);
double r529536 = r529531 * r529526;
double r529537 = r529532 * r529530;
double r529538 = r529536 - r529537;
double r529539 = exp(r529538);
double r529540 = r529535 / r529539;
return r529540;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Initial program 30.7
Simplified0.1
Final simplification0.1
herbie shell --seed 2019128 +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)))))