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.3201057596803101 \cdot 10^{-183}:\\
\;\;\;\;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{elif}\;x.re \le 8.59529282784449232 \cdot 10^{-243}:\\
\;\;\;\;\left(\sqrt{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 \sqrt{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}}\right) \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 r13458 = x_re;
double r13459 = r13458 * r13458;
double r13460 = x_im;
double r13461 = r13460 * r13460;
double r13462 = r13459 + r13461;
double r13463 = sqrt(r13462);
double r13464 = log(r13463);
double r13465 = y_re;
double r13466 = r13464 * r13465;
double r13467 = atan2(r13460, r13458);
double r13468 = y_im;
double r13469 = r13467 * r13468;
double r13470 = r13466 - r13469;
double r13471 = exp(r13470);
double r13472 = r13464 * r13468;
double r13473 = r13467 * r13465;
double r13474 = r13472 + r13473;
double r13475 = cos(r13474);
double r13476 = r13471 * r13475;
return r13476;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r13477 = x_re;
double r13478 = -1.3201057596803101e-183;
bool r13479 = r13477 <= r13478;
double r13480 = -1.0;
double r13481 = y_re;
double r13482 = r13480 / r13477;
double r13483 = log(r13482);
double r13484 = r13481 * r13483;
double r13485 = r13480 * r13484;
double r13486 = x_im;
double r13487 = atan2(r13486, r13477);
double r13488 = y_im;
double r13489 = r13487 * r13488;
double r13490 = r13485 - r13489;
double r13491 = exp(r13490);
double r13492 = 1.0;
double r13493 = r13491 * r13492;
double r13494 = 8.595292827844492e-243;
bool r13495 = r13477 <= r13494;
double r13496 = r13477 * r13477;
double r13497 = r13486 * r13486;
double r13498 = r13496 + r13497;
double r13499 = sqrt(r13498);
double r13500 = log(r13499);
double r13501 = r13500 * r13481;
double r13502 = r13501 - r13489;
double r13503 = exp(r13502);
double r13504 = sqrt(r13503);
double r13505 = r13504 * r13504;
double r13506 = r13505 * r13492;
double r13507 = log(r13477);
double r13508 = r13507 * r13481;
double r13509 = r13508 - r13489;
double r13510 = exp(r13509);
double r13511 = r13510 * r13492;
double r13512 = r13495 ? r13506 : r13511;
double r13513 = r13479 ? r13493 : r13512;
return r13513;
}



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.3201057596803101e-183Initial program 32.1
Taylor expanded around 0 18.5
rmApplied add-log-exp34.4
Taylor expanded around -inf 4.8
if -1.3201057596803101e-183 < x.re < 8.595292827844492e-243Initial program 30.9
Taylor expanded around 0 17.9
rmApplied add-sqr-sqrt17.9
if 8.595292827844492e-243 < x.re Initial program 34.8
Taylor expanded around 0 21.8
Taylor expanded around inf 11.7
Final simplification9.9
herbie shell --seed 2020036
(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)))))