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.506389555165719 \cdot 10^{-310}:\\
\;\;\;\;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{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 r65 = x_re;
double r66 = r65 * r65;
double r67 = x_im;
double r68 = r67 * r67;
double r69 = r66 + r68;
double r70 = sqrt(r69);
double r71 = log(r70);
double r72 = y_re;
double r73 = r71 * r72;
double r74 = atan2(r67, r65);
double r75 = y_im;
double r76 = r74 * r75;
double r77 = r73 - r76;
double r78 = exp(r77);
double r79 = r71 * r75;
double r80 = r74 * r72;
double r81 = r79 + r80;
double r82 = cos(r81);
double r83 = r78 * r82;
return r83;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r84 = x_re;
double r85 = 3.5063895551657e-310;
bool r86 = r84 <= r85;
double r87 = -1.0;
double r88 = y_re;
double r89 = r87 / r84;
double r90 = log(r89);
double r91 = r88 * r90;
double r92 = r87 * r91;
double r93 = x_im;
double r94 = atan2(r93, r84);
double r95 = y_im;
double r96 = r94 * r95;
double r97 = r92 - r96;
double r98 = exp(r97);
double r99 = 1.0;
double r100 = r98 * r99;
double r101 = log(r84);
double r102 = r101 * r88;
double r103 = r102 - r96;
double r104 = exp(r103);
double r105 = r104 * r99;
double r106 = r86 ? r100 : r105;
return r106;
}



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.5063895551657e-310Initial program 32.6
Taylor expanded around 0 17.4
Taylor expanded around -inf 6.0
if 3.5063895551657e-310 < x.re Initial program 34.7
Taylor expanded around 0 21.8
Taylor expanded around inf 12.2
Final simplification9.2
herbie shell --seed 2020025
(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)))))