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)\begin{array}{l}
\mathbf{if}\;y.re \le -1.7695488234945081 \cdot 10^{-09}:\\
\;\;\;\;e^{\log \left(\sqrt{x.im \cdot x.im + x.re \cdot x.re}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\mathbf{else}:\\
\;\;\;\;e^{y.re \cdot \log \left(-x.re\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r911466 = x_re;
double r911467 = r911466 * r911466;
double r911468 = x_im;
double r911469 = r911468 * r911468;
double r911470 = r911467 + r911469;
double r911471 = sqrt(r911470);
double r911472 = log(r911471);
double r911473 = y_re;
double r911474 = r911472 * r911473;
double r911475 = atan2(r911468, r911466);
double r911476 = y_im;
double r911477 = r911475 * r911476;
double r911478 = r911474 - r911477;
double r911479 = exp(r911478);
double r911480 = r911472 * r911476;
double r911481 = r911475 * r911473;
double r911482 = r911480 + r911481;
double r911483 = cos(r911482);
double r911484 = r911479 * r911483;
return r911484;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r911485 = y_re;
double r911486 = -1.7695488234945081e-09;
bool r911487 = r911485 <= r911486;
double r911488 = x_im;
double r911489 = r911488 * r911488;
double r911490 = x_re;
double r911491 = r911490 * r911490;
double r911492 = r911489 + r911491;
double r911493 = sqrt(r911492);
double r911494 = log(r911493);
double r911495 = r911494 * r911485;
double r911496 = atan2(r911488, r911490);
double r911497 = y_im;
double r911498 = r911496 * r911497;
double r911499 = r911495 - r911498;
double r911500 = exp(r911499);
double r911501 = -r911490;
double r911502 = log(r911501);
double r911503 = r911485 * r911502;
double r911504 = r911503 - r911498;
double r911505 = exp(r911504);
double r911506 = r911487 ? r911500 : r911505;
return r911506;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.re < -1.7695488234945081e-09Initial program 36.8
Taylor expanded around 0 0.0
if -1.7695488234945081e-09 < y.re Initial program 27.8
Taylor expanded around 0 25.3
Taylor expanded around -inf 0.3
Simplified0.3
Final simplification0.2
herbie shell --seed 2019133
(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)))))