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 -4.1355045148069 \cdot 10^{-310}:\\
\;\;\;\;e^{\log \left(-x.re\right) \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\mathbf{elif}\;x.re \le 1.4989257856483083 \cdot 10^{-40}:\\
\;\;\;\;e^{y.re \cdot \log x.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\mathbf{elif}\;x.re \le 4.8030355459155164 \cdot 10^{+88}:\\
\;\;\;\;\cos \left(\log x.re \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right) \cdot e^{y.re \cdot \log \left(\sqrt{x.im \cdot x.im + x.re \cdot x.re}\right) - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\mathbf{else}:\\
\;\;\;\;e^{y.re \cdot \log x.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 r647531 = x_re;
double r647532 = r647531 * r647531;
double r647533 = x_im;
double r647534 = r647533 * r647533;
double r647535 = r647532 + r647534;
double r647536 = sqrt(r647535);
double r647537 = log(r647536);
double r647538 = y_re;
double r647539 = r647537 * r647538;
double r647540 = atan2(r647533, r647531);
double r647541 = y_im;
double r647542 = r647540 * r647541;
double r647543 = r647539 - r647542;
double r647544 = exp(r647543);
double r647545 = r647537 * r647541;
double r647546 = r647540 * r647538;
double r647547 = r647545 + r647546;
double r647548 = cos(r647547);
double r647549 = r647544 * r647548;
return r647549;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r647550 = x_re;
double r647551 = -4.1355045148069e-310;
bool r647552 = r647550 <= r647551;
double r647553 = -r647550;
double r647554 = log(r647553);
double r647555 = y_re;
double r647556 = r647554 * r647555;
double r647557 = y_im;
double r647558 = x_im;
double r647559 = atan2(r647558, r647550);
double r647560 = r647557 * r647559;
double r647561 = r647556 - r647560;
double r647562 = exp(r647561);
double r647563 = 1.4989257856483083e-40;
bool r647564 = r647550 <= r647563;
double r647565 = log(r647550);
double r647566 = r647555 * r647565;
double r647567 = r647566 - r647560;
double r647568 = exp(r647567);
double r647569 = 4.8030355459155164e+88;
bool r647570 = r647550 <= r647569;
double r647571 = r647565 * r647557;
double r647572 = r647559 * r647555;
double r647573 = r647571 + r647572;
double r647574 = cos(r647573);
double r647575 = r647558 * r647558;
double r647576 = r647550 * r647550;
double r647577 = r647575 + r647576;
double r647578 = sqrt(r647577);
double r647579 = log(r647578);
double r647580 = r647555 * r647579;
double r647581 = r647580 - r647560;
double r647582 = exp(r647581);
double r647583 = r647574 * r647582;
double r647584 = r647570 ? r647583 : r647568;
double r647585 = r647564 ? r647568 : r647584;
double r647586 = r647552 ? r647562 : r647585;
return r647586;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -4.1355045148069e-310Initial program 31.1
Taylor expanded around 0 17.6
Taylor expanded around -inf 5.9
Simplified5.9
if -4.1355045148069e-310 < x.re < 1.4989257856483083e-40 or 4.8030355459155164e+88 < x.re Initial program 36.6
Taylor expanded around 0 23.7
Taylor expanded around inf 13.0
Simplified13.0
if 1.4989257856483083e-40 < x.re < 4.8030355459155164e+88Initial program 21.1
Taylor expanded around inf 14.0
Simplified14.0
Final simplification9.6
herbie shell --seed 2019151
(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)))))