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}\;y.re \le -30544786076676.133:\\
\;\;\;\;e^{\log \left(\sqrt{x.im \cdot x.im + x.re \cdot x.re}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\mathbf{else}:\\
\;\;\;\;e^{y.re \cdot \log \left(-x.re\right) - \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 r565990 = x_re;
double r565991 = r565990 * r565990;
double r565992 = x_im;
double r565993 = r565992 * r565992;
double r565994 = r565991 + r565993;
double r565995 = sqrt(r565994);
double r565996 = log(r565995);
double r565997 = y_re;
double r565998 = r565996 * r565997;
double r565999 = atan2(r565992, r565990);
double r566000 = y_im;
double r566001 = r565999 * r566000;
double r566002 = r565998 - r566001;
double r566003 = exp(r566002);
double r566004 = r565996 * r566000;
double r566005 = r565999 * r565997;
double r566006 = r566004 + r566005;
double r566007 = cos(r566006);
double r566008 = r566003 * r566007;
return r566008;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r566009 = y_re;
double r566010 = -30544786076676.133;
bool r566011 = r566009 <= r566010;
double r566012 = x_im;
double r566013 = r566012 * r566012;
double r566014 = x_re;
double r566015 = r566014 * r566014;
double r566016 = r566013 + r566015;
double r566017 = sqrt(r566016);
double r566018 = log(r566017);
double r566019 = r566018 * r566009;
double r566020 = atan2(r566012, r566014);
double r566021 = y_im;
double r566022 = r566020 * r566021;
double r566023 = r566019 - r566022;
double r566024 = exp(r566023);
double r566025 = -r566014;
double r566026 = log(r566025);
double r566027 = r566009 * r566026;
double r566028 = r566027 - r566022;
double r566029 = exp(r566028);
double r566030 = r566011 ? r566024 : r566029;
return r566030;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.re < -30544786076676.133Initial program 37.3
Taylor expanded around 0 0
if -30544786076676.133 < y.re Initial program 28.3
Taylor expanded around 0 25.3
Taylor expanded around -inf 0.5
Simplified0.5
Final simplification0.4
herbie shell --seed 2019121
(FPCore (x.re x.im y.re y.im)
:name "powComplex, real part"
(* (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)))))