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 -2.9876182964047036 \cdot 10^{-221}:\\
\;\;\;\;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.5512797003204989 \cdot 10^{-291} \lor \neg \left(x.re \le 2.36313137794800354 \cdot 10^{-180}\right) \land x.re \le 0.0035854875341116569:\\
\;\;\;\;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 r17800 = x_re;
double r17801 = r17800 * r17800;
double r17802 = x_im;
double r17803 = r17802 * r17802;
double r17804 = r17801 + r17803;
double r17805 = sqrt(r17804);
double r17806 = log(r17805);
double r17807 = y_re;
double r17808 = r17806 * r17807;
double r17809 = atan2(r17802, r17800);
double r17810 = y_im;
double r17811 = r17809 * r17810;
double r17812 = r17808 - r17811;
double r17813 = exp(r17812);
double r17814 = r17806 * r17810;
double r17815 = r17809 * r17807;
double r17816 = r17814 + r17815;
double r17817 = cos(r17816);
double r17818 = r17813 * r17817;
return r17818;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r17819 = x_re;
double r17820 = -2.9876182964047036e-221;
bool r17821 = r17819 <= r17820;
double r17822 = y_re;
double r17823 = -1.0;
double r17824 = r17823 / r17819;
double r17825 = log(r17824);
double r17826 = r17822 * r17825;
double r17827 = -r17826;
double r17828 = x_im;
double r17829 = atan2(r17828, r17819);
double r17830 = y_im;
double r17831 = r17829 * r17830;
double r17832 = r17827 - r17831;
double r17833 = exp(r17832);
double r17834 = 1.551279700320499e-291;
bool r17835 = r17819 <= r17834;
double r17836 = 2.3631313779480035e-180;
bool r17837 = r17819 <= r17836;
double r17838 = !r17837;
double r17839 = 0.003585487534111657;
bool r17840 = r17819 <= r17839;
bool r17841 = r17838 && r17840;
bool r17842 = r17835 || r17841;
double r17843 = r17819 * r17819;
double r17844 = r17828 * r17828;
double r17845 = r17843 + r17844;
double r17846 = sqrt(r17845);
double r17847 = log(r17846);
double r17848 = r17847 * r17822;
double r17849 = r17848 - r17831;
double r17850 = exp(r17849);
double r17851 = log(r17819);
double r17852 = r17851 * r17822;
double r17853 = r17852 - r17831;
double r17854 = exp(r17853);
double r17855 = r17842 ? r17850 : r17854;
double r17856 = r17821 ? r17833 : r17855;
return r17856;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -2.9876182964047036e-221Initial program 31.2
Taylor expanded around 0 17.9
Taylor expanded around -inf 5.3
Simplified5.3
if -2.9876182964047036e-221 < x.re < 1.551279700320499e-291 or 2.3631313779480035e-180 < x.re < 0.003585487534111657Initial program 25.6
Taylor expanded around 0 14.9
if 1.551279700320499e-291 < x.re < 2.3631313779480035e-180 or 0.003585487534111657 < x.re Initial program 40.0
Taylor expanded around 0 25.8
Taylor expanded around inf 10.5
Final simplification9.3
herbie shell --seed 2020042
(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)))))