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^{\left(\left(\sqrt[3]{y.re} \cdot \sqrt[3]{y.re}\right) \cdot \left(1 \cdot \log \left(\mathsf{hypot}\left(x.re, x.im\right)\right)\right)\right) \cdot \sqrt[3]{y.re} - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}double f(double x_re, double x_im, double y_re, double y_im) {
double r15053 = x_re;
double r15054 = r15053 * r15053;
double r15055 = x_im;
double r15056 = r15055 * r15055;
double r15057 = r15054 + r15056;
double r15058 = sqrt(r15057);
double r15059 = log(r15058);
double r15060 = y_re;
double r15061 = r15059 * r15060;
double r15062 = atan2(r15055, r15053);
double r15063 = y_im;
double r15064 = r15062 * r15063;
double r15065 = r15061 - r15064;
double r15066 = exp(r15065);
double r15067 = r15059 * r15063;
double r15068 = r15062 * r15060;
double r15069 = r15067 + r15068;
double r15070 = cos(r15069);
double r15071 = r15066 * r15070;
return r15071;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r15072 = y_re;
double r15073 = cbrt(r15072);
double r15074 = r15073 * r15073;
double r15075 = 1.0;
double r15076 = x_re;
double r15077 = x_im;
double r15078 = hypot(r15076, r15077);
double r15079 = log(r15078);
double r15080 = r15075 * r15079;
double r15081 = r15074 * r15080;
double r15082 = r15081 * r15073;
double r15083 = atan2(r15077, r15076);
double r15084 = y_im;
double r15085 = r15083 * r15084;
double r15086 = r15082 - r15085;
double r15087 = exp(r15086);
return r15087;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
Initial program 33.7
Taylor expanded around 0 19.6
rmApplied add-cube-cbrt19.6
Applied associate-*r*19.6
Simplified4.2
Final simplification4.2
herbie shell --seed 2020025 +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)))))