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)\log \left(e^{\mathsf{expm1}\left(\mathsf{log1p}\left(\cos \left(\mathsf{fma}\left(y.im, \log \left(\mathsf{hypot}\left(x.re, x.im\right)\right), \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\right)\right)\right)}\right) \cdot e^{\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right) \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}double f(double x_re, double x_im, double y_re, double y_im) {
double r1257050 = x_re;
double r1257051 = r1257050 * r1257050;
double r1257052 = x_im;
double r1257053 = r1257052 * r1257052;
double r1257054 = r1257051 + r1257053;
double r1257055 = sqrt(r1257054);
double r1257056 = log(r1257055);
double r1257057 = y_re;
double r1257058 = r1257056 * r1257057;
double r1257059 = atan2(r1257052, r1257050);
double r1257060 = y_im;
double r1257061 = r1257059 * r1257060;
double r1257062 = r1257058 - r1257061;
double r1257063 = exp(r1257062);
double r1257064 = r1257056 * r1257060;
double r1257065 = r1257059 * r1257057;
double r1257066 = r1257064 + r1257065;
double r1257067 = cos(r1257066);
double r1257068 = r1257063 * r1257067;
return r1257068;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1257069 = y_im;
double r1257070 = x_re;
double r1257071 = x_im;
double r1257072 = hypot(r1257070, r1257071);
double r1257073 = log(r1257072);
double r1257074 = atan2(r1257071, r1257070);
double r1257075 = y_re;
double r1257076 = r1257074 * r1257075;
double r1257077 = fma(r1257069, r1257073, r1257076);
double r1257078 = cos(r1257077);
double r1257079 = log1p(r1257078);
double r1257080 = expm1(r1257079);
double r1257081 = exp(r1257080);
double r1257082 = log(r1257081);
double r1257083 = r1257073 * r1257075;
double r1257084 = r1257069 * r1257074;
double r1257085 = r1257083 - r1257084;
double r1257086 = exp(r1257085);
double r1257087 = r1257082 * r1257086;
return r1257087;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Initial program 33.8
Simplified3.4
rmApplied add-log-exp3.4
rmApplied expm1-log1p-u3.4
Final simplification3.4
herbie shell --seed 2019200 +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)))))