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.448187283069527930834397011494729667902:\\
\;\;\;\;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.085931852353555088293647174477075724596 \cdot 10^{-71}:\\
\;\;\;\;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}\\
\mathbf{elif}\;x.re \le -8.840626789860416774620000671155810028577 \cdot 10^{-152}:\\
\;\;\;\;\frac{{\left(\frac{-1}{x.re}\right)}^{\left(-y.re\right)}}{e^{\left({\left(\sqrt[3]{\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}}}\right)}^{4} \cdot {\left(\sqrt[3]{\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}}}\right)}^{2}\right) \cdot \left(\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}} \cdot y.im\right)}}\\
\mathbf{elif}\;x.re \le 2.910618682483124596927217326473379984398 \cdot 10^{-307}:\\
\;\;\;\;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}\\
\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 r20775 = x_re;
double r20776 = r20775 * r20775;
double r20777 = x_im;
double r20778 = r20777 * r20777;
double r20779 = r20776 + r20778;
double r20780 = sqrt(r20779);
double r20781 = log(r20780);
double r20782 = y_re;
double r20783 = r20781 * r20782;
double r20784 = atan2(r20777, r20775);
double r20785 = y_im;
double r20786 = r20784 * r20785;
double r20787 = r20783 - r20786;
double r20788 = exp(r20787);
double r20789 = r20781 * r20785;
double r20790 = r20784 * r20782;
double r20791 = r20789 + r20790;
double r20792 = cos(r20791);
double r20793 = r20788 * r20792;
return r20793;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r20794 = x_re;
double r20795 = -1.448187283069528;
bool r20796 = r20794 <= r20795;
double r20797 = y_re;
double r20798 = -1.0;
double r20799 = r20798 / r20794;
double r20800 = log(r20799);
double r20801 = r20797 * r20800;
double r20802 = -r20801;
double r20803 = x_im;
double r20804 = atan2(r20803, r20794);
double r20805 = y_im;
double r20806 = r20804 * r20805;
double r20807 = r20802 - r20806;
double r20808 = exp(r20807);
double r20809 = -1.085931852353555e-71;
bool r20810 = r20794 <= r20809;
double r20811 = r20794 * r20794;
double r20812 = r20803 * r20803;
double r20813 = r20811 + r20812;
double r20814 = sqrt(r20813);
double r20815 = log(r20814);
double r20816 = r20815 * r20797;
double r20817 = r20816 - r20806;
double r20818 = exp(r20817);
double r20819 = -8.840626789860417e-152;
bool r20820 = r20794 <= r20819;
double r20821 = -r20797;
double r20822 = pow(r20799, r20821);
double r20823 = cbrt(r20804);
double r20824 = cbrt(r20823);
double r20825 = 4.0;
double r20826 = pow(r20824, r20825);
double r20827 = 2.0;
double r20828 = pow(r20824, r20827);
double r20829 = r20826 * r20828;
double r20830 = r20823 * r20805;
double r20831 = r20829 * r20830;
double r20832 = exp(r20831);
double r20833 = r20822 / r20832;
double r20834 = 2.9106186824831246e-307;
bool r20835 = r20794 <= r20834;
double r20836 = log(r20794);
double r20837 = r20836 * r20797;
double r20838 = r20837 - r20806;
double r20839 = exp(r20838);
double r20840 = r20835 ? r20818 : r20839;
double r20841 = r20820 ? r20833 : r20840;
double r20842 = r20810 ? r20818 : r20841;
double r20843 = r20796 ? r20808 : r20842;
return r20843;
}



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.448187283069528Initial program 39.9
Taylor expanded around 0 22.6
Taylor expanded around -inf 1.3
Simplified1.3
if -1.448187283069528 < x.re < -1.085931852353555e-71 or -8.840626789860417e-152 < x.re < 2.9106186824831246e-307Initial program 26.4
Taylor expanded around 0 14.7
if -1.085931852353555e-71 < x.re < -8.840626789860417e-152Initial program 16.3
Taylor expanded around 0 8.7
Taylor expanded around -inf 11.0
Simplified15.3
rmApplied add-cube-cbrt15.3
Applied associate-*l*15.3
rmApplied add-cube-cbrt15.3
Applied add-cube-cbrt15.3
Applied swap-sqr15.3
Simplified15.3
Simplified15.3
if 2.9106186824831246e-307 < x.re Initial program 35.2
Taylor expanded around 0 22.3
Taylor expanded around inf 12.0
Final simplification10.0
herbie shell --seed 2019303
(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)))))