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)\sqrt[3]{\cos \left(\mathsf{fma}\left(y.im, \log \left(\mathsf{hypot}\left(x.re, x.im\right)\right), y.re \cdot \tan^{-1}_* \frac{x.im}{x.re}\right)\right) \cdot \left(\cos \left(\mathsf{fma}\left(y.im, \log \left(\mathsf{hypot}\left(x.re, x.im\right)\right), y.re \cdot \tan^{-1}_* \frac{x.im}{x.re}\right)\right) \cdot \cos \left(\mathsf{fma}\left(y.im, \log \left(\mathsf{hypot}\left(x.re, x.im\right)\right), y.re \cdot \tan^{-1}_* \frac{x.im}{x.re}\right)\right)\right)} \cdot e^{\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right) \cdot y.re - \sqrt[3]{y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}} \cdot \left(\sqrt[3]{y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}} \cdot \left(\sqrt[3]{\sqrt[3]{y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}} \cdot \left(\sqrt[3]{\sqrt[3]{y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}} \cdot \sqrt[3]{\sqrt[3]{y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}}\right)\right)\right)}double f(double x_re, double x_im, double y_re, double y_im) {
double r664057 = x_re;
double r664058 = r664057 * r664057;
double r664059 = x_im;
double r664060 = r664059 * r664059;
double r664061 = r664058 + r664060;
double r664062 = sqrt(r664061);
double r664063 = log(r664062);
double r664064 = y_re;
double r664065 = r664063 * r664064;
double r664066 = atan2(r664059, r664057);
double r664067 = y_im;
double r664068 = r664066 * r664067;
double r664069 = r664065 - r664068;
double r664070 = exp(r664069);
double r664071 = r664063 * r664067;
double r664072 = r664066 * r664064;
double r664073 = r664071 + r664072;
double r664074 = cos(r664073);
double r664075 = r664070 * r664074;
return r664075;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r664076 = y_im;
double r664077 = x_re;
double r664078 = x_im;
double r664079 = hypot(r664077, r664078);
double r664080 = log(r664079);
double r664081 = y_re;
double r664082 = atan2(r664078, r664077);
double r664083 = r664081 * r664082;
double r664084 = fma(r664076, r664080, r664083);
double r664085 = cos(r664084);
double r664086 = r664085 * r664085;
double r664087 = r664085 * r664086;
double r664088 = cbrt(r664087);
double r664089 = r664080 * r664081;
double r664090 = r664076 * r664082;
double r664091 = cbrt(r664090);
double r664092 = cbrt(r664091);
double r664093 = r664092 * r664092;
double r664094 = r664092 * r664093;
double r664095 = r664091 * r664094;
double r664096 = r664091 * r664095;
double r664097 = r664089 - r664096;
double r664098 = exp(r664097);
double r664099 = r664088 * r664098;
return r664099;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Initial program 32.2
Simplified3.4
rmApplied add-cube-cbrt3.4
rmApplied add-cube-cbrt3.4
rmApplied add-cbrt-cube3.4
Final simplification3.4
herbie shell --seed 2019151 +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)))))