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 -2.86513786455634 \cdot 10^{-310}:\\
\;\;\;\;e^{\log \left(-x.re\right) \cdot y.re - 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 r647369 = x_re;
double r647370 = r647369 * r647369;
double r647371 = x_im;
double r647372 = r647371 * r647371;
double r647373 = r647370 + r647372;
double r647374 = sqrt(r647373);
double r647375 = log(r647374);
double r647376 = y_re;
double r647377 = r647375 * r647376;
double r647378 = atan2(r647371, r647369);
double r647379 = y_im;
double r647380 = r647378 * r647379;
double r647381 = r647377 - r647380;
double r647382 = exp(r647381);
double r647383 = r647375 * r647379;
double r647384 = r647378 * r647376;
double r647385 = r647383 + r647384;
double r647386 = cos(r647385);
double r647387 = r647382 * r647386;
return r647387;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r647388 = x_re;
double r647389 = -2.86513786455634e-310;
bool r647390 = r647388 <= r647389;
double r647391 = -r647388;
double r647392 = log(r647391);
double r647393 = y_re;
double r647394 = r647392 * r647393;
double r647395 = y_im;
double r647396 = x_im;
double r647397 = atan2(r647396, r647388);
double r647398 = r647395 * r647397;
double r647399 = r647394 - r647398;
double r647400 = exp(r647399);
double r647401 = log(r647388);
double r647402 = r647401 * r647393;
double r647403 = r647402 - r647398;
double r647404 = exp(r647403);
double r647405 = r647390 ? r647400 : r647404;
return r647405;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -2.86513786455634e-310Initial program 31.5
Taylor expanded around 0 17.8
Taylor expanded around -inf 6.1
Simplified6.1
if -2.86513786455634e-310 < x.re Initial program 34.0
Taylor expanded around 0 21.9
Taylor expanded around inf 11.3
Simplified11.3
Final simplification8.7
herbie shell --seed 2019155
(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)))))