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(1 \cdot \mathsf{hypot}\left(x.re, x.im\right)\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \mathsf{log1p}\left(\left(\sqrt[3]{\mathsf{expm1}\left(\cos \left(\log \left(1 \cdot \mathsf{hypot}\left(x.re, x.im\right)\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\right)} \cdot \sqrt[3]{\mathsf{expm1}\left(\cos \left(\log \left(1 \cdot \mathsf{hypot}\left(x.re, x.im\right)\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\right)}\right) \cdot \sqrt[3]{\mathsf{expm1}\left(\cos \left(\log \left(1 \cdot \mathsf{hypot}\left(x.re, x.im\right)\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\right)}\right)double f(double x_re, double x_im, double y_re, double y_im) {
double r14486 = x_re;
double r14487 = r14486 * r14486;
double r14488 = x_im;
double r14489 = r14488 * r14488;
double r14490 = r14487 + r14489;
double r14491 = sqrt(r14490);
double r14492 = log(r14491);
double r14493 = y_re;
double r14494 = r14492 * r14493;
double r14495 = atan2(r14488, r14486);
double r14496 = y_im;
double r14497 = r14495 * r14496;
double r14498 = r14494 - r14497;
double r14499 = exp(r14498);
double r14500 = r14492 * r14496;
double r14501 = r14495 * r14493;
double r14502 = r14500 + r14501;
double r14503 = cos(r14502);
double r14504 = r14499 * r14503;
return r14504;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r14505 = 1.0;
double r14506 = x_re;
double r14507 = x_im;
double r14508 = hypot(r14506, r14507);
double r14509 = r14505 * r14508;
double r14510 = log(r14509);
double r14511 = y_re;
double r14512 = r14510 * r14511;
double r14513 = atan2(r14507, r14506);
double r14514 = y_im;
double r14515 = r14513 * r14514;
double r14516 = r14512 - r14515;
double r14517 = exp(r14516);
double r14518 = r14510 * r14514;
double r14519 = r14513 * r14511;
double r14520 = r14518 + r14519;
double r14521 = cos(r14520);
double r14522 = expm1(r14521);
double r14523 = cbrt(r14522);
double r14524 = r14523 * r14523;
double r14525 = r14524 * r14523;
double r14526 = log1p(r14525);
double r14527 = r14517 * r14526;
return r14527;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
Initial program 33.2
rmApplied *-un-lft-identity33.2
Applied sqrt-prod33.2
Simplified33.2
Simplified19.6
rmApplied *-un-lft-identity19.6
Applied sqrt-prod19.6
Simplified19.6
Simplified3.3
rmApplied log1p-expm1-u3.3
rmApplied add-cube-cbrt3.9
Final simplification3.9
herbie shell --seed 2020049 +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)))))