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.360428291412083978958664714231312081813 \cdot 10^{-94}:\\
\;\;\;\;e^{\left(-y.re \cdot \log \left(\frac{-1}{x.re}\right)\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\mathbf{elif}\;x.re \le -1.08720652997282256691096494848101278496 \cdot 10^{-243}:\\
\;\;\;\;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}\\
\mathbf{elif}\;x.re \le -7.882758539051166584794751068711812352655 \cdot 10^{-311}:\\
\;\;\;\;e^{\left(-y.re \cdot \log \left(\frac{-1}{x.re}\right)\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\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 r26604 = x_re;
double r26605 = r26604 * r26604;
double r26606 = x_im;
double r26607 = r26606 * r26606;
double r26608 = r26605 + r26607;
double r26609 = sqrt(r26608);
double r26610 = log(r26609);
double r26611 = y_re;
double r26612 = r26610 * r26611;
double r26613 = atan2(r26606, r26604);
double r26614 = y_im;
double r26615 = r26613 * r26614;
double r26616 = r26612 - r26615;
double r26617 = exp(r26616);
double r26618 = r26610 * r26614;
double r26619 = r26613 * r26611;
double r26620 = r26618 + r26619;
double r26621 = cos(r26620);
double r26622 = r26617 * r26621;
return r26622;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r26623 = x_re;
double r26624 = -1.360428291412084e-94;
bool r26625 = r26623 <= r26624;
double r26626 = y_re;
double r26627 = -1.0;
double r26628 = r26627 / r26623;
double r26629 = log(r26628);
double r26630 = r26626 * r26629;
double r26631 = -r26630;
double r26632 = x_im;
double r26633 = atan2(r26632, r26623);
double r26634 = y_im;
double r26635 = r26633 * r26634;
double r26636 = r26631 - r26635;
double r26637 = exp(r26636);
double r26638 = -1.0872065299728226e-243;
bool r26639 = r26623 <= r26638;
double r26640 = r26623 * r26623;
double r26641 = r26632 * r26632;
double r26642 = r26640 + r26641;
double r26643 = sqrt(r26642);
double r26644 = log(r26643);
double r26645 = r26644 * r26626;
double r26646 = r26645 - r26635;
double r26647 = exp(r26646);
double r26648 = -7.8827585390512e-311;
bool r26649 = r26623 <= r26648;
double r26650 = log(r26623);
double r26651 = r26650 * r26626;
double r26652 = r26651 - r26635;
double r26653 = exp(r26652);
double r26654 = r26649 ? r26637 : r26653;
double r26655 = r26639 ? r26647 : r26654;
double r26656 = r26625 ? r26637 : r26655;
return r26656;
}



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.360428291412084e-94 or -1.0872065299728226e-243 < x.re < -7.8827585390512e-311Initial program 32.5
Taylor expanded around 0 17.7
Taylor expanded around -inf 4.2
Simplified4.2
if -1.360428291412084e-94 < x.re < -1.0872065299728226e-243Initial program 23.9
Taylor expanded around 0 12.4
if -7.8827585390512e-311 < x.re Initial program 34.1
Taylor expanded around 0 21.4
Taylor expanded around inf 11.8
Final simplification9.1
herbie shell --seed 2019212
(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)))))