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 r17915 = x_re;
double r17916 = r17915 * r17915;
double r17917 = x_im;
double r17918 = r17917 * r17917;
double r17919 = r17916 + r17918;
double r17920 = sqrt(r17919);
double r17921 = log(r17920);
double r17922 = y_re;
double r17923 = r17921 * r17922;
double r17924 = atan2(r17917, r17915);
double r17925 = y_im;
double r17926 = r17924 * r17925;
double r17927 = r17923 - r17926;
double r17928 = exp(r17927);
double r17929 = r17921 * r17925;
double r17930 = r17924 * r17922;
double r17931 = r17929 + r17930;
double r17932 = cos(r17931);
double r17933 = r17928 * r17932;
return r17933;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r17934 = x_re;
double r17935 = r17934 * r17934;
double r17936 = x_im;
double r17937 = r17936 * r17936;
double r17938 = r17935 + r17937;
double r17939 = sqrt(r17938);
double r17940 = log(r17939);
double r17941 = y_re;
double r17942 = r17940 * r17941;
double r17943 = atan2(r17936, r17934);
double r17944 = y_im;
double r17945 = r17943 * r17944;
double r17946 = r17942 - r17945;
double r17947 = exp(r17946);
double r17948 = r17940 * r17944;
double r17949 = r17943 * r17941;
double r17950 = r17948 + r17949;
double r17951 = cos(r17950);
double r17952 = r17947 * r17951;
double r17953 = 0.8272102543565761;
bool r17954 = r17952 <= r17953;
double r17955 = hypot(r17934, r17936);
double r17956 = pow(r17955, r17941);
double r17957 = log(r17955);
double r17958 = fma(r17957, r17944, r17949);
double r17959 = cos(r17958);
double r17960 = 3.0;
double r17961 = pow(r17959, r17960);
double r17962 = cbrt(r17961);
double r17963 = r17956 * r17962;
double r17964 = cbrt(r17943);
double r17965 = r17964 * r17964;
double r17966 = cbrt(r17964);
double r17967 = r17966 * r17966;
double r17968 = r17967 * r17966;
double r17969 = r17968 * r17944;
double r17970 = r17965 * r17969;
double r17971 = exp(r17970);
double r17972 = r17963 / r17971;
double r17973 = r17954 ? r17952 : r17972;
return r17973;
}



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)))))