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.2239707999231867474825347749907606845 \cdot 10^{-306}:\\
\;\;\;\;e^{-\left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im + y.re \cdot \log \left(\frac{-1}{x.re}\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;e^{\log x.re \cdot y.re - \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 r22406 = x_re;
double r22407 = r22406 * r22406;
double r22408 = x_im;
double r22409 = r22408 * r22408;
double r22410 = r22407 + r22409;
double r22411 = sqrt(r22410);
double r22412 = log(r22411);
double r22413 = y_re;
double r22414 = r22412 * r22413;
double r22415 = atan2(r22408, r22406);
double r22416 = y_im;
double r22417 = r22415 * r22416;
double r22418 = r22414 - r22417;
double r22419 = exp(r22418);
double r22420 = r22412 * r22416;
double r22421 = r22415 * r22413;
double r22422 = r22420 + r22421;
double r22423 = cos(r22422);
double r22424 = r22419 * r22423;
return r22424;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r22425 = x_re;
double r22426 = -1.2239707999231867e-306;
bool r22427 = r22425 <= r22426;
double r22428 = x_im;
double r22429 = atan2(r22428, r22425);
double r22430 = y_im;
double r22431 = r22429 * r22430;
double r22432 = y_re;
double r22433 = -1.0;
double r22434 = r22433 / r22425;
double r22435 = log(r22434);
double r22436 = r22432 * r22435;
double r22437 = r22431 + r22436;
double r22438 = -r22437;
double r22439 = exp(r22438);
double r22440 = log(r22425);
double r22441 = r22440 * r22432;
double r22442 = r22441 - r22431;
double r22443 = exp(r22442);
double r22444 = r22427 ? r22439 : r22443;
return r22444;
}



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.2239707999231867e-306Initial program 31.5
Taylor expanded around 0 17.9
Taylor expanded around -inf 5.5
if -1.2239707999231867e-306 < x.re Initial program 34.8
Taylor expanded around 0 21.7
Taylor expanded around inf 11.3
Final simplification8.5
herbie shell --seed 2019326
(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)))))