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 r22391 = x_re;
double r22392 = r22391 * r22391;
double r22393 = x_im;
double r22394 = r22393 * r22393;
double r22395 = r22392 + r22394;
double r22396 = sqrt(r22395);
double r22397 = log(r22396);
double r22398 = y_re;
double r22399 = r22397 * r22398;
double r22400 = atan2(r22393, r22391);
double r22401 = y_im;
double r22402 = r22400 * r22401;
double r22403 = r22399 - r22402;
double r22404 = exp(r22403);
double r22405 = r22397 * r22401;
double r22406 = r22400 * r22398;
double r22407 = r22405 + r22406;
double r22408 = cos(r22407);
double r22409 = r22404 * r22408;
return r22409;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r22410 = x_re;
double r22411 = -1.2239707999231867e-306;
bool r22412 = r22410 <= r22411;
double r22413 = x_im;
double r22414 = atan2(r22413, r22410);
double r22415 = y_im;
double r22416 = r22414 * r22415;
double r22417 = y_re;
double r22418 = -1.0;
double r22419 = r22418 / r22410;
double r22420 = log(r22419);
double r22421 = r22417 * r22420;
double r22422 = r22416 + r22421;
double r22423 = -r22422;
double r22424 = exp(r22423);
double r22425 = log(r22410);
double r22426 = r22425 * r22417;
double r22427 = r22426 - r22416;
double r22428 = exp(r22427);
double r22429 = r22412 ? r22424 : r22428;
return r22429;
}



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)))))