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 -9.37440321357841976 \cdot 10^{-308}:\\
\;\;\;\;e^{-\left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im + y.re \cdot \log \left(\frac{-1}{x.re}\right)\right)} \cdot 1\\
\mathbf{elif}\;x.re \le 0.506585552862842348:\\
\;\;\;\;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 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 r14356 = x_re;
double r14357 = r14356 * r14356;
double r14358 = x_im;
double r14359 = r14358 * r14358;
double r14360 = r14357 + r14359;
double r14361 = sqrt(r14360);
double r14362 = log(r14361);
double r14363 = y_re;
double r14364 = r14362 * r14363;
double r14365 = atan2(r14358, r14356);
double r14366 = y_im;
double r14367 = r14365 * r14366;
double r14368 = r14364 - r14367;
double r14369 = exp(r14368);
double r14370 = r14362 * r14366;
double r14371 = r14365 * r14363;
double r14372 = r14370 + r14371;
double r14373 = cos(r14372);
double r14374 = r14369 * r14373;
return r14374;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r14375 = x_re;
double r14376 = -9.37440321357842e-308;
bool r14377 = r14375 <= r14376;
double r14378 = x_im;
double r14379 = atan2(r14378, r14375);
double r14380 = y_im;
double r14381 = r14379 * r14380;
double r14382 = y_re;
double r14383 = -1.0;
double r14384 = r14383 / r14375;
double r14385 = log(r14384);
double r14386 = r14382 * r14385;
double r14387 = r14381 + r14386;
double r14388 = -r14387;
double r14389 = exp(r14388);
double r14390 = 1.0;
double r14391 = r14389 * r14390;
double r14392 = 0.5065855528628423;
bool r14393 = r14375 <= r14392;
double r14394 = r14375 * r14375;
double r14395 = r14378 * r14378;
double r14396 = r14394 + r14395;
double r14397 = sqrt(r14396);
double r14398 = log(r14397);
double r14399 = r14398 * r14382;
double r14400 = r14399 - r14381;
double r14401 = exp(r14400);
double r14402 = r14401 * r14390;
double r14403 = log(r14375);
double r14404 = r14403 * r14382;
double r14405 = r14404 - r14381;
double r14406 = exp(r14405);
double r14407 = r14406 * r14390;
double r14408 = r14393 ? r14402 : r14407;
double r14409 = r14377 ? r14391 : r14408;
return r14409;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -9.37440321357842e-308Initial program 31.4
Taylor expanded around 0 17.4
Taylor expanded around -inf 5.5
if -9.37440321357842e-308 < x.re < 0.5065855528628423Initial program 24.1
Taylor expanded around 0 14.0
if 0.5065855528628423 < x.re Initial program 43.7
Taylor expanded around 0 28.1
Taylor expanded around inf 10.7
Final simplification9.0
herbie shell --seed 2020062
(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)))))