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}\;x.re \le -8.138202357158243 \cdot 10^{-284}:\\
\;\;\;\;e^{\log \left(-x.re\right) \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\mathbf{elif}\;x.re \le 7.402062416285907 \cdot 10^{-205}:\\
\;\;\;\;e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\mathbf{else}:\\
\;\;\;\;e^{\log x.re \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r1443403 = x_re;
double r1443404 = r1443403 * r1443403;
double r1443405 = x_im;
double r1443406 = r1443405 * r1443405;
double r1443407 = r1443404 + r1443406;
double r1443408 = sqrt(r1443407);
double r1443409 = log(r1443408);
double r1443410 = y_re;
double r1443411 = r1443409 * r1443410;
double r1443412 = atan2(r1443405, r1443403);
double r1443413 = y_im;
double r1443414 = r1443412 * r1443413;
double r1443415 = r1443411 - r1443414;
double r1443416 = exp(r1443415);
double r1443417 = r1443409 * r1443413;
double r1443418 = r1443412 * r1443410;
double r1443419 = r1443417 + r1443418;
double r1443420 = cos(r1443419);
double r1443421 = r1443416 * r1443420;
return r1443421;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1443422 = x_re;
double r1443423 = -8.138202357158243e-284;
bool r1443424 = r1443422 <= r1443423;
double r1443425 = -r1443422;
double r1443426 = log(r1443425);
double r1443427 = y_re;
double r1443428 = r1443426 * r1443427;
double r1443429 = y_im;
double r1443430 = x_im;
double r1443431 = atan2(r1443430, r1443422);
double r1443432 = r1443429 * r1443431;
double r1443433 = r1443428 - r1443432;
double r1443434 = exp(r1443433);
double r1443435 = 7.402062416285907e-205;
bool r1443436 = r1443422 <= r1443435;
double r1443437 = r1443422 * r1443422;
double r1443438 = r1443430 * r1443430;
double r1443439 = r1443437 + r1443438;
double r1443440 = sqrt(r1443439);
double r1443441 = log(r1443440);
double r1443442 = r1443427 * r1443441;
double r1443443 = r1443442 - r1443432;
double r1443444 = exp(r1443443);
double r1443445 = log(r1443422);
double r1443446 = r1443445 * r1443427;
double r1443447 = r1443446 - r1443432;
double r1443448 = exp(r1443447);
double r1443449 = r1443436 ? r1443444 : r1443448;
double r1443450 = r1443424 ? r1443434 : r1443449;
return r1443450;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -8.138202357158243e-284Initial program 31.7
Taylor expanded around 0 18.0
Taylor expanded around -inf 5.8
Simplified5.8
if -8.138202357158243e-284 < x.re < 7.402062416285907e-205Initial program 29.6
Taylor expanded around 0 15.9
if 7.402062416285907e-205 < x.re Initial program 33.5
Taylor expanded around 0 21.7
Taylor expanded around inf 11.6
Final simplification9.3
herbie shell --seed 2019158
(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)))))