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)\begin{array}{l}
\mathbf{if}\;\sin \left(y.im \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right) \cdot e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \le 8.15915032449662 \cdot 10^{-33}:\\
\;\;\;\;\sin \left(y.im \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right) \cdot e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\mathbf{else}:\\
\;\;\;\;\sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + y.im \cdot \log \left(-x.re\right)\right) \cdot e^{\log \left(-x.re\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r873424 = x_re;
double r873425 = r873424 * r873424;
double r873426 = x_im;
double r873427 = r873426 * r873426;
double r873428 = r873425 + r873427;
double r873429 = sqrt(r873428);
double r873430 = log(r873429);
double r873431 = y_re;
double r873432 = r873430 * r873431;
double r873433 = atan2(r873426, r873424);
double r873434 = y_im;
double r873435 = r873433 * r873434;
double r873436 = r873432 - r873435;
double r873437 = exp(r873436);
double r873438 = r873430 * r873434;
double r873439 = r873433 * r873431;
double r873440 = r873438 + r873439;
double r873441 = sin(r873440);
double r873442 = r873437 * r873441;
return r873442;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r873443 = y_im;
double r873444 = x_re;
double r873445 = r873444 * r873444;
double r873446 = x_im;
double r873447 = r873446 * r873446;
double r873448 = r873445 + r873447;
double r873449 = sqrt(r873448);
double r873450 = log(r873449);
double r873451 = r873443 * r873450;
double r873452 = atan2(r873446, r873444);
double r873453 = y_re;
double r873454 = r873452 * r873453;
double r873455 = r873451 + r873454;
double r873456 = sin(r873455);
double r873457 = r873453 * r873450;
double r873458 = r873452 * r873443;
double r873459 = r873457 - r873458;
double r873460 = exp(r873459);
double r873461 = r873456 * r873460;
double r873462 = 8.15915032449662e-33;
bool r873463 = r873461 <= r873462;
double r873464 = -r873444;
double r873465 = log(r873464);
double r873466 = r873443 * r873465;
double r873467 = r873454 + r873466;
double r873468 = sin(r873467);
double r873469 = r873465 * r873453;
double r873470 = r873469 - r873458;
double r873471 = exp(r873470);
double r873472 = r873468 * r873471;
double r873473 = r873463 ? r873461 : r873472;
return r873473;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if (* (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)))) < 8.15915032449662e-33Initial program 0.2
if 8.15915032449662e-33 < (* (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)))) Initial program 61.6
Taylor expanded around -inf 21.3
Simplified21.3
Taylor expanded around -inf 19.6
Simplified19.6
Final simplification10.0
herbie shell --seed 2019139
(FPCore (x.re x.im y.re y.im)
:name "powComplex, imaginary part"
(* (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)))))