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.978196131846507444361240117294952580778 \cdot 10^{-269}:\\
\;\;\;\;e^{\left(-y.re \cdot \log \left(\frac{-1}{x.re}\right)\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\mathbf{elif}\;x.re \le 5.166631344921751224740015329592089575235 \cdot 10^{-235}:\\
\;\;\;\;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}\\
\mathbf{else}:\\
\;\;\;\;\frac{{x.re}^{y.re}}{e^{\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 r12199 = x_re;
double r12200 = r12199 * r12199;
double r12201 = x_im;
double r12202 = r12201 * r12201;
double r12203 = r12200 + r12202;
double r12204 = sqrt(r12203);
double r12205 = log(r12204);
double r12206 = y_re;
double r12207 = r12205 * r12206;
double r12208 = atan2(r12201, r12199);
double r12209 = y_im;
double r12210 = r12208 * r12209;
double r12211 = r12207 - r12210;
double r12212 = exp(r12211);
double r12213 = r12205 * r12209;
double r12214 = r12208 * r12206;
double r12215 = r12213 + r12214;
double r12216 = cos(r12215);
double r12217 = r12212 * r12216;
return r12217;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r12218 = x_re;
double r12219 = -2.9781961318465074e-269;
bool r12220 = r12218 <= r12219;
double r12221 = y_re;
double r12222 = -1.0;
double r12223 = r12222 / r12218;
double r12224 = log(r12223);
double r12225 = r12221 * r12224;
double r12226 = -r12225;
double r12227 = x_im;
double r12228 = atan2(r12227, r12218);
double r12229 = y_im;
double r12230 = r12228 * r12229;
double r12231 = r12226 - r12230;
double r12232 = exp(r12231);
double r12233 = 5.166631344921751e-235;
bool r12234 = r12218 <= r12233;
double r12235 = r12218 * r12218;
double r12236 = r12227 * r12227;
double r12237 = r12235 + r12236;
double r12238 = sqrt(r12237);
double r12239 = log(r12238);
double r12240 = r12239 * r12221;
double r12241 = r12240 - r12230;
double r12242 = exp(r12241);
double r12243 = pow(r12218, r12221);
double r12244 = exp(r12230);
double r12245 = r12243 / r12244;
double r12246 = r12234 ? r12242 : r12245;
double r12247 = r12220 ? r12232 : r12246;
return r12247;
}



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.9781961318465074e-269Initial program 31.3
Taylor expanded around 0 16.9
Taylor expanded around -inf 5.9
Simplified5.9
if -2.9781961318465074e-269 < x.re < 5.166631344921751e-235Initial program 32.7
Taylor expanded around 0 19.0
if 5.166631344921751e-235 < x.re Initial program 34.6
Taylor expanded around 0 21.6
Taylor expanded around inf 11.7
Simplified14.7
Final simplification11.1
herbie shell --seed 2019350
(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)))))