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 7.7747768769685 \cdot 10^{-312}:\\
\;\;\;\;e^{-1 \cdot \left(y.re \cdot \log \left(\frac{-1}{x.re}\right)\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\
\mathbf{else}:\\
\;\;\;\;e^{\log x.re \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r15436 = x_re;
double r15437 = r15436 * r15436;
double r15438 = x_im;
double r15439 = r15438 * r15438;
double r15440 = r15437 + r15439;
double r15441 = sqrt(r15440);
double r15442 = log(r15441);
double r15443 = y_re;
double r15444 = r15442 * r15443;
double r15445 = atan2(r15438, r15436);
double r15446 = y_im;
double r15447 = r15445 * r15446;
double r15448 = r15444 - r15447;
double r15449 = exp(r15448);
double r15450 = r15442 * r15446;
double r15451 = r15445 * r15443;
double r15452 = r15450 + r15451;
double r15453 = cos(r15452);
double r15454 = r15449 * r15453;
return r15454;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r15455 = x_re;
double r15456 = 7.7747768769685e-312;
bool r15457 = r15455 <= r15456;
double r15458 = -1.0;
double r15459 = y_re;
double r15460 = r15458 / r15455;
double r15461 = log(r15460);
double r15462 = r15459 * r15461;
double r15463 = r15458 * r15462;
double r15464 = x_im;
double r15465 = atan2(r15464, r15455);
double r15466 = y_im;
double r15467 = r15465 * r15466;
double r15468 = r15463 - r15467;
double r15469 = exp(r15468);
double r15470 = 1.0;
double r15471 = r15469 * r15470;
double r15472 = log(r15455);
double r15473 = r15472 * r15459;
double r15474 = r15473 - r15467;
double r15475 = exp(r15474);
double r15476 = r15475 * r15470;
double r15477 = r15457 ? r15471 : r15476;
return r15477;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < 7.7747768769685e-312Initial program 31.2
Taylor expanded around 0 17.1
Taylor expanded around -inf 5.7
if 7.7747768769685e-312 < x.re Initial program 34.8
Taylor expanded around 0 21.6
Taylor expanded around inf 11.2
Final simplification8.6
herbie shell --seed 2020064
(FPCore (x.re x.im y.re y.im)
:name "powComplex, real part"
:precision binary64
(* (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)))))