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 -8.732803126791036021627347672393718855249 \cdot 10^{-70}:\\
\;\;\;\;e^{y.re \cdot \log \left(-x.re\right) - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\mathbf{elif}\;x.re \le 1.359755228258073250742917907568916334331 \cdot 10^{-34}:\\
\;\;\;\;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^{\log x.re \cdot y.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 r1420728 = x_re;
double r1420729 = r1420728 * r1420728;
double r1420730 = x_im;
double r1420731 = r1420730 * r1420730;
double r1420732 = r1420729 + r1420731;
double r1420733 = sqrt(r1420732);
double r1420734 = log(r1420733);
double r1420735 = y_re;
double r1420736 = r1420734 * r1420735;
double r1420737 = atan2(r1420730, r1420728);
double r1420738 = y_im;
double r1420739 = r1420737 * r1420738;
double r1420740 = r1420736 - r1420739;
double r1420741 = exp(r1420740);
double r1420742 = r1420734 * r1420738;
double r1420743 = r1420737 * r1420735;
double r1420744 = r1420742 + r1420743;
double r1420745 = cos(r1420744);
double r1420746 = r1420741 * r1420745;
return r1420746;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1420747 = x_re;
double r1420748 = -8.732803126791036e-70;
bool r1420749 = r1420747 <= r1420748;
double r1420750 = y_re;
double r1420751 = -r1420747;
double r1420752 = log(r1420751);
double r1420753 = r1420750 * r1420752;
double r1420754 = y_im;
double r1420755 = x_im;
double r1420756 = atan2(r1420755, r1420747);
double r1420757 = r1420754 * r1420756;
double r1420758 = r1420753 - r1420757;
double r1420759 = exp(r1420758);
double r1420760 = 1.3597552282580733e-34;
bool r1420761 = r1420747 <= r1420760;
double r1420762 = r1420755 * r1420755;
double r1420763 = r1420747 * r1420747;
double r1420764 = r1420762 + r1420763;
double r1420765 = sqrt(r1420764);
double r1420766 = log(r1420765);
double r1420767 = r1420750 * r1420766;
double r1420768 = r1420767 - r1420757;
double r1420769 = exp(r1420768);
double r1420770 = log(r1420747);
double r1420771 = r1420770 * r1420750;
double r1420772 = r1420771 - r1420757;
double r1420773 = exp(r1420772);
double r1420774 = r1420761 ? r1420769 : r1420773;
double r1420775 = r1420749 ? r1420759 : r1420774;
return r1420775;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -8.732803126791036e-70Initial program 36.4
Taylor expanded around 0 20.1
Taylor expanded around -inf 3.0
Simplified3.0
if -8.732803126791036e-70 < x.re < 1.3597552282580733e-34Initial program 26.2
Taylor expanded around 0 15.1
if 1.3597552282580733e-34 < x.re Initial program 41.7
Taylor expanded around 0 26.6
Taylor expanded around inf 11.4
Simplified11.4
Final simplification10.5
herbie shell --seed 2019200
(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)))))