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 -4.9835237568442066 \cdot 10^{-17}:\\
\;\;\;\;e^{\log \left(-x.re\right) \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\mathbf{elif}\;x.re \le -3.7737597763103814 \cdot 10^{-161}:\\
\;\;\;\;\left(\left(\sqrt[3]{\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)} \cdot \sqrt[3]{\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)}\right) \cdot \sqrt[3]{\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)}\right) \cdot 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{elif}\;x.re \le -1.91205330543206 \cdot 10^{-310}:\\
\;\;\;\;e^{\log \left(-x.re\right) \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\mathbf{elif}\;x.re \le 9.798541471285326 \cdot 10^{-63}:\\
\;\;\;\;e^{y.re \cdot \log x.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\mathbf{elif}\;x.re \le 3.102132787630003 \cdot 10^{-33}:\\
\;\;\;\;e^{\log \left(\log \left(e^{\sqrt{x.re \cdot x.re + x.im \cdot x.im}}\right)\right) \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\mathbf{else}:\\
\;\;\;\;e^{y.re \cdot \log x.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 r1374987 = x_re;
double r1374988 = r1374987 * r1374987;
double r1374989 = x_im;
double r1374990 = r1374989 * r1374989;
double r1374991 = r1374988 + r1374990;
double r1374992 = sqrt(r1374991);
double r1374993 = log(r1374992);
double r1374994 = y_re;
double r1374995 = r1374993 * r1374994;
double r1374996 = atan2(r1374989, r1374987);
double r1374997 = y_im;
double r1374998 = r1374996 * r1374997;
double r1374999 = r1374995 - r1374998;
double r1375000 = exp(r1374999);
double r1375001 = r1374993 * r1374997;
double r1375002 = r1374996 * r1374994;
double r1375003 = r1375001 + r1375002;
double r1375004 = cos(r1375003);
double r1375005 = r1375000 * r1375004;
return r1375005;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1375006 = x_re;
double r1375007 = -4.9835237568442066e-17;
bool r1375008 = r1375006 <= r1375007;
double r1375009 = -r1375006;
double r1375010 = log(r1375009);
double r1375011 = y_re;
double r1375012 = r1375010 * r1375011;
double r1375013 = y_im;
double r1375014 = x_im;
double r1375015 = atan2(r1375014, r1375006);
double r1375016 = r1375013 * r1375015;
double r1375017 = r1375012 - r1375016;
double r1375018 = exp(r1375017);
double r1375019 = -3.7737597763103814e-161;
bool r1375020 = r1375006 <= r1375019;
double r1375021 = r1375006 * r1375006;
double r1375022 = r1375014 * r1375014;
double r1375023 = r1375021 + r1375022;
double r1375024 = sqrt(r1375023);
double r1375025 = log(r1375024);
double r1375026 = r1375025 * r1375013;
double r1375027 = r1375015 * r1375011;
double r1375028 = r1375026 + r1375027;
double r1375029 = cos(r1375028);
double r1375030 = cbrt(r1375029);
double r1375031 = r1375030 * r1375030;
double r1375032 = r1375031 * r1375030;
double r1375033 = r1375011 * r1375025;
double r1375034 = r1375033 - r1375016;
double r1375035 = exp(r1375034);
double r1375036 = r1375032 * r1375035;
double r1375037 = -1.91205330543206e-310;
bool r1375038 = r1375006 <= r1375037;
double r1375039 = 9.798541471285326e-63;
bool r1375040 = r1375006 <= r1375039;
double r1375041 = log(r1375006);
double r1375042 = r1375011 * r1375041;
double r1375043 = r1375042 - r1375016;
double r1375044 = exp(r1375043);
double r1375045 = 3.102132787630003e-33;
bool r1375046 = r1375006 <= r1375045;
double r1375047 = exp(r1375024);
double r1375048 = log(r1375047);
double r1375049 = log(r1375048);
double r1375050 = r1375049 * r1375011;
double r1375051 = r1375050 - r1375016;
double r1375052 = exp(r1375051);
double r1375053 = r1375046 ? r1375052 : r1375044;
double r1375054 = r1375040 ? r1375044 : r1375053;
double r1375055 = r1375038 ? r1375018 : r1375054;
double r1375056 = r1375020 ? r1375036 : r1375055;
double r1375057 = r1375008 ? r1375018 : r1375056;
return r1375057;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -4.9835237568442066e-17 or -3.7737597763103814e-161 < x.re < -1.91205330543206e-310Initial program 35.6
Taylor expanded around 0 19.4
Taylor expanded around -inf 4.3
Simplified4.3
if -4.9835237568442066e-17 < x.re < -3.7737597763103814e-161Initial program 15.1
rmApplied add-cube-cbrt15.1
if -1.91205330543206e-310 < x.re < 9.798541471285326e-63 or 3.102132787630003e-33 < x.re Initial program 35.2
Taylor expanded around 0 22.2
Taylor expanded around inf 11.5
if 9.798541471285326e-63 < x.re < 3.102132787630003e-33Initial program 20.5
Taylor expanded around 0 13.9
rmApplied add-log-exp32.0
Final simplification9.7
herbie shell --seed 2019165
(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)))))