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 -4.64156243455413 \cdot 10^{-17}:\\
\;\;\;\;e^{\log \left(-x.re\right) \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\mathbf{elif}\;x.re \le -5.329546007764399 \cdot 10^{-159}:\\
\;\;\;\;\left(\left(\sqrt[3]{\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)} \cdot \sqrt[3]{\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)}\right) \cdot \sqrt[3]{\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)}\right) \cdot 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{elif}\;x.re \le -1.91205330543206 \cdot 10^{-310}:\\
\;\;\;\;e^{\log \left(-x.re\right) \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\mathbf{elif}\;x.re \le 9.798541471285326 \cdot 10^{-63}:\\
\;\;\;\;e^{y.re \cdot \log x.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\mathbf{elif}\;x.re \le 3.102132787630003 \cdot 10^{-33}:\\
\;\;\;\;e^{\log \left(\log \left(e^{\sqrt{x.re \cdot x.re + x.im \cdot x.im}}\right)\right) \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\mathbf{else}:\\
\;\;\;\;e^{y.re \cdot \log x.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 r1503805 = x_re;
double r1503806 = r1503805 * r1503805;
double r1503807 = x_im;
double r1503808 = r1503807 * r1503807;
double r1503809 = r1503806 + r1503808;
double r1503810 = sqrt(r1503809);
double r1503811 = log(r1503810);
double r1503812 = y_re;
double r1503813 = r1503811 * r1503812;
double r1503814 = atan2(r1503807, r1503805);
double r1503815 = y_im;
double r1503816 = r1503814 * r1503815;
double r1503817 = r1503813 - r1503816;
double r1503818 = exp(r1503817);
double r1503819 = r1503811 * r1503815;
double r1503820 = r1503814 * r1503812;
double r1503821 = r1503819 + r1503820;
double r1503822 = cos(r1503821);
double r1503823 = r1503818 * r1503822;
return r1503823;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1503824 = x_re;
double r1503825 = -4.64156243455413e-17;
bool r1503826 = r1503824 <= r1503825;
double r1503827 = -r1503824;
double r1503828 = log(r1503827);
double r1503829 = y_re;
double r1503830 = r1503828 * r1503829;
double r1503831 = y_im;
double r1503832 = x_im;
double r1503833 = atan2(r1503832, r1503824);
double r1503834 = r1503831 * r1503833;
double r1503835 = r1503830 - r1503834;
double r1503836 = exp(r1503835);
double r1503837 = -5.329546007764399e-159;
bool r1503838 = r1503824 <= r1503837;
double r1503839 = r1503824 * r1503824;
double r1503840 = r1503832 * r1503832;
double r1503841 = r1503839 + r1503840;
double r1503842 = sqrt(r1503841);
double r1503843 = log(r1503842);
double r1503844 = r1503843 * r1503831;
double r1503845 = r1503833 * r1503829;
double r1503846 = r1503844 + r1503845;
double r1503847 = cos(r1503846);
double r1503848 = cbrt(r1503847);
double r1503849 = r1503848 * r1503848;
double r1503850 = r1503849 * r1503848;
double r1503851 = r1503829 * r1503843;
double r1503852 = r1503851 - r1503834;
double r1503853 = exp(r1503852);
double r1503854 = r1503850 * r1503853;
double r1503855 = -1.91205330543206e-310;
bool r1503856 = r1503824 <= r1503855;
double r1503857 = 9.798541471285326e-63;
bool r1503858 = r1503824 <= r1503857;
double r1503859 = log(r1503824);
double r1503860 = r1503829 * r1503859;
double r1503861 = r1503860 - r1503834;
double r1503862 = exp(r1503861);
double r1503863 = 3.102132787630003e-33;
bool r1503864 = r1503824 <= r1503863;
double r1503865 = exp(r1503842);
double r1503866 = log(r1503865);
double r1503867 = log(r1503866);
double r1503868 = r1503867 * r1503829;
double r1503869 = r1503868 - r1503834;
double r1503870 = exp(r1503869);
double r1503871 = r1503864 ? r1503870 : r1503862;
double r1503872 = r1503858 ? r1503862 : r1503871;
double r1503873 = r1503856 ? r1503836 : r1503872;
double r1503874 = r1503838 ? r1503854 : r1503873;
double r1503875 = r1503826 ? r1503836 : r1503874;
return r1503875;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -4.64156243455413e-17 or -5.329546007764399e-159 < x.re < -1.91205330543206e-310Initial program 36.2
Taylor expanded around 0 19.7
Taylor expanded around -inf 4.4
Simplified4.4
if -4.64156243455413e-17 < x.re < -5.329546007764399e-159Initial program 15.5
rmApplied add-cube-cbrt15.5
if -1.91205330543206e-310 < x.re < 9.798541471285326e-63 or 3.102132787630003e-33 < x.re Initial program 35.9
Taylor expanded around 0 22.5
Taylor expanded around inf 11.6
if 9.798541471285326e-63 < x.re < 3.102132787630003e-33Initial program 20.8
Taylor expanded around 0 14.0
rmApplied add-log-exp32.5
Final simplification9.8
herbie shell --seed 2019165
(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)))))