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 -31550.873164050485:\\
\;\;\;\;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 r1099353 = x_re;
double r1099354 = r1099353 * r1099353;
double r1099355 = x_im;
double r1099356 = r1099355 * r1099355;
double r1099357 = r1099354 + r1099356;
double r1099358 = sqrt(r1099357);
double r1099359 = log(r1099358);
double r1099360 = y_re;
double r1099361 = r1099359 * r1099360;
double r1099362 = atan2(r1099355, r1099353);
double r1099363 = y_im;
double r1099364 = r1099362 * r1099363;
double r1099365 = r1099361 - r1099364;
double r1099366 = exp(r1099365);
double r1099367 = r1099359 * r1099363;
double r1099368 = r1099362 * r1099360;
double r1099369 = r1099367 + r1099368;
double r1099370 = cos(r1099369);
double r1099371 = r1099366 * r1099370;
return r1099371;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1099372 = y_re;
double r1099373 = -31550.873164050485;
bool r1099374 = r1099372 <= r1099373;
double r1099375 = x_im;
double r1099376 = r1099375 * r1099375;
double r1099377 = x_re;
double r1099378 = r1099377 * r1099377;
double r1099379 = r1099376 + r1099378;
double r1099380 = sqrt(r1099379);
double r1099381 = log(r1099380);
double r1099382 = r1099381 * r1099372;
double r1099383 = atan2(r1099375, r1099377);
double r1099384 = y_im;
double r1099385 = r1099383 * r1099384;
double r1099386 = r1099382 - r1099385;
double r1099387 = exp(r1099386);
double r1099388 = -r1099377;
double r1099389 = log(r1099388);
double r1099390 = r1099372 * r1099389;
double r1099391 = r1099390 - r1099385;
double r1099392 = exp(r1099391);
double r1099393 = r1099374 ? r1099387 : r1099392;
return r1099393;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.re < -31550.873164050485Initial program 36.6
Taylor expanded around 0 0
if -31550.873164050485 < y.re Initial program 28.6
Taylor expanded around 0 25.9
Taylor expanded around -inf 0.3
Simplified0.3
Final simplification0.2
herbie shell --seed 2019137
(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)))))