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}\;y.re \le -2155699.944579685:\\
\;\;\;\;e^{\log \left(\sqrt{x.im \cdot x.im + x.re \cdot x.re}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\mathbf{else}:\\
\;\;\;\;e^{y.re \cdot \log \left(-x.re\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r1042272 = x_re;
double r1042273 = r1042272 * r1042272;
double r1042274 = x_im;
double r1042275 = r1042274 * r1042274;
double r1042276 = r1042273 + r1042275;
double r1042277 = sqrt(r1042276);
double r1042278 = log(r1042277);
double r1042279 = y_re;
double r1042280 = r1042278 * r1042279;
double r1042281 = atan2(r1042274, r1042272);
double r1042282 = y_im;
double r1042283 = r1042281 * r1042282;
double r1042284 = r1042280 - r1042283;
double r1042285 = exp(r1042284);
double r1042286 = r1042278 * r1042282;
double r1042287 = r1042281 * r1042279;
double r1042288 = r1042286 + r1042287;
double r1042289 = cos(r1042288);
double r1042290 = r1042285 * r1042289;
return r1042290;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1042291 = y_re;
double r1042292 = -2155699.944579685;
bool r1042293 = r1042291 <= r1042292;
double r1042294 = x_im;
double r1042295 = r1042294 * r1042294;
double r1042296 = x_re;
double r1042297 = r1042296 * r1042296;
double r1042298 = r1042295 + r1042297;
double r1042299 = sqrt(r1042298);
double r1042300 = log(r1042299);
double r1042301 = r1042300 * r1042291;
double r1042302 = atan2(r1042294, r1042296);
double r1042303 = y_im;
double r1042304 = r1042302 * r1042303;
double r1042305 = r1042301 - r1042304;
double r1042306 = exp(r1042305);
double r1042307 = -r1042296;
double r1042308 = log(r1042307);
double r1042309 = r1042291 * r1042308;
double r1042310 = r1042309 - r1042304;
double r1042311 = exp(r1042310);
double r1042312 = r1042293 ? r1042306 : r1042311;
return r1042312;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.re < -2155699.944579685Initial program 35.8
Taylor expanded around 0 0
if -2155699.944579685 < y.re Initial program 28.9
Taylor expanded around 0 26.1
Taylor expanded around -inf 0.4
Simplified0.4
Final simplification0.3
herbie shell --seed 2019132
(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)))))