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)\frac{\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)}{e^{\sqrt[3]{y.im} \cdot \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot \left(\sqrt[3]{y.im} \cdot \sqrt[3]{y.im}\right)\right) - y.re \cdot \log \left(\mathsf{hypot}\left(x.re, x.im\right)\right)}}double f(double x_re, double x_im, double y_re, double y_im) {
double r1326176 = x_re;
double r1326177 = r1326176 * r1326176;
double r1326178 = x_im;
double r1326179 = r1326178 * r1326178;
double r1326180 = r1326177 + r1326179;
double r1326181 = sqrt(r1326180);
double r1326182 = log(r1326181);
double r1326183 = y_re;
double r1326184 = r1326182 * r1326183;
double r1326185 = atan2(r1326178, r1326176);
double r1326186 = y_im;
double r1326187 = r1326185 * r1326186;
double r1326188 = r1326184 - r1326187;
double r1326189 = exp(r1326188);
double r1326190 = r1326182 * r1326186;
double r1326191 = r1326185 * r1326183;
double r1326192 = r1326190 + r1326191;
double r1326193 = cos(r1326192);
double r1326194 = r1326189 * r1326193;
return r1326194;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1326195 = y_im;
double r1326196 = x_re;
double r1326197 = x_im;
double r1326198 = hypot(r1326196, r1326197);
double r1326199 = log(r1326198);
double r1326200 = atan2(r1326197, r1326196);
double r1326201 = y_re;
double r1326202 = r1326200 * r1326201;
double r1326203 = fma(r1326195, r1326199, r1326202);
double r1326204 = cos(r1326203);
double r1326205 = log1p(r1326204);
double r1326206 = expm1(r1326205);
double r1326207 = cbrt(r1326195);
double r1326208 = r1326207 * r1326207;
double r1326209 = r1326200 * r1326208;
double r1326210 = r1326207 * r1326209;
double r1326211 = r1326201 * r1326199;
double r1326212 = r1326210 - r1326211;
double r1326213 = exp(r1326212);
double r1326214 = r1326206 / r1326213;
return r1326214;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Initial program 32.7
Simplified3.5
rmApplied add-cube-cbrt3.5
Applied associate-*r*3.5
rmApplied expm1-log1p-u3.5
Final simplification3.5
herbie shell --seed 2019168 +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)))))