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 -5.429027010745199184876313702270882432857 \cdot 10^{-203}:\\
\;\;\;\;e^{\left(-y.re \cdot \log \left(\frac{-1}{x.re}\right)\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\mathbf{elif}\;x.re \le -1.575802734573826837157530749461839110785 \cdot 10^{-254}:\\
\;\;\;\;e^{\log \left(-x.im\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\mathbf{elif}\;x.re \le -3.566576781276111012185154762547093345551 \cdot 10^{-310}:\\
\;\;\;\;e^{\left(-y.re \cdot \log \left(\frac{-1}{x.re}\right)\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\mathbf{else}:\\
\;\;\;\;e^{\log x.re \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r21623 = x_re;
double r21624 = r21623 * r21623;
double r21625 = x_im;
double r21626 = r21625 * r21625;
double r21627 = r21624 + r21626;
double r21628 = sqrt(r21627);
double r21629 = log(r21628);
double r21630 = y_re;
double r21631 = r21629 * r21630;
double r21632 = atan2(r21625, r21623);
double r21633 = y_im;
double r21634 = r21632 * r21633;
double r21635 = r21631 - r21634;
double r21636 = exp(r21635);
double r21637 = r21629 * r21633;
double r21638 = r21632 * r21630;
double r21639 = r21637 + r21638;
double r21640 = cos(r21639);
double r21641 = r21636 * r21640;
return r21641;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r21642 = x_re;
double r21643 = -5.429027010745199e-203;
bool r21644 = r21642 <= r21643;
double r21645 = y_re;
double r21646 = -1.0;
double r21647 = r21646 / r21642;
double r21648 = log(r21647);
double r21649 = r21645 * r21648;
double r21650 = -r21649;
double r21651 = x_im;
double r21652 = atan2(r21651, r21642);
double r21653 = y_im;
double r21654 = r21652 * r21653;
double r21655 = r21650 - r21654;
double r21656 = exp(r21655);
double r21657 = -1.5758027345738268e-254;
bool r21658 = r21642 <= r21657;
double r21659 = -r21651;
double r21660 = log(r21659);
double r21661 = r21660 * r21645;
double r21662 = r21661 - r21654;
double r21663 = exp(r21662);
double r21664 = -3.5665767812761e-310;
bool r21665 = r21642 <= r21664;
double r21666 = log(r21642);
double r21667 = r21666 * r21645;
double r21668 = r21667 - r21654;
double r21669 = exp(r21668);
double r21670 = r21665 ? r21656 : r21669;
double r21671 = r21658 ? r21663 : r21670;
double r21672 = r21644 ? r21656 : r21671;
return r21672;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -5.429027010745199e-203 or -1.5758027345738268e-254 < x.re < -3.5665767812761e-310Initial program 31.9
Taylor expanded around 0 17.2
Taylor expanded around -inf 5.1
Simplified5.1
if -5.429027010745199e-203 < x.re < -1.5758027345738268e-254Initial program 32.6
Taylor expanded around 0 15.6
rmApplied add-cbrt-cube21.4
Simplified21.4
Taylor expanded around -inf 36.8
Simplified36.8
if -3.5665767812761e-310 < x.re Initial program 35.2
Taylor expanded around 0 21.4
Taylor expanded around inf 11.7
Final simplification9.9
herbie shell --seed 2019323
(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)))))