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.340045005672196694155106662820309757076 \cdot 10^{-23}:\\
\;\;\;\;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 -2.997344712807687659670489329095943021743 \cdot 10^{-193}:\\
\;\;\;\;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.945722595037461298301930831329184038453 \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 r10880 = x_re;
double r10881 = r10880 * r10880;
double r10882 = x_im;
double r10883 = r10882 * r10882;
double r10884 = r10881 + r10883;
double r10885 = sqrt(r10884);
double r10886 = log(r10885);
double r10887 = y_re;
double r10888 = r10886 * r10887;
double r10889 = atan2(r10882, r10880);
double r10890 = y_im;
double r10891 = r10889 * r10890;
double r10892 = r10888 - r10891;
double r10893 = exp(r10892);
double r10894 = r10886 * r10890;
double r10895 = r10889 * r10887;
double r10896 = r10894 + r10895;
double r10897 = cos(r10896);
double r10898 = r10893 * r10897;
return r10898;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r10899 = x_re;
double r10900 = -1.3400450056721967e-23;
bool r10901 = r10899 <= r10900;
double r10902 = -1.0;
double r10903 = r10902 * r10899;
double r10904 = log(r10903);
double r10905 = y_re;
double r10906 = r10904 * r10905;
double r10907 = x_im;
double r10908 = atan2(r10907, r10899);
double r10909 = y_im;
double r10910 = r10908 * r10909;
double r10911 = r10906 - r10910;
double r10912 = exp(r10911);
double r10913 = 1.0;
double r10914 = r10912 * r10913;
double r10915 = -2.9973447128076877e-193;
bool r10916 = r10899 <= r10915;
double r10917 = r10899 * r10899;
double r10918 = r10907 * r10907;
double r10919 = r10917 + r10918;
double r10920 = sqrt(r10919);
double r10921 = log(r10920);
double r10922 = r10921 * r10905;
double r10923 = r10922 - r10910;
double r10924 = exp(r10923);
double r10925 = r10924 * r10913;
double r10926 = 1.94572259503746e-310;
bool r10927 = r10899 <= r10926;
double r10928 = log(r10899);
double r10929 = r10928 * r10905;
double r10930 = r10929 - r10910;
double r10931 = exp(r10930);
double r10932 = r10931 * r10913;
double r10933 = r10927 ? r10914 : r10932;
double r10934 = r10916 ? r10925 : r10933;
double r10935 = r10901 ? r10914 : r10934;
return r10935;
}



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.3400450056721967e-23 or -2.9973447128076877e-193 < x.re < 1.94572259503746e-310Initial program 37.0
Taylor expanded around 0 21.1
Taylor expanded around -inf 4.3
if -1.3400450056721967e-23 < x.re < -2.9973447128076877e-193Initial program 20.4
Taylor expanded around 0 11.1
if 1.94572259503746e-310 < x.re Initial program 35.0
Taylor expanded around 0 22.7
Taylor expanded around inf 11.9
Final simplification9.1
herbie shell --seed 2019346
(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)))))