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 -4072171339062002700:\\
\;\;\;\;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 -2.6253100013982442 \cdot 10^{-192}:\\
\;\;\;\;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 1\\
\mathbf{elif}\;x.re \le -3.930338480162884 \cdot 10^{-306}:\\
\;\;\;\;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 7.70320127032890905 \cdot 10^{-219}:\\
\;\;\;\;e^{\log x.re \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\
\mathbf{elif}\;x.re \le 2.45247147788711763 \cdot 10^{-110}:\\
\;\;\;\;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 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 r18730 = x_re;
double r18731 = r18730 * r18730;
double r18732 = x_im;
double r18733 = r18732 * r18732;
double r18734 = r18731 + r18733;
double r18735 = sqrt(r18734);
double r18736 = log(r18735);
double r18737 = y_re;
double r18738 = r18736 * r18737;
double r18739 = atan2(r18732, r18730);
double r18740 = y_im;
double r18741 = r18739 * r18740;
double r18742 = r18738 - r18741;
double r18743 = exp(r18742);
double r18744 = r18736 * r18740;
double r18745 = r18739 * r18737;
double r18746 = r18744 + r18745;
double r18747 = cos(r18746);
double r18748 = r18743 * r18747;
return r18748;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r18749 = x_re;
double r18750 = -4.0721713390620027e+18;
bool r18751 = r18749 <= r18750;
double r18752 = -1.0;
double r18753 = y_re;
double r18754 = r18752 / r18749;
double r18755 = log(r18754);
double r18756 = r18753 * r18755;
double r18757 = r18752 * r18756;
double r18758 = x_im;
double r18759 = atan2(r18758, r18749);
double r18760 = y_im;
double r18761 = r18759 * r18760;
double r18762 = r18757 - r18761;
double r18763 = exp(r18762);
double r18764 = 1.0;
double r18765 = r18763 * r18764;
double r18766 = -2.6253100013982442e-192;
bool r18767 = r18749 <= r18766;
double r18768 = r18749 * r18749;
double r18769 = r18758 * r18758;
double r18770 = r18768 + r18769;
double r18771 = sqrt(r18770);
double r18772 = log(r18771);
double r18773 = r18772 * r18753;
double r18774 = r18773 - r18761;
double r18775 = exp(r18774);
double r18776 = r18775 * r18764;
double r18777 = -3.930338480162884e-306;
bool r18778 = r18749 <= r18777;
double r18779 = 7.703201270328909e-219;
bool r18780 = r18749 <= r18779;
double r18781 = log(r18749);
double r18782 = r18781 * r18753;
double r18783 = r18782 - r18761;
double r18784 = exp(r18783);
double r18785 = r18784 * r18764;
double r18786 = 2.4524714778871176e-110;
bool r18787 = r18749 <= r18786;
double r18788 = r18787 ? r18776 : r18785;
double r18789 = r18780 ? r18785 : r18788;
double r18790 = r18778 ? r18765 : r18789;
double r18791 = r18767 ? r18776 : r18790;
double r18792 = r18751 ? r18765 : r18791;
return r18792;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -4.0721713390620027e+18 or -2.6253100013982442e-192 < x.re < -3.930338480162884e-306Initial program 37.9
Taylor expanded around 0 20.0
Taylor expanded around -inf 3.7
if -4.0721713390620027e+18 < x.re < -2.6253100013982442e-192 or 7.703201270328909e-219 < x.re < 2.4524714778871176e-110Initial program 19.7
Taylor expanded around 0 11.1
if -3.930338480162884e-306 < x.re < 7.703201270328909e-219 or 2.4524714778871176e-110 < x.re Initial program 36.2
Taylor expanded around 0 23.3
Taylor expanded around inf 11.7
Final simplification9.0
herbie shell --seed 2020060
(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)))))