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}\;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) \le 1.000008988115959951414879469666630029678:\\
\;\;\;\;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)\\
\mathbf{else}:\\
\;\;\;\;\frac{{\left(\mathsf{hypot}\left(x.re, x.im\right)\right)}^{y.re}}{e^{\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 r24002 = x_re;
double r24003 = r24002 * r24002;
double r24004 = x_im;
double r24005 = r24004 * r24004;
double r24006 = r24003 + r24005;
double r24007 = sqrt(r24006);
double r24008 = log(r24007);
double r24009 = y_re;
double r24010 = r24008 * r24009;
double r24011 = atan2(r24004, r24002);
double r24012 = y_im;
double r24013 = r24011 * r24012;
double r24014 = r24010 - r24013;
double r24015 = exp(r24014);
double r24016 = r24008 * r24012;
double r24017 = r24011 * r24009;
double r24018 = r24016 + r24017;
double r24019 = cos(r24018);
double r24020 = r24015 * r24019;
return r24020;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r24021 = x_re;
double r24022 = r24021 * r24021;
double r24023 = x_im;
double r24024 = r24023 * r24023;
double r24025 = r24022 + r24024;
double r24026 = sqrt(r24025);
double r24027 = log(r24026);
double r24028 = y_re;
double r24029 = r24027 * r24028;
double r24030 = atan2(r24023, r24021);
double r24031 = y_im;
double r24032 = r24030 * r24031;
double r24033 = r24029 - r24032;
double r24034 = exp(r24033);
double r24035 = r24027 * r24031;
double r24036 = r24030 * r24028;
double r24037 = r24035 + r24036;
double r24038 = cos(r24037);
double r24039 = r24034 * r24038;
double r24040 = 1.00000898811596;
bool r24041 = r24039 <= r24040;
double r24042 = hypot(r24021, r24023);
double r24043 = pow(r24042, r24028);
double r24044 = exp(r24032);
double r24045 = r24043 / r24044;
double r24046 = r24041 ? r24039 : r24045;
return r24046;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if (* (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)))) < 1.00000898811596Initial program 3.0
if 1.00000898811596 < (* (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)))) Initial program 63.7
Simplified9.4
rmApplied add-cbrt-cube9.4
Simplified9.4
Taylor expanded around 0 10.1
Final simplification6.5
herbie shell --seed 2019208 +o rules:numerics
(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)))))