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 0.999999999861857947:\\
\;\;\;\;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}:\\
\;\;\;\;\left(\left(\sqrt[3]{\cos \left(\mathsf{fma}\left(\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right), y.im, \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\right)} \cdot \sqrt[3]{\cos \left(\mathsf{fma}\left(\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right), y.im, \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\right)}\right) \cdot \sqrt[3]{\cos \left(\mathsf{fma}\left(\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right), y.im, \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\right)}\right) \cdot \frac{{\left(\mathsf{hypot}\left(x.re, x.im\right)\right)}^{y.re}}{e^{\left(\left(\sqrt[3]{y.im} \cdot \sqrt[3]{y.im}\right) \cdot \tan^{-1}_* \frac{x.im}{x.re}\right) \cdot \sqrt[3]{y.im}}}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r25005 = x_re;
double r25006 = r25005 * r25005;
double r25007 = x_im;
double r25008 = r25007 * r25007;
double r25009 = r25006 + r25008;
double r25010 = sqrt(r25009);
double r25011 = log(r25010);
double r25012 = y_re;
double r25013 = r25011 * r25012;
double r25014 = atan2(r25007, r25005);
double r25015 = y_im;
double r25016 = r25014 * r25015;
double r25017 = r25013 - r25016;
double r25018 = exp(r25017);
double r25019 = r25011 * r25015;
double r25020 = r25014 * r25012;
double r25021 = r25019 + r25020;
double r25022 = cos(r25021);
double r25023 = r25018 * r25022;
return r25023;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r25024 = x_re;
double r25025 = r25024 * r25024;
double r25026 = x_im;
double r25027 = r25026 * r25026;
double r25028 = r25025 + r25027;
double r25029 = sqrt(r25028);
double r25030 = log(r25029);
double r25031 = y_re;
double r25032 = r25030 * r25031;
double r25033 = atan2(r25026, r25024);
double r25034 = y_im;
double r25035 = r25033 * r25034;
double r25036 = r25032 - r25035;
double r25037 = exp(r25036);
double r25038 = r25030 * r25034;
double r25039 = r25033 * r25031;
double r25040 = r25038 + r25039;
double r25041 = cos(r25040);
double r25042 = r25037 * r25041;
double r25043 = 0.999999999861858;
bool r25044 = r25042 <= r25043;
double r25045 = hypot(r25024, r25026);
double r25046 = log(r25045);
double r25047 = fma(r25046, r25034, r25039);
double r25048 = cos(r25047);
double r25049 = cbrt(r25048);
double r25050 = r25049 * r25049;
double r25051 = r25050 * r25049;
double r25052 = pow(r25045, r25031);
double r25053 = cbrt(r25034);
double r25054 = r25053 * r25053;
double r25055 = r25054 * r25033;
double r25056 = r25055 * r25053;
double r25057 = exp(r25056);
double r25058 = r25052 / r25057;
double r25059 = r25051 * r25058;
double r25060 = r25044 ? r25042 : r25059;
return r25060;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
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)))) < 0.999999999861858Initial program 4.5
if 0.999999999861858 < (* (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 46.6
Simplified6.6
rmApplied add-cube-cbrt6.6
Applied associate-*r*6.6
Simplified6.6
rmApplied add-cube-cbrt6.6
Final simplification5.9
herbie shell --seed 2019198 +o rules:numerics
(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)))))