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 -6.451247643666555047151411443244956267451 \cdot 10^{153}:\\
\;\;\;\;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 -3.011667906396995080273534682604245406099 \cdot 10^{-159}:\\
\;\;\;\;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 -1.197440871000797137827287021764707966827 \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 r16937 = x_re;
double r16938 = r16937 * r16937;
double r16939 = x_im;
double r16940 = r16939 * r16939;
double r16941 = r16938 + r16940;
double r16942 = sqrt(r16941);
double r16943 = log(r16942);
double r16944 = y_re;
double r16945 = r16943 * r16944;
double r16946 = atan2(r16939, r16937);
double r16947 = y_im;
double r16948 = r16946 * r16947;
double r16949 = r16945 - r16948;
double r16950 = exp(r16949);
double r16951 = r16943 * r16947;
double r16952 = r16946 * r16944;
double r16953 = r16951 + r16952;
double r16954 = cos(r16953);
double r16955 = r16950 * r16954;
return r16955;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r16956 = x_re;
double r16957 = -6.451247643666555e+153;
bool r16958 = r16956 <= r16957;
double r16959 = -1.0;
double r16960 = r16959 * r16956;
double r16961 = log(r16960);
double r16962 = y_re;
double r16963 = r16961 * r16962;
double r16964 = x_im;
double r16965 = atan2(r16964, r16956);
double r16966 = y_im;
double r16967 = r16965 * r16966;
double r16968 = r16963 - r16967;
double r16969 = exp(r16968);
double r16970 = 1.0;
double r16971 = r16969 * r16970;
double r16972 = -3.011667906396995e-159;
bool r16973 = r16956 <= r16972;
double r16974 = r16956 * r16956;
double r16975 = r16964 * r16964;
double r16976 = r16974 + r16975;
double r16977 = sqrt(r16976);
double r16978 = log(r16977);
double r16979 = r16978 * r16962;
double r16980 = r16979 - r16967;
double r16981 = exp(r16980);
double r16982 = r16981 * r16970;
double r16983 = -1.1974408710008e-310;
bool r16984 = r16956 <= r16983;
double r16985 = log(r16956);
double r16986 = r16985 * r16962;
double r16987 = r16986 - r16967;
double r16988 = exp(r16987);
double r16989 = r16988 * r16970;
double r16990 = r16984 ? r16971 : r16989;
double r16991 = r16973 ? r16982 : r16990;
double r16992 = r16958 ? r16971 : r16991;
return r16992;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -6.451247643666555e+153 or -3.011667906396995e-159 < x.re < -1.1974408710008e-310Initial program 48.1
Taylor expanded around 0 27.0
Taylor expanded around -inf 5.3
if -6.451247643666555e+153 < x.re < -3.011667906396995e-159Initial program 16.6
Taylor expanded around 0 10.2
if -1.1974408710008e-310 < x.re Initial program 33.9
Taylor expanded around 0 21.3
Taylor expanded around inf 11.4
Final simplification9.6
herbie shell --seed 2020001
(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)))))