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 3.138612018345918312843792177943056616354 \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 r1352967 = x_re;
double r1352968 = r1352967 * r1352967;
double r1352969 = x_im;
double r1352970 = r1352969 * r1352969;
double r1352971 = r1352968 + r1352970;
double r1352972 = sqrt(r1352971);
double r1352973 = log(r1352972);
double r1352974 = y_re;
double r1352975 = r1352973 * r1352974;
double r1352976 = atan2(r1352969, r1352967);
double r1352977 = y_im;
double r1352978 = r1352976 * r1352977;
double r1352979 = r1352975 - r1352978;
double r1352980 = exp(r1352979);
double r1352981 = r1352973 * r1352977;
double r1352982 = r1352976 * r1352974;
double r1352983 = r1352981 + r1352982;
double r1352984 = cos(r1352983);
double r1352985 = r1352980 * r1352984;
return r1352985;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1352986 = x_re;
double r1352987 = 3.1386120183459e-310;
bool r1352988 = r1352986 <= r1352987;
double r1352989 = -r1352986;
double r1352990 = log(r1352989);
double r1352991 = y_re;
double r1352992 = r1352990 * r1352991;
double r1352993 = y_im;
double r1352994 = x_im;
double r1352995 = atan2(r1352994, r1352986);
double r1352996 = r1352993 * r1352995;
double r1352997 = r1352992 - r1352996;
double r1352998 = exp(r1352997);
double r1352999 = log(r1352986);
double r1353000 = r1352999 * r1352991;
double r1353001 = r1353000 - r1352996;
double r1353002 = exp(r1353001);
double r1353003 = r1352988 ? r1352998 : r1353002;
return r1353003;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < 3.1386120183459e-310Initial program 32.2
Taylor expanded around 0 18.6
Taylor expanded around -inf 5.6
Simplified5.6
if 3.1386120183459e-310 < x.re Initial program 35.1
Taylor expanded around 0 22.3
Taylor expanded around inf 12.3
Final simplification9.1
herbie shell --seed 2019171
(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)))))