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 \sin \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(e^{\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right)}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \mathsf{log1p}\left(\mathsf{expm1}\left(\sin \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 r14494 = x_re;
double r14495 = r14494 * r14494;
double r14496 = x_im;
double r14497 = r14496 * r14496;
double r14498 = r14495 + r14497;
double r14499 = sqrt(r14498);
double r14500 = log(r14499);
double r14501 = y_re;
double r14502 = r14500 * r14501;
double r14503 = atan2(r14496, r14494);
double r14504 = y_im;
double r14505 = r14503 * r14504;
double r14506 = r14502 - r14505;
double r14507 = exp(r14506);
double r14508 = r14500 * r14504;
double r14509 = r14503 * r14501;
double r14510 = r14508 + r14509;
double r14511 = sin(r14510);
double r14512 = r14507 * r14511;
return r14512;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r14513 = x_re;
double r14514 = x_im;
double r14515 = hypot(r14513, r14514);
double r14516 = log(r14515);
double r14517 = exp(r14516);
double r14518 = log(r14517);
double r14519 = y_re;
double r14520 = r14518 * r14519;
double r14521 = atan2(r14514, r14513);
double r14522 = y_im;
double r14523 = r14521 * r14522;
double r14524 = r14520 - r14523;
double r14525 = exp(r14524);
double r14526 = 1.0;
double r14527 = r14526 * r14515;
double r14528 = log(r14527);
double r14529 = r14528 * r14522;
double r14530 = r14521 * r14519;
double r14531 = r14529 + r14530;
double r14532 = sin(r14531);
double r14533 = expm1(r14532);
double r14534 = log1p(r14533);
double r14535 = r14525 * r14534;
return r14535;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
Initial program 33.0
rmApplied *-un-lft-identity33.0
Applied sqrt-prod33.0
Simplified33.0
Simplified19.6
rmApplied add-exp-log19.6
Simplified3.4
rmApplied log1p-expm1-u3.4
Final simplification3.4
herbie shell --seed 2020035 +o rules:numerics
(FPCore (x.re x.im y.re y.im)
:name "powComplex, imaginary part"
:precision binary64
(* (exp (- (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.re) (* (atan2 x.im x.re) y.im))) (sin (+ (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.im) (* (atan2 x.im x.re) y.re)))))