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.194259725539570386691584397856890606327 \cdot 10^{-310}:\\
\;\;\;\;\frac{e^{-\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}}{{\left(\frac{-1}{x.re}\right)}^{y.re}}\\
\mathbf{else}:\\
\;\;\;\;e^{\log x.re \cdot y.re - \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 r24110 = x_re;
double r24111 = r24110 * r24110;
double r24112 = x_im;
double r24113 = r24112 * r24112;
double r24114 = r24111 + r24113;
double r24115 = sqrt(r24114);
double r24116 = log(r24115);
double r24117 = y_re;
double r24118 = r24116 * r24117;
double r24119 = atan2(r24112, r24110);
double r24120 = y_im;
double r24121 = r24119 * r24120;
double r24122 = r24118 - r24121;
double r24123 = exp(r24122);
double r24124 = r24116 * r24120;
double r24125 = r24119 * r24117;
double r24126 = r24124 + r24125;
double r24127 = cos(r24126);
double r24128 = r24123 * r24127;
return r24128;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r24129 = x_re;
double r24130 = -2.19425972553957e-310;
bool r24131 = r24129 <= r24130;
double r24132 = x_im;
double r24133 = atan2(r24132, r24129);
double r24134 = y_im;
double r24135 = r24133 * r24134;
double r24136 = -r24135;
double r24137 = exp(r24136);
double r24138 = -1.0;
double r24139 = r24138 / r24129;
double r24140 = y_re;
double r24141 = pow(r24139, r24140);
double r24142 = r24137 / r24141;
double r24143 = log(r24129);
double r24144 = r24143 * r24140;
double r24145 = r24144 - r24135;
double r24146 = exp(r24145);
double r24147 = r24131 ? r24142 : r24146;
return r24147;
}



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.19425972553957e-310Initial program 31.7
Taylor expanded around 0 17.5
Taylor expanded around -inf 5.7
Simplified11.2
if -2.19425972553957e-310 < x.re Initial program 34.2
Taylor expanded around 0 21.3
Taylor expanded around inf 11.4
Final simplification11.3
herbie shell --seed 2019209
(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)))))