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 -1.6474711713701992 \cdot 10^{-78}:\\
\;\;\;\;e^{\log \left(-x.re\right) \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\mathbf{elif}\;x.re \le 8950.863112971656:\\
\;\;\;\;e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\mathbf{else}:\\
\;\;\;\;e^{\log x.re \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r611958 = x_re;
double r611959 = r611958 * r611958;
double r611960 = x_im;
double r611961 = r611960 * r611960;
double r611962 = r611959 + r611961;
double r611963 = sqrt(r611962);
double r611964 = log(r611963);
double r611965 = y_re;
double r611966 = r611964 * r611965;
double r611967 = atan2(r611960, r611958);
double r611968 = y_im;
double r611969 = r611967 * r611968;
double r611970 = r611966 - r611969;
double r611971 = exp(r611970);
double r611972 = r611964 * r611968;
double r611973 = r611967 * r611965;
double r611974 = r611972 + r611973;
double r611975 = cos(r611974);
double r611976 = r611971 * r611975;
return r611976;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r611977 = x_re;
double r611978 = -1.6474711713701992e-78;
bool r611979 = r611977 <= r611978;
double r611980 = -r611977;
double r611981 = log(r611980);
double r611982 = y_re;
double r611983 = r611981 * r611982;
double r611984 = y_im;
double r611985 = x_im;
double r611986 = atan2(r611985, r611977);
double r611987 = r611984 * r611986;
double r611988 = r611983 - r611987;
double r611989 = exp(r611988);
double r611990 = 8950.863112971656;
bool r611991 = r611977 <= r611990;
double r611992 = r611977 * r611977;
double r611993 = r611985 * r611985;
double r611994 = r611992 + r611993;
double r611995 = sqrt(r611994);
double r611996 = log(r611995);
double r611997 = r611982 * r611996;
double r611998 = r611997 - r611987;
double r611999 = exp(r611998);
double r612000 = log(r611977);
double r612001 = r612000 * r611982;
double r612002 = r612001 - r611987;
double r612003 = exp(r612002);
double r612004 = r611991 ? r611999 : r612003;
double r612005 = r611979 ? r611989 : r612004;
return r612005;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -1.6474711713701992e-78Initial program 34.3
Taylor expanded around 0 19.0
Taylor expanded around -inf 3.0
Simplified3.0
if -1.6474711713701992e-78 < x.re < 8950.863112971656Initial program 25.4
Taylor expanded around 0 15.1
if 8950.863112971656 < x.re Initial program 44.2
Taylor expanded around 0 27.8
Taylor expanded around inf 10.8
Simplified10.8
Final simplification10.2
herbie shell --seed 2019153
(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)))))