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 1.448885253632785 \cdot 10^{-310}:\\
\;\;\;\;e^{\log \left(-1 \cdot x.re\right) \cdot y.re - \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 r14295 = x_re;
double r14296 = r14295 * r14295;
double r14297 = x_im;
double r14298 = r14297 * r14297;
double r14299 = r14296 + r14298;
double r14300 = sqrt(r14299);
double r14301 = log(r14300);
double r14302 = y_re;
double r14303 = r14301 * r14302;
double r14304 = atan2(r14297, r14295);
double r14305 = y_im;
double r14306 = r14304 * r14305;
double r14307 = r14303 - r14306;
double r14308 = exp(r14307);
double r14309 = r14301 * r14305;
double r14310 = r14304 * r14302;
double r14311 = r14309 + r14310;
double r14312 = cos(r14311);
double r14313 = r14308 * r14312;
return r14313;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r14314 = x_re;
double r14315 = 1.4488852536328e-310;
bool r14316 = r14314 <= r14315;
double r14317 = -1.0;
double r14318 = r14317 * r14314;
double r14319 = log(r14318);
double r14320 = y_re;
double r14321 = r14319 * r14320;
double r14322 = x_im;
double r14323 = atan2(r14322, r14314);
double r14324 = y_im;
double r14325 = r14323 * r14324;
double r14326 = r14321 - r14325;
double r14327 = exp(r14326);
double r14328 = 1.0;
double r14329 = r14327 * r14328;
double r14330 = log(r14314);
double r14331 = r14330 * r14320;
double r14332 = r14331 - r14325;
double r14333 = exp(r14332);
double r14334 = r14333 * r14328;
double r14335 = r14316 ? r14329 : r14334;
return r14335;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < 1.4488852536328e-310Initial program 31.0
Taylor expanded around 0 17.5
Taylor expanded around -inf 5.8
if 1.4488852536328e-310 < x.re Initial program 35.4
Taylor expanded around 0 22.6
Taylor expanded around inf 12.2
Final simplification9.0
herbie shell --seed 2020057
(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)))))