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^{\log \left(-1 \cdot x.re\right) \cdot y.re - \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^{\log \left(-1 \cdot x.re\right) \cdot y.re - \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 r18694 = x_re;
double r18695 = r18694 * r18694;
double r18696 = x_im;
double r18697 = r18696 * r18696;
double r18698 = r18695 + r18697;
double r18699 = sqrt(r18698);
double r18700 = log(r18699);
double r18701 = y_re;
double r18702 = r18700 * r18701;
double r18703 = atan2(r18696, r18694);
double r18704 = y_im;
double r18705 = r18703 * r18704;
double r18706 = r18702 - r18705;
double r18707 = exp(r18706);
double r18708 = r18700 * r18704;
double r18709 = r18703 * r18701;
double r18710 = r18708 + r18709;
double r18711 = cos(r18710);
double r18712 = r18707 * r18711;
return r18712;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r18713 = x_re;
double r18714 = -4.0721713390620027e+18;
bool r18715 = r18713 <= r18714;
double r18716 = -1.0;
double r18717 = r18716 * r18713;
double r18718 = log(r18717);
double r18719 = y_re;
double r18720 = r18718 * r18719;
double r18721 = x_im;
double r18722 = atan2(r18721, r18713);
double r18723 = y_im;
double r18724 = r18722 * r18723;
double r18725 = r18720 - r18724;
double r18726 = exp(r18725);
double r18727 = 1.0;
double r18728 = r18726 * r18727;
double r18729 = -2.6253100013982442e-192;
bool r18730 = r18713 <= r18729;
double r18731 = r18713 * r18713;
double r18732 = r18721 * r18721;
double r18733 = r18731 + r18732;
double r18734 = sqrt(r18733);
double r18735 = log(r18734);
double r18736 = r18735 * r18719;
double r18737 = r18736 - r18724;
double r18738 = exp(r18737);
double r18739 = r18738 * r18727;
double r18740 = -3.930338480162884e-306;
bool r18741 = r18713 <= r18740;
double r18742 = 7.703201270328909e-219;
bool r18743 = r18713 <= r18742;
double r18744 = log(r18713);
double r18745 = r18744 * r18719;
double r18746 = r18745 - r18724;
double r18747 = exp(r18746);
double r18748 = r18747 * r18727;
double r18749 = 2.4524714778871176e-110;
bool r18750 = r18713 <= r18749;
double r18751 = r18750 ? r18739 : r18748;
double r18752 = r18743 ? r18748 : r18751;
double r18753 = r18741 ? r18728 : r18752;
double r18754 = r18730 ? r18739 : r18753;
double r18755 = r18715 ? r18728 : r18754;
return r18755;
}



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