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.178078840228313 \cdot 10^{-285}:\\
\;\;\;\;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 4.19036149760128664 \cdot 10^{-30}:\\
\;\;\;\;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^{\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 r11972 = x_re;
double r11973 = r11972 * r11972;
double r11974 = x_im;
double r11975 = r11974 * r11974;
double r11976 = r11973 + r11975;
double r11977 = sqrt(r11976);
double r11978 = log(r11977);
double r11979 = y_re;
double r11980 = r11978 * r11979;
double r11981 = atan2(r11974, r11972);
double r11982 = y_im;
double r11983 = r11981 * r11982;
double r11984 = r11980 - r11983;
double r11985 = exp(r11984);
double r11986 = r11978 * r11982;
double r11987 = r11981 * r11979;
double r11988 = r11986 + r11987;
double r11989 = cos(r11988);
double r11990 = r11985 * r11989;
return r11990;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r11991 = x_re;
double r11992 = -1.178078840228313e-285;
bool r11993 = r11991 <= r11992;
double r11994 = -1.0;
double r11995 = y_re;
double r11996 = r11994 / r11991;
double r11997 = log(r11996);
double r11998 = r11995 * r11997;
double r11999 = r11994 * r11998;
double r12000 = x_im;
double r12001 = atan2(r12000, r11991);
double r12002 = y_im;
double r12003 = r12001 * r12002;
double r12004 = r11999 - r12003;
double r12005 = exp(r12004);
double r12006 = 1.0;
double r12007 = r12005 * r12006;
double r12008 = 4.1903614976012866e-30;
bool r12009 = r11991 <= r12008;
double r12010 = r11991 * r11991;
double r12011 = r12000 * r12000;
double r12012 = r12010 + r12011;
double r12013 = sqrt(r12012);
double r12014 = log(r12013);
double r12015 = r12014 * r11995;
double r12016 = r12015 - r12003;
double r12017 = exp(r12016);
double r12018 = r12017 * r12006;
double r12019 = log(r11991);
double r12020 = r12019 * r11995;
double r12021 = r12020 - r12003;
double r12022 = exp(r12021);
double r12023 = r12022 * r12006;
double r12024 = r12009 ? r12018 : r12023;
double r12025 = r11993 ? r12007 : r12024;
return r12025;
}



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.178078840228313e-285Initial program 31.3
Taylor expanded around 0 18.2
Taylor expanded around -inf 5.4
if -1.178078840228313e-285 < x.re < 4.1903614976012866e-30Initial program 26.0
Taylor expanded around 0 14.6
if 4.1903614976012866e-30 < x.re Initial program 41.1
Taylor expanded around 0 26.8
Taylor expanded around inf 10.8
Final simplification9.1
herbie shell --seed 2020035
(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)))))