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 -1.8407009899098441 \cdot 10^{-06}:\\
\;\;\;\;e^{\log \left(-x.re\right) \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\mathbf{elif}\;x.re \le -2.9130712528480477 \cdot 10^{-164}:\\
\;\;\;\;e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\mathbf{elif}\;x.re \le -4.2640896224449 \cdot 10^{-310}:\\
\;\;\;\;e^{\log \left(-x.re\right) \cdot y.re - 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 r1460554 = x_re;
double r1460555 = r1460554 * r1460554;
double r1460556 = x_im;
double r1460557 = r1460556 * r1460556;
double r1460558 = r1460555 + r1460557;
double r1460559 = sqrt(r1460558);
double r1460560 = log(r1460559);
double r1460561 = y_re;
double r1460562 = r1460560 * r1460561;
double r1460563 = atan2(r1460556, r1460554);
double r1460564 = y_im;
double r1460565 = r1460563 * r1460564;
double r1460566 = r1460562 - r1460565;
double r1460567 = exp(r1460566);
double r1460568 = r1460560 * r1460564;
double r1460569 = r1460563 * r1460561;
double r1460570 = r1460568 + r1460569;
double r1460571 = cos(r1460570);
double r1460572 = r1460567 * r1460571;
return r1460572;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1460573 = x_re;
double r1460574 = -1.8407009899098441e-06;
bool r1460575 = r1460573 <= r1460574;
double r1460576 = -r1460573;
double r1460577 = log(r1460576);
double r1460578 = y_re;
double r1460579 = r1460577 * r1460578;
double r1460580 = y_im;
double r1460581 = x_im;
double r1460582 = atan2(r1460581, r1460573);
double r1460583 = r1460580 * r1460582;
double r1460584 = r1460579 - r1460583;
double r1460585 = exp(r1460584);
double r1460586 = -2.9130712528480477e-164;
bool r1460587 = r1460573 <= r1460586;
double r1460588 = r1460573 * r1460573;
double r1460589 = r1460581 * r1460581;
double r1460590 = r1460588 + r1460589;
double r1460591 = sqrt(r1460590);
double r1460592 = log(r1460591);
double r1460593 = r1460578 * r1460592;
double r1460594 = r1460593 - r1460583;
double r1460595 = exp(r1460594);
double r1460596 = -4.2640896224449e-310;
bool r1460597 = r1460573 <= r1460596;
double r1460598 = log(r1460573);
double r1460599 = r1460578 * r1460598;
double r1460600 = r1460599 - r1460583;
double r1460601 = exp(r1460600);
double r1460602 = r1460597 ? r1460585 : r1460601;
double r1460603 = r1460587 ? r1460595 : r1460602;
double r1460604 = r1460575 ? r1460585 : r1460603;
return r1460604;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -1.8407009899098441e-06 or -2.9130712528480477e-164 < x.re < -4.2640896224449e-310Initial program 36.3
Taylor expanded around 0 21.2
Taylor expanded around -inf 4.1
Simplified4.1
if -1.8407009899098441e-06 < x.re < -2.9130712528480477e-164Initial program 15.9
Taylor expanded around 0 8.3
if -4.2640896224449e-310 < x.re Initial program 34.9
Taylor expanded around 0 22.3
Taylor expanded around inf 11.9
Final simplification8.6
herbie shell --seed 2019163
(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)))))