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 -7.9022398022615509 \cdot 10^{-11}:\\
\;\;\;\;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\\
\mathbf{elif}\;x.re \le -3.92599276721330252 \cdot 10^{-252}:\\
\;\;\;\;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 -5.53876614394108532 \cdot 10^{-295}:\\
\;\;\;\;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\\
\mathbf{elif}\;x.re \le 8.49194308205463702 \cdot 10^{-233}:\\
\;\;\;\;\frac{\frac{e^{-\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}}{\sqrt[3]{{\left(\frac{1}{x.re}\right)}^{y.re}} \cdot \sqrt[3]{{\left(\frac{1}{x.re}\right)}^{y.re}}}}{\sqrt[3]{{\left(\frac{1}{x.re}\right)}^{y.re}}} \cdot 1\\
\mathbf{elif}\;x.re \le 5.38109684134316772 \cdot 10^{-111}:\\
\;\;\;\;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}:\\
\;\;\;\;\frac{\frac{e^{-\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}}{\sqrt[3]{{\left(\frac{1}{x.re}\right)}^{y.re}} \cdot \sqrt[3]{{\left(\frac{1}{x.re}\right)}^{y.re}}}}{\sqrt[3]{{\left(\frac{1}{x.re}\right)}^{y.re}}} \cdot 1\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r17989 = x_re;
double r17990 = r17989 * r17989;
double r17991 = x_im;
double r17992 = r17991 * r17991;
double r17993 = r17990 + r17992;
double r17994 = sqrt(r17993);
double r17995 = log(r17994);
double r17996 = y_re;
double r17997 = r17995 * r17996;
double r17998 = atan2(r17991, r17989);
double r17999 = y_im;
double r18000 = r17998 * r17999;
double r18001 = r17997 - r18000;
double r18002 = exp(r18001);
double r18003 = r17995 * r17999;
double r18004 = r17998 * r17996;
double r18005 = r18003 + r18004;
double r18006 = cos(r18005);
double r18007 = r18002 * r18006;
return r18007;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r18008 = x_re;
double r18009 = -7.902239802261551e-11;
bool r18010 = r18008 <= r18009;
double r18011 = -1.0;
double r18012 = y_re;
double r18013 = r18011 / r18008;
double r18014 = log(r18013);
double r18015 = r18012 * r18014;
double r18016 = r18011 * r18015;
double r18017 = x_im;
double r18018 = atan2(r18017, r18008);
double r18019 = y_im;
double r18020 = r18018 * r18019;
double r18021 = r18016 - r18020;
double r18022 = exp(r18021);
double r18023 = 1.0;
double r18024 = r18022 * r18023;
double r18025 = -3.9259927672133025e-252;
bool r18026 = r18008 <= r18025;
double r18027 = r18008 * r18008;
double r18028 = r18017 * r18017;
double r18029 = r18027 + r18028;
double r18030 = sqrt(r18029);
double r18031 = log(r18030);
double r18032 = r18031 * r18012;
double r18033 = r18032 - r18020;
double r18034 = exp(r18033);
double r18035 = r18034 * r18023;
double r18036 = -5.538766143941085e-295;
bool r18037 = r18008 <= r18036;
double r18038 = 8.491943082054637e-233;
bool r18039 = r18008 <= r18038;
double r18040 = -r18020;
double r18041 = exp(r18040);
double r18042 = r18023 / r18008;
double r18043 = pow(r18042, r18012);
double r18044 = cbrt(r18043);
double r18045 = r18044 * r18044;
double r18046 = r18041 / r18045;
double r18047 = r18046 / r18044;
double r18048 = r18047 * r18023;
double r18049 = 5.381096841343168e-111;
bool r18050 = r18008 <= r18049;
double r18051 = r18050 ? r18035 : r18048;
double r18052 = r18039 ? r18048 : r18051;
double r18053 = r18037 ? r18024 : r18052;
double r18054 = r18026 ? r18035 : r18053;
double r18055 = r18010 ? r18024 : r18054;
return r18055;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -7.902239802261551e-11 or -3.9259927672133025e-252 < x.re < -5.538766143941085e-295Initial program 37.8
Taylor expanded around 0 20.6
Taylor expanded around -inf 3.0
if -7.902239802261551e-11 < x.re < -3.9259927672133025e-252 or 8.491943082054637e-233 < x.re < 5.381096841343168e-111Initial program 23.6
Taylor expanded around 0 13.7
if -5.538766143941085e-295 < x.re < 8.491943082054637e-233 or 5.381096841343168e-111 < x.re Initial program 35.9
Taylor expanded around 0 21.9
Taylor expanded around inf 12.2
Simplified14.7
rmApplied add-cube-cbrt14.7
Applied associate-/r*14.7
Final simplification11.2
herbie shell --seed 2020003
(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)))))