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)e^{\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right) \cdot y.re - \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) \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)} \cdot \log \left(e^{\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)double f(double x_re, double x_im, double y_re, double y_im) {
double r616230 = x_re;
double r616231 = r616230 * r616230;
double r616232 = x_im;
double r616233 = r616232 * r616232;
double r616234 = r616231 + r616233;
double r616235 = sqrt(r616234);
double r616236 = log(r616235);
double r616237 = y_re;
double r616238 = r616236 * r616237;
double r616239 = atan2(r616232, r616230);
double r616240 = y_im;
double r616241 = r616239 * r616240;
double r616242 = r616238 - r616241;
double r616243 = exp(r616242);
double r616244 = r616236 * r616240;
double r616245 = r616239 * r616237;
double r616246 = r616244 + r616245;
double r616247 = cos(r616246);
double r616248 = r616243 * r616247;
return r616248;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r616249 = x_re;
double r616250 = x_im;
double r616251 = hypot(r616249, r616250);
double r616252 = log(r616251);
double r616253 = y_re;
double r616254 = r616252 * r616253;
double r616255 = y_im;
double r616256 = atan2(r616250, r616249);
double r616257 = r616255 * r616256;
double r616258 = cbrt(r616257);
double r616259 = cbrt(r616258);
double r616260 = r616259 * r616259;
double r616261 = r616259 * r616260;
double r616262 = r616258 * r616261;
double r616263 = r616262 * r616261;
double r616264 = r616254 - r616263;
double r616265 = exp(r616264);
double r616266 = r616253 * r616256;
double r616267 = fma(r616255, r616252, r616266);
double r616268 = cos(r616267);
double r616269 = exp(r616268);
double r616270 = log(r616269);
double r616271 = r616265 * r616270;
return r616271;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Initial program 32.8
Simplified3.4
rmApplied add-log-exp3.4
rmApplied add-cube-cbrt3.4
rmApplied add-cube-cbrt3.4
rmApplied add-cube-cbrt3.4
Final simplification3.4
herbie shell --seed 2019154 +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)))))