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.827210254356576136:\\
\;\;\;\;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} \cdot \sqrt[3]{{\left(\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)}^{3}}}{e^{\left(\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}} \cdot \sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}}\right) \cdot \left(\left(\left(\sqrt[3]{\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}}} \cdot \sqrt[3]{\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}}}\right) \cdot \sqrt[3]{\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}}}\right) \cdot y.im\right)}}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r17970 = x_re;
double r17971 = r17970 * r17970;
double r17972 = x_im;
double r17973 = r17972 * r17972;
double r17974 = r17971 + r17973;
double r17975 = sqrt(r17974);
double r17976 = log(r17975);
double r17977 = y_re;
double r17978 = r17976 * r17977;
double r17979 = atan2(r17972, r17970);
double r17980 = y_im;
double r17981 = r17979 * r17980;
double r17982 = r17978 - r17981;
double r17983 = exp(r17982);
double r17984 = r17976 * r17980;
double r17985 = r17979 * r17977;
double r17986 = r17984 + r17985;
double r17987 = cos(r17986);
double r17988 = r17983 * r17987;
return r17988;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r17989 = x_re;
double r17990 = r17989 * r17989;
double r17991 = x_im;
double r17992 = r17991 * r17991;
double r17993 = r17990 + r17992;
double r17994 = sqrt(r17993);
double r17995 = log(r17994);
double r17996 = y_re;
double r17997 = r17995 * r17996;
double r17998 = atan2(r17991, r17989);
double r17999 = y_im;
double r18000 = r17998 * r17999;
double r18001 = r17997 - r18000;
double r18002 = exp(r18001);
double r18003 = r17995 * r17999;
double r18004 = r17998 * r17996;
double r18005 = r18003 + r18004;
double r18006 = cos(r18005);
double r18007 = r18002 * r18006;
double r18008 = 0.8272102543565761;
bool r18009 = r18007 <= r18008;
double r18010 = hypot(r17989, r17991);
double r18011 = pow(r18010, r17996);
double r18012 = log(r18010);
double r18013 = fma(r18012, r17999, r18004);
double r18014 = cos(r18013);
double r18015 = 3.0;
double r18016 = pow(r18014, r18015);
double r18017 = cbrt(r18016);
double r18018 = r18011 * r18017;
double r18019 = cbrt(r17998);
double r18020 = r18019 * r18019;
double r18021 = cbrt(r18019);
double r18022 = r18021 * r18021;
double r18023 = r18022 * r18021;
double r18024 = r18023 * r17999;
double r18025 = r18020 * r18024;
double r18026 = exp(r18025);
double r18027 = r18018 / r18026;
double r18028 = r18009 ? r18007 : r18027;
return r18028;
}



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.8272102543565761Initial program 3.6
if 0.8272102543565761 < (* (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.0
Simplified6.6
rmApplied add-cbrt-cube6.6
Simplified6.6
rmApplied add-cube-cbrt6.6
Applied associate-*l*6.6
rmApplied add-cube-cbrt6.6
Final simplification5.7
herbie shell --seed 2020047 +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)))))