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 -502608337644955597407793446912:\\
\;\;\;\;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 -7.648828033871659839819848012863284741258 \cdot 10^{-153}:\\
\;\;\;\;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 -4.396524045590289645323160750057275973793 \cdot 10^{-206}:\\
\;\;\;\;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 1.532410043993753832903085741348381390706 \cdot 10^{-42}:\\
\;\;\;\;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^{-1 \cdot \left(y.re \cdot \log \left(\frac{1}{x.re}\right)\right) - \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 r12895 = x_re;
double r12896 = r12895 * r12895;
double r12897 = x_im;
double r12898 = r12897 * r12897;
double r12899 = r12896 + r12898;
double r12900 = sqrt(r12899);
double r12901 = log(r12900);
double r12902 = y_re;
double r12903 = r12901 * r12902;
double r12904 = atan2(r12897, r12895);
double r12905 = y_im;
double r12906 = r12904 * r12905;
double r12907 = r12903 - r12906;
double r12908 = exp(r12907);
double r12909 = r12901 * r12905;
double r12910 = r12904 * r12902;
double r12911 = r12909 + r12910;
double r12912 = cos(r12911);
double r12913 = r12908 * r12912;
return r12913;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r12914 = x_re;
double r12915 = -5.026083376449556e+29;
bool r12916 = r12914 <= r12915;
double r12917 = -1.0;
double r12918 = r12917 * r12914;
double r12919 = log(r12918);
double r12920 = y_re;
double r12921 = r12919 * r12920;
double r12922 = x_im;
double r12923 = atan2(r12922, r12914);
double r12924 = y_im;
double r12925 = r12923 * r12924;
double r12926 = r12921 - r12925;
double r12927 = exp(r12926);
double r12928 = 1.0;
double r12929 = r12927 * r12928;
double r12930 = -7.64882803387166e-153;
bool r12931 = r12914 <= r12930;
double r12932 = r12914 * r12914;
double r12933 = r12922 * r12922;
double r12934 = r12932 + r12933;
double r12935 = sqrt(r12934);
double r12936 = log(r12935);
double r12937 = r12936 * r12920;
double r12938 = r12937 - r12925;
double r12939 = exp(r12938);
double r12940 = r12939 * r12928;
double r12941 = -4.3965240455902896e-206;
bool r12942 = r12914 <= r12941;
double r12943 = 1.5324100439937538e-42;
bool r12944 = r12914 <= r12943;
double r12945 = r12928 / r12914;
double r12946 = log(r12945);
double r12947 = r12920 * r12946;
double r12948 = r12917 * r12947;
double r12949 = r12948 - r12925;
double r12950 = exp(r12949);
double r12951 = r12950 * r12928;
double r12952 = r12944 ? r12940 : r12951;
double r12953 = r12942 ? r12929 : r12952;
double r12954 = r12931 ? r12940 : r12953;
double r12955 = r12916 ? r12929 : r12954;
return r12955;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -5.026083376449556e+29 or -7.64882803387166e-153 < x.re < -4.3965240455902896e-206Initial program 39.2
Taylor expanded around 0 22.2
Taylor expanded around -inf 2.2
if -5.026083376449556e+29 < x.re < -7.64882803387166e-153 or -4.3965240455902896e-206 < x.re < 1.5324100439937538e-42Initial program 23.3
Taylor expanded around 0 13.2
if 1.5324100439937538e-42 < x.re Initial program 41.3
Taylor expanded around 0 27.0
rmApplied exp-diff28.8
Simplified28.8
Taylor expanded around inf 14.3
Simplified11.6
Final simplification9.8
herbie shell --seed 2019347
(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)))))