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 r16907 = x_re;
double r16908 = r16907 * r16907;
double r16909 = x_im;
double r16910 = r16909 * r16909;
double r16911 = r16908 + r16910;
double r16912 = sqrt(r16911);
double r16913 = log(r16912);
double r16914 = y_re;
double r16915 = r16913 * r16914;
double r16916 = atan2(r16909, r16907);
double r16917 = y_im;
double r16918 = r16916 * r16917;
double r16919 = r16915 - r16918;
double r16920 = exp(r16919);
double r16921 = r16913 * r16917;
double r16922 = r16916 * r16914;
double r16923 = r16921 + r16922;
double r16924 = cos(r16923);
double r16925 = r16920 * r16924;
return r16925;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r16926 = x_re;
double r16927 = -6.451247643666555e+153;
bool r16928 = r16926 <= r16927;
double r16929 = -1.0;
double r16930 = r16929 * r16926;
double r16931 = log(r16930);
double r16932 = y_re;
double r16933 = r16931 * r16932;
double r16934 = x_im;
double r16935 = atan2(r16934, r16926);
double r16936 = y_im;
double r16937 = r16935 * r16936;
double r16938 = r16933 - r16937;
double r16939 = exp(r16938);
double r16940 = 1.0;
double r16941 = r16939 * r16940;
double r16942 = -3.011667906396995e-159;
bool r16943 = r16926 <= r16942;
double r16944 = r16926 * r16926;
double r16945 = r16934 * r16934;
double r16946 = r16944 + r16945;
double r16947 = sqrt(r16946);
double r16948 = log(r16947);
double r16949 = r16948 * r16932;
double r16950 = r16949 - r16937;
double r16951 = exp(r16950);
double r16952 = r16951 * r16940;
double r16953 = -1.1974408710008e-310;
bool r16954 = r16926 <= r16953;
double r16955 = log(r16926);
double r16956 = r16955 * r16932;
double r16957 = r16956 - r16937;
double r16958 = exp(r16957);
double r16959 = r16958 * r16940;
double r16960 = r16954 ? r16941 : r16959;
double r16961 = r16943 ? r16952 : r16960;
double r16962 = r16928 ? r16941 : r16961;
return r16962;
}



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)))))