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.138202357158243 \cdot 10^{-284}:\\
\;\;\;\;e^{\log \left(-x.re\right) \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\mathbf{elif}\;x.re \le 7.402062416285907 \cdot 10^{-205}:\\
\;\;\;\;e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\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 r1589817 = x_re;
double r1589818 = r1589817 * r1589817;
double r1589819 = x_im;
double r1589820 = r1589819 * r1589819;
double r1589821 = r1589818 + r1589820;
double r1589822 = sqrt(r1589821);
double r1589823 = log(r1589822);
double r1589824 = y_re;
double r1589825 = r1589823 * r1589824;
double r1589826 = atan2(r1589819, r1589817);
double r1589827 = y_im;
double r1589828 = r1589826 * r1589827;
double r1589829 = r1589825 - r1589828;
double r1589830 = exp(r1589829);
double r1589831 = r1589823 * r1589827;
double r1589832 = r1589826 * r1589824;
double r1589833 = r1589831 + r1589832;
double r1589834 = cos(r1589833);
double r1589835 = r1589830 * r1589834;
return r1589835;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1589836 = x_re;
double r1589837 = -8.138202357158243e-284;
bool r1589838 = r1589836 <= r1589837;
double r1589839 = -r1589836;
double r1589840 = log(r1589839);
double r1589841 = y_re;
double r1589842 = r1589840 * r1589841;
double r1589843 = y_im;
double r1589844 = x_im;
double r1589845 = atan2(r1589844, r1589836);
double r1589846 = r1589843 * r1589845;
double r1589847 = r1589842 - r1589846;
double r1589848 = exp(r1589847);
double r1589849 = 7.402062416285907e-205;
bool r1589850 = r1589836 <= r1589849;
double r1589851 = r1589836 * r1589836;
double r1589852 = r1589844 * r1589844;
double r1589853 = r1589851 + r1589852;
double r1589854 = sqrt(r1589853);
double r1589855 = log(r1589854);
double r1589856 = r1589841 * r1589855;
double r1589857 = r1589856 - r1589846;
double r1589858 = exp(r1589857);
double r1589859 = log(r1589836);
double r1589860 = r1589859 * r1589841;
double r1589861 = r1589860 - r1589846;
double r1589862 = exp(r1589861);
double r1589863 = r1589850 ? r1589858 : r1589862;
double r1589864 = r1589838 ? r1589848 : r1589863;
return r1589864;
}



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.138202357158243e-284Initial program 31.7
Taylor expanded around 0 18.0
Taylor expanded around -inf 5.8
Simplified5.8
if -8.138202357158243e-284 < x.re < 7.402062416285907e-205Initial program 29.6
Taylor expanded around 0 15.9
if 7.402062416285907e-205 < x.re Initial program 33.5
Taylor expanded around 0 21.7
Taylor expanded around inf 11.6
Final simplification9.3
herbie shell --seed 2019158
(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)))))