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.8717104734621963 \cdot 10^{-281}:\\
\;\;\;\;e^{\log \left(-x.re\right) \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\mathbf{elif}\;x.re \le 1.601505551461043 \cdot 10^{-26}:\\
\;\;\;\;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{else}:\\
\;\;\;\;e^{\log x.re \cdot y.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 r1439961 = x_re;
double r1439962 = r1439961 * r1439961;
double r1439963 = x_im;
double r1439964 = r1439963 * r1439963;
double r1439965 = r1439962 + r1439964;
double r1439966 = sqrt(r1439965);
double r1439967 = log(r1439966);
double r1439968 = y_re;
double r1439969 = r1439967 * r1439968;
double r1439970 = atan2(r1439963, r1439961);
double r1439971 = y_im;
double r1439972 = r1439970 * r1439971;
double r1439973 = r1439969 - r1439972;
double r1439974 = exp(r1439973);
double r1439975 = r1439967 * r1439971;
double r1439976 = r1439970 * r1439968;
double r1439977 = r1439975 + r1439976;
double r1439978 = cos(r1439977);
double r1439979 = r1439974 * r1439978;
return r1439979;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1439980 = x_re;
double r1439981 = -1.8717104734621963e-281;
bool r1439982 = r1439980 <= r1439981;
double r1439983 = -r1439980;
double r1439984 = log(r1439983);
double r1439985 = y_re;
double r1439986 = r1439984 * r1439985;
double r1439987 = y_im;
double r1439988 = x_im;
double r1439989 = atan2(r1439988, r1439980);
double r1439990 = r1439987 * r1439989;
double r1439991 = r1439986 - r1439990;
double r1439992 = exp(r1439991);
double r1439993 = 1.601505551461043e-26;
bool r1439994 = r1439980 <= r1439993;
double r1439995 = r1439980 * r1439980;
double r1439996 = r1439988 * r1439988;
double r1439997 = r1439995 + r1439996;
double r1439998 = sqrt(r1439997);
double r1439999 = log(r1439998);
double r1440000 = r1439985 * r1439999;
double r1440001 = r1440000 - r1439990;
double r1440002 = exp(r1440001);
double r1440003 = log(r1439980);
double r1440004 = r1440003 * r1439985;
double r1440005 = r1440004 - r1439990;
double r1440006 = exp(r1440005);
double r1440007 = r1439994 ? r1440002 : r1440006;
double r1440008 = r1439982 ? r1439992 : r1440007;
return r1440008;
}



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.8717104734621963e-281Initial program 31.0
Taylor expanded around 0 17.0
Taylor expanded around -inf 5.4
Simplified5.4
if -1.8717104734621963e-281 < x.re < 1.601505551461043e-26Initial program 24.9
Taylor expanded around 0 14.6
if 1.601505551461043e-26 < x.re Initial program 41.1
Taylor expanded around 0 25.9
Taylor expanded around inf 11.7
Final simplification9.5
herbie shell --seed 2019164
(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)))))