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 -2.146450452549868524259492464762852770772 \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{elif}\;x.re \le 6.5789325898258705052676368909500570542 \cdot 10^{-122}:\\
\;\;\;\;e^{\log x.re \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\
\mathbf{elif}\;x.re \le 0.01997829963468996522513165814416424836963:\\
\;\;\;\;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 r20975 = x_re;
double r20976 = r20975 * r20975;
double r20977 = x_im;
double r20978 = r20977 * r20977;
double r20979 = r20976 + r20978;
double r20980 = sqrt(r20979);
double r20981 = log(r20980);
double r20982 = y_re;
double r20983 = r20981 * r20982;
double r20984 = atan2(r20977, r20975);
double r20985 = y_im;
double r20986 = r20984 * r20985;
double r20987 = r20983 - r20986;
double r20988 = exp(r20987);
double r20989 = r20981 * r20985;
double r20990 = r20984 * r20982;
double r20991 = r20989 + r20990;
double r20992 = cos(r20991);
double r20993 = r20988 * r20992;
return r20993;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r20994 = x_re;
double r20995 = -2.14645045254987e-310;
bool r20996 = r20994 <= r20995;
double r20997 = -1.0;
double r20998 = r20997 * r20994;
double r20999 = log(r20998);
double r21000 = y_re;
double r21001 = r20999 * r21000;
double r21002 = x_im;
double r21003 = atan2(r21002, r20994);
double r21004 = y_im;
double r21005 = r21003 * r21004;
double r21006 = r21001 - r21005;
double r21007 = exp(r21006);
double r21008 = 1.0;
double r21009 = r21007 * r21008;
double r21010 = 6.57893258982587e-122;
bool r21011 = r20994 <= r21010;
double r21012 = log(r20994);
double r21013 = r21012 * r21000;
double r21014 = r21013 - r21005;
double r21015 = exp(r21014);
double r21016 = r21015 * r21008;
double r21017 = 0.019978299634689965;
bool r21018 = r20994 <= r21017;
double r21019 = r20994 * r20994;
double r21020 = r21002 * r21002;
double r21021 = r21019 + r21020;
double r21022 = sqrt(r21021);
double r21023 = log(r21022);
double r21024 = r21023 * r21000;
double r21025 = r21024 - r21005;
double r21026 = exp(r21025);
double r21027 = r21026 * r21008;
double r21028 = r21018 ? r21027 : r21016;
double r21029 = r21011 ? r21016 : r21028;
double r21030 = r20996 ? r21009 : r21029;
return r21030;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -2.14645045254987e-310Initial program 31.0
Taylor expanded around 0 18.3
Taylor expanded around -inf 6.0
if -2.14645045254987e-310 < x.re < 6.57893258982587e-122 or 0.019978299634689965 < x.re Initial program 37.7
Taylor expanded around 0 23.3
Taylor expanded around inf 10.1
if 6.57893258982587e-122 < x.re < 0.019978299634689965Initial program 19.3
Taylor expanded around 0 11.1
Final simplification8.2
herbie shell --seed 2019294
(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)))))