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 -6.606413508708837158603521356239899672578 \cdot 10^{-75}:\\
\;\;\;\;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 1.948311381039226908900887207572434452033 \cdot 10^{-246}:\\
\;\;\;\;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 r22055 = x_re;
double r22056 = r22055 * r22055;
double r22057 = x_im;
double r22058 = r22057 * r22057;
double r22059 = r22056 + r22058;
double r22060 = sqrt(r22059);
double r22061 = log(r22060);
double r22062 = y_re;
double r22063 = r22061 * r22062;
double r22064 = atan2(r22057, r22055);
double r22065 = y_im;
double r22066 = r22064 * r22065;
double r22067 = r22063 - r22066;
double r22068 = exp(r22067);
double r22069 = r22061 * r22065;
double r22070 = r22064 * r22062;
double r22071 = r22069 + r22070;
double r22072 = cos(r22071);
double r22073 = r22068 * r22072;
return r22073;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r22074 = x_re;
double r22075 = -6.606413508708837e-75;
bool r22076 = r22074 <= r22075;
double r22077 = -1.0;
double r22078 = y_re;
double r22079 = r22077 / r22074;
double r22080 = log(r22079);
double r22081 = r22078 * r22080;
double r22082 = r22077 * r22081;
double r22083 = x_im;
double r22084 = atan2(r22083, r22074);
double r22085 = y_im;
double r22086 = r22084 * r22085;
double r22087 = r22082 - r22086;
double r22088 = exp(r22087);
double r22089 = 1.0;
double r22090 = r22088 * r22089;
double r22091 = 1.948311381039227e-246;
bool r22092 = r22074 <= r22091;
double r22093 = r22074 * r22074;
double r22094 = r22083 * r22083;
double r22095 = r22093 + r22094;
double r22096 = sqrt(r22095);
double r22097 = log(r22096);
double r22098 = r22097 * r22078;
double r22099 = r22098 - r22086;
double r22100 = exp(r22099);
double r22101 = r22100 * r22089;
double r22102 = log(r22074);
double r22103 = r22102 * r22078;
double r22104 = r22103 - r22086;
double r22105 = exp(r22104);
double r22106 = r22105 * r22089;
double r22107 = r22092 ? r22101 : r22106;
double r22108 = r22076 ? r22090 : r22107;
return r22108;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -6.606413508708837e-75Initial program 35.3
Taylor expanded around 0 19.4
Taylor expanded around -inf 2.8
if -6.606413508708837e-75 < x.re < 1.948311381039227e-246Initial program 27.8
Taylor expanded around 0 15.3
if 1.948311381039227e-246 < x.re Initial program 35.2
Taylor expanded around 0 21.8
Taylor expanded around inf 11.4
Final simplification9.7
herbie shell --seed 2019322
(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)))))