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 3.506389555165719 \cdot 10^{-310}:\\
\;\;\;\;e^{-1 \cdot \left(y.re \cdot \log \left(\frac{-1}{x.re}\right)\right) - \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 r13687 = x_re;
double r13688 = r13687 * r13687;
double r13689 = x_im;
double r13690 = r13689 * r13689;
double r13691 = r13688 + r13690;
double r13692 = sqrt(r13691);
double r13693 = log(r13692);
double r13694 = y_re;
double r13695 = r13693 * r13694;
double r13696 = atan2(r13689, r13687);
double r13697 = y_im;
double r13698 = r13696 * r13697;
double r13699 = r13695 - r13698;
double r13700 = exp(r13699);
double r13701 = r13693 * r13697;
double r13702 = r13696 * r13694;
double r13703 = r13701 + r13702;
double r13704 = cos(r13703);
double r13705 = r13700 * r13704;
return r13705;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r13706 = x_re;
double r13707 = 3.5063895551657e-310;
bool r13708 = r13706 <= r13707;
double r13709 = -1.0;
double r13710 = y_re;
double r13711 = r13709 / r13706;
double r13712 = log(r13711);
double r13713 = r13710 * r13712;
double r13714 = r13709 * r13713;
double r13715 = x_im;
double r13716 = atan2(r13715, r13706);
double r13717 = y_im;
double r13718 = r13716 * r13717;
double r13719 = r13714 - r13718;
double r13720 = exp(r13719);
double r13721 = 1.0;
double r13722 = r13720 * r13721;
double r13723 = log(r13706);
double r13724 = r13723 * r13710;
double r13725 = r13724 - r13718;
double r13726 = exp(r13725);
double r13727 = r13726 * r13721;
double r13728 = r13708 ? r13722 : r13727;
return r13728;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < 3.5063895551657e-310Initial program 32.6
Taylor expanded around 0 17.4
Taylor expanded around -inf 6.0
if 3.5063895551657e-310 < x.re Initial program 34.7
Taylor expanded around 0 21.8
Taylor expanded around inf 12.2
Final simplification9.2
herbie shell --seed 2020025
(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)))))