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 -3.399414102754597 \cdot 10^{-310}:\\
\;\;\;\;e^{\log \left(-1 \cdot x.re\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 r12791 = x_re;
double r12792 = r12791 * r12791;
double r12793 = x_im;
double r12794 = r12793 * r12793;
double r12795 = r12792 + r12794;
double r12796 = sqrt(r12795);
double r12797 = log(r12796);
double r12798 = y_re;
double r12799 = r12797 * r12798;
double r12800 = atan2(r12793, r12791);
double r12801 = y_im;
double r12802 = r12800 * r12801;
double r12803 = r12799 - r12802;
double r12804 = exp(r12803);
double r12805 = r12797 * r12801;
double r12806 = r12800 * r12798;
double r12807 = r12805 + r12806;
double r12808 = cos(r12807);
double r12809 = r12804 * r12808;
return r12809;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r12810 = x_re;
double r12811 = -3.3994141027546e-310;
bool r12812 = r12810 <= r12811;
double r12813 = -1.0;
double r12814 = r12813 * r12810;
double r12815 = log(r12814);
double r12816 = y_re;
double r12817 = r12815 * r12816;
double r12818 = x_im;
double r12819 = atan2(r12818, r12810);
double r12820 = y_im;
double r12821 = r12819 * r12820;
double r12822 = r12817 - r12821;
double r12823 = exp(r12822);
double r12824 = 1.0;
double r12825 = r12823 * r12824;
double r12826 = log(r12810);
double r12827 = r12826 * r12816;
double r12828 = r12827 - r12821;
double r12829 = exp(r12828);
double r12830 = r12829 * r12824;
double r12831 = r12812 ? r12825 : r12830;
return r12831;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -3.3994141027546e-310Initial program 31.4
Taylor expanded around 0 17.2
Taylor expanded around -inf 5.9
if -3.3994141027546e-310 < x.re Initial program 35.5
Taylor expanded around 0 21.7
Taylor expanded around inf 11.8
Final simplification8.9
herbie shell --seed 2020027
(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)))))