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 2.694637325986234635023828792620054235417 \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 r21422 = x_re;
double r21423 = r21422 * r21422;
double r21424 = x_im;
double r21425 = r21424 * r21424;
double r21426 = r21423 + r21425;
double r21427 = sqrt(r21426);
double r21428 = log(r21427);
double r21429 = y_re;
double r21430 = r21428 * r21429;
double r21431 = atan2(r21424, r21422);
double r21432 = y_im;
double r21433 = r21431 * r21432;
double r21434 = r21430 - r21433;
double r21435 = exp(r21434);
double r21436 = r21428 * r21432;
double r21437 = r21431 * r21429;
double r21438 = r21436 + r21437;
double r21439 = cos(r21438);
double r21440 = r21435 * r21439;
return r21440;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r21441 = x_re;
double r21442 = 2.69463732598623e-310;
bool r21443 = r21441 <= r21442;
double r21444 = -1.0;
double r21445 = r21444 * r21441;
double r21446 = log(r21445);
double r21447 = y_re;
double r21448 = r21446 * r21447;
double r21449 = x_im;
double r21450 = atan2(r21449, r21441);
double r21451 = y_im;
double r21452 = r21450 * r21451;
double r21453 = r21448 - r21452;
double r21454 = exp(r21453);
double r21455 = 1.0;
double r21456 = r21454 * r21455;
double r21457 = log(r21441);
double r21458 = r21457 * r21447;
double r21459 = r21458 - r21452;
double r21460 = exp(r21459);
double r21461 = r21460 * r21455;
double r21462 = r21443 ? r21456 : r21461;
return r21462;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < 2.69463732598623e-310Initial program 32.5
Taylor expanded around 0 18.1
Taylor expanded around -inf 6.0
if 2.69463732598623e-310 < x.re Initial program 34.5
Taylor expanded around 0 21.5
Taylor expanded around inf 10.9
Final simplification8.5
herbie shell --seed 2019297
(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)))))